Index: main/java/org/apache/harmony/unpack200/IcBands.java =================================================================== --- main/java/org/apache/harmony/unpack200/IcBands.java (revision 694003) +++ main/java/org/apache/harmony/unpack200/IcBands.java (working copy) @@ -134,7 +134,7 @@ // this relation is 1:M // If it's not anon and the outer is not anon, it could be relevant - if (!tuple.isAnonymous() && !tuple.outerIsAnonymous()) { + if ( (!tuple.isAnonymous() && !tuple.outerIsAnonymous()) || (tuple.nestedExplicitFlagSet()) ) { // add tuple to corresponding bucket String key = tuple.outerClassString(); Index: main/java/org/apache/harmony/unpack200/IcTuple.java =================================================================== --- main/java/org/apache/harmony/unpack200/IcTuple.java (revision 694003) +++ main/java/org/apache/harmony/unpack200/IcTuple.java (working copy) @@ -90,7 +90,17 @@ return predictOuter || predictSimple; } + /** + * Answer true if the receiver's bit 16 is set (indicating + * that explicit outer class and name fields are set). + * @return boolean + */ + public boolean nestedExplicitFlagSet() { + return (F & NESTED_CLASS_FLAG) == NESTED_CLASS_FLAG; + } + + /** * Break the receiver into components at $ boundaries. */ public String[] innerBreakAtDollar(String className) { @@ -237,7 +247,7 @@ if (isAllDigits(cachedSimpleClassName)) { anonymous = true; member = false; - if ((F & 65536) == 65536) { + if (nestedExplicitFlagSet()) { // Predicted class - marking as member member = true; }