You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by sj...@apache.org on 2009/03/05 16:55:30 UTC
svn commit: r750481 - in
/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200:
ClassBands.java IcBands.java
Author: sjanuary
Date: Thu Mar 5 15:55:28 2009
New Revision: 750481
URL: http://svn.apache.org/viewvc?rev=750481&view=rev
Log:
Pack200 - minor fixes for inner class attributes
Modified:
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/ClassBands.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/IcBands.java
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/ClassBands.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/ClassBands.java?rev=750481&r1=750480&r2=750481&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/ClassBands.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/ClassBands.java Thu Mar 5 15:55:28 2009
@@ -183,7 +183,7 @@
public void currentClassReferencesInnerClass(CPClass inner) {
if(!(index >= class_this.length)) {
CPClass currentClass = class_this[index];
- if(currentClass != null && !currentClass.equals(inner) && !isInnerClassOf(currentClass, inner)) {
+ if(currentClass != null && !currentClass.equals(inner) && !isInnerClassOf(currentClass.toString(), inner)) {
Set referencedInnerClasses = (Set)classReferencesInnerClass.get(currentClass);
if(referencedInnerClasses == null) {
referencedInnerClasses = new HashSet();
@@ -194,15 +194,22 @@
}
}
- private boolean isInnerClassOf(CPClass possibleInner, CPClass possibleOuter) {
- String currentClassName = possibleInner.toString();
- if(possibleInner.isInnerClass()) {
- String superClassName = currentClassName.substring(0, currentClassName.lastIndexOf('$'));
- return superClassName.equals(possibleOuter.toString());
+ private boolean isInnerClassOf(String possibleInner, CPClass possibleOuter) {
+ if(isInnerClass(possibleInner)) {
+ String superClassName = possibleInner.substring(0, possibleInner.lastIndexOf('$'));
+ if(superClassName.equals(possibleOuter.toString())) {
+ return true;
+ } else { // do this recursively
+ return isInnerClassOf(superClassName, possibleOuter);
+ }
}
return false;
}
+ private boolean isInnerClass(String possibleInner) {
+ return possibleInner.indexOf('$') != -1;
+ }
+
public void addField(int flags, String name, String desc, String signature,
Object value) {
flags = flags & 0xFFFF;
@@ -292,7 +299,7 @@
.hasNext();) {
CPClass inner = (CPClass) iterator2.next();
IcTuple icTuple = segment.getIcBands().getIcTuple(inner);
- if(icTuple != null) {
+ if(icTuple != null && ! icTuple.isAnonymous()) {
// should transmit an icLocal entry
icLocal.add(icTuple);
innerN++;
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/IcBands.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/IcBands.java?rev=750481&r1=750480&r2=750481&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/IcBands.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/IcBands.java Thu Mar 5 15:55:28 2009
@@ -156,6 +156,12 @@
return C.compareTo(((IcTuple)arg0).C);
}
+ public boolean isAnonymous() {
+ String className = C.toString();
+ String innerName = className.substring(className.lastIndexOf('$') + 1);
+ return Character.isDigit(innerName.charAt(0));
+ }
+
}
public IcTuple getIcTuple(CPClass inner) {