Buggy code:
public class RecoveredType extends RecoveredStatement implements CompilerModifiers , TerminalTokens { public TypeDeclaration typeDeclaration ; public RecoveredType [ ] memberTypes ; public int memberTypeCount ; public RecoveredField [ ] fields ; public int fieldCount ; public RecoveredMethod [ ] methods ; public int methodCount ; public boolean preserveContent = false ; public int bodyEnd ; public RecoveredType ( TypeDeclaration typeDeclaration , RecoveredElement parent , int bracketBalance ) { } public RecoveredElement add ( AbstractMethodDeclaration methodDeclaration , int bracketBalanceValue ) { } public RecoveredElement add ( Block nestedBlockDeclaration , int bracketBalanceValue ) { } public RecoveredElement add ( FieldDeclaration fieldDeclaration , int bracketBalanceValue ) { } public RecoveredElement add ( TypeDeclaration memberTypeDeclaration , int bracketBalanceValue ) { if ( ( ( typeDeclaration . declarationSourceEnd ) != 0 ) && ( ( memberTypeDeclaration . declarationSourceStart ) > ( typeDeclaration . declarationSourceEnd ) ) ) { ( this . parser ( ) . enumConstantPartPtr ) -- ; return this . parent . add ( memberTypeDeclaration , bracketBalanceValue ) ; } if ( ( ( memberTypeDeclaration . bits ) & ( IsAnonymousTypeMASK ) ) != 0 ) { if ( ( this . methodCount ) > 0 ) { RecoveredMethod lastMethod = this . methods [ ( ( this . methodCount ) - 1 ) ] ; lastMethod . methodDeclaration . bodyEnd = 0 ; lastMethod . methodDeclaration . declarationSourceEnd = 0 ; ( lastMethod . bracketBalance ) ++ ; return lastMethod . add ( memberTypeDeclaration , bracketBalanceValue ) ; } else { return this ; } } if ( ( memberTypes ) == null ) { memberTypes = new RecoveredType [ 5 ] ; memberTypeCount = 0 ; } else { if ( ( memberTypeCount ) == ( memberTypes . length ) ) { System . arraycopy ( memberTypes , 0 , ( memberTypes = new RecoveredType [ 2 * ( memberTypeCount ) ] ) , 0 , memberTypeCount ) ; } } RecoveredType element = new RecoveredType ( memberTypeDeclaration , this , bracketBalanceValue ) ; memberTypes [ ( ( memberTypeCount ) ++ ) ] = element ; if ( ! ( foundOpeningBrace ) ) { foundOpeningBrace = true ; ( this . bracketBalance ) ++ ; } if ( ( memberTypeDeclaration . declarationSourceEnd ) == 0 ) { <START_BUG> this . parser ( ) . pushOnEnumConstantPartStack ( ( ( typeDeclaration . getKind ( ) ) == ( ENUM ) ) ) ; <END_BUG> return element ; } return this ; } public int bodyEnd ( ) { } public boolean bodyStartsAtHeaderEnd ( ) { } public RecoveredType enclosingType ( ) { } public char [ ] name ( ) { } public ASTNode parseTree ( ) { } public int sourceEnd ( ) { } public String toString ( int tab ) { } public void updateBodyStart ( int bodyStart ) { } public Statement updatedStatement ( ) { } public TypeDeclaration updatedTypeDeclaration ( ) { } public void updateFromParserState ( ) { } public RecoveredElement updateOnClosingBrace ( int braceStart , int braceEnd ) { } public RecoveredElement updateOnOpeningBrace ( int braceStart , int braceEnd ) { } public void updateParseTree ( ) { } public void updateSourceEndIfNecessary ( int start , int end ) { } }

Fix:
this . parser ( ) . pushOnEnumConstantPartStack ( ( ( memberTypeDeclaration . getKind ( ) ) == ( ENUM ) ) ) ;