Buggy code:
contents [ ( ( contentsOffset ) ++ ) ] = ( ( byte ) ( deprecatedAttributeNameIndex > > 8 ) ) ; contents [ ( ( contentsOffset ) ++ ) ] = ( ( byte ) ( deprecatedAttributeNameIndex ) ) ; contents [ ( ( contentsOffset ) ++ ) ] = 0 ; contents [ ( ( contentsOffset ) ++ ) ] = 0 ; contents [ ( ( contentsOffset ) ++ ) ] = 0 ; contents [ ( ( contentsOffset ) ++ ) ] = 0 ; attributeNumber ++ ; } if ( ( numberOfInnerClasses ) != 0 ) { int exSize = ( 8 * ( numberOfInnerClasses ) ) + 8 ; if ( ( exSize + ( contentsOffset ) ) >= ( this . contents . length ) ) { resizeContents ( exSize ) ; } int attributeNameIndex = constantPool . literalIndex ( AttributeNamesConstants . InnerClassName ) ; contents [ ( ( contentsOffset ) ++ ) ] = ( ( byte ) ( attributeNameIndex > > 8 ) ) ; contents [ ( ( contentsOffset ) ++ ) ] = ( ( byte ) ( attributeNameIndex ) ) ; int value = ( ( numberOfInnerClasses ) << 3 ) + 2 ; contents [ ( ( contentsOffset ) ++ ) ] = ( ( byte ) ( value > > 24 ) ) ; contents [ ( ( contentsOffset ) ++ ) ] = ( ( byte ) ( value > > 16 ) ) ; contents [ ( ( contentsOffset ) ++ ) ] = ( ( byte ) ( value > > 8 ) ) ; contents [ ( ( contentsOffset ) ++ ) ] = ( ( byte ) ( value ) ) ; contents [ ( ( contentsOffset ) ++ ) ] = ( ( byte ) ( ( numberOfInnerClasses ) > > 8 ) ) ; contents [ ( ( contentsOffset ) ++ ) ] = ( ( byte ) ( numberOfInnerClasses ) ) ; for ( int i = 0 ; i < ( numberOfInnerClasses ) ; i ++ ) { ReferenceBinding innerClass = innerClassesBindings [ i ] ; int accessFlags = innerClass . getAccessFlags ( ) ; int innerClassIndex = constantPool . literalIndexForType ( innerClass . constantPoolName ( ) ) ; contents [ ( ( contentsOffset ) ++ ) ] = ( ( byte ) ( innerClassIndex > > 8 ) ) ; contents [ ( ( contentsOffset ) ++ ) ] = ( ( byte ) ( innerClassIndex ) ) ; if ( innerClass . isMemberType ( ) ) { int outerClassIndex = constantPool . literalIndexForType ( innerClass . enclosingType ( ) . constantPoolName ( ) ) ; contents [ ( ( contentsOffset ) ++ ) ] = ( ( byte ) ( outerClassIndex > > 8 ) ) ; contents [ ( ( contentsOffset ) ++ ) ] = ( ( byte ) ( outerClassIndex ) ) ; } else { contents [ ( ( contentsOffset ) ++ ) ] = 0 ; contents [ ( ( contentsOffset ) ++ ) ] = 0 ; } if ( ! ( innerClass . isAnonymousType ( ) ) ) { int nameIndex = constantPool . literalIndex ( innerClass . sourceName ( ) ) ; contents [ ( ( contentsOffset ) ++ ) ] = ( ( byte ) ( nameIndex > > 8 ) ) ; contents [ ( ( contentsOffset ) ++ ) ] = ( ( byte ) ( nameIndex ) ) ; } else { contents [ ( ( contentsOffset ) ++ ) ] = 0 ; contents [ ( ( contentsOffset ) ++ ) ] = 0 ; } if ( innerClass . isAnonymousType ( ) ) { accessFlags |= AccPrivate ; } else if ( ( innerClass . isLocalType ( ) ) && ( ! ( innerClass . isMemberType ( ) ) ) ) { accessFlags |= AccPrivate ; } else <START_BUG> if ( ( innerClass . isMemberType ( ) ) && ( ( innerClass . isInterface ( ) ) || ( innerClass . isAnnotationType ( ) ) ) ) { <END_BUG> accessFlags |= AccStatic ; } contents [ ( ( contentsOffset ) ++ ) ] = ( ( byte ) ( accessFlags > > 8 ) ) ; contents [ ( ( contentsOffset ) ++ ) ] = ( ( byte ) ( accessFlags ) ) ; } attributeNumber ++ ; } char [ ] genericSignature = referenceBinding . genericSignature ( ) ; if ( genericSignature != null ) { if ( ( ( contentsOffset ) + 8 ) >= ( contents . length ) ) { resizeContents ( 8 ) ; } int signatureAttributeNameIndex = constantPool . literalIndex ( AttributeNamesConstants . SignatureName ) ; contents [ ( ( contentsOffset ) ++ ) ] = ( ( byte ) ( signatureAttributeNameIndex > > 8 ) ) ; contents [ ( ( contentsOffset ) ++ ) ] = ( ( byte ) ( signatureAttributeNameIndex ) ) ; contents [ ( ( contentsOffset ) ++ ) ] = 0 ; contents [ ( ( contentsOffset ) ++ ) ] = 0 ; contents [ ( ( contentsOffset ) ++ ) ] = 0 ; contents [ ( ( contentsOffset ) ++ ) ] = 2 ; int signatureIndex = constantPool . literalIndex ( genericSignature ) ; contents [ ( ( contentsOffset ) ++ ) ] = ( ( byte ) ( signatureIndex > > 8 ) ) ; contents [ ( ( contentsOffset ) ++ ) ] = ( ( byte ) ( signatureIndex ) ) ; attributeNumber ++ ; } if ( ( ( targetJDK ) >= ( ClassFileConstants . JDK1_5 ) ) && ( ( this . referenceBinding . isAnonymousType ( ) ) || ( this . referenceBinding . isLocalType ( ) ) ) ) { if ( ( ( contentsOffset ) + 10 ) >= ( contents . length ) ) { resizeContents ( 10 ) ;

Fix:
if ( ( innerClass . isMemberType ( ) ) && ( innerClass . isInterface ( ) ) ) {