Buggy code:
public class MessageSend extends Expression implements InvocationSite { public Expression receiver ; public char [ ] selector ; public Expression [ ] arguments ; public MethodBinding binding ; public MethodBinding codegenBinding ; public long nameSourcePosition ; public MethodBinding syntheticAccessor ; public TypeBinding receiverType ; public TypeBinding qualifyingType ; public MessageSend ( ) { } public FlowInfo analyseCode ( BlockScope currentScope , FlowContext flowContext , FlowInfo flowInfo ) { } public void generateCode ( BlockScope currentScope , CodeStream codeStream , boolean valueRequired ) { } public boolean isSuperAccess ( ) { } public boolean isTypeAccess ( ) { } public void manageEnclosingInstanceAccessIfNecessary ( BlockScope currentScope ) { } public void manageSyntheticAccessIfNecessary ( BlockScope currentScope ) { if ( binding . alwaysNeedsAccessMethod ( ) ) { <START_BUG> syntheticAccessor = binding . getAccessMethod ( ) ; <END_BUG> return ; } if ( binding . isPrivate ( ) ) { if ( ( currentScope . enclosingSourceType ( ) ) != ( binding . declaringClass ) ) { syntheticAccessor = ( ( SourceTypeBinding ) ( binding . declaringClass ) ) . addSyntheticMethod ( binding ) ; currentScope . problemReporter ( ) . needToEmulateMethodAccess ( binding , this ) ; return ; } } else if ( ( receiver ) instanceof QualifiedSuperReference ) { SourceTypeBinding destinationType = ( ( SourceTypeBinding ) ( ( ( QualifiedSuperReference ) ( receiver ) ) . currentCompatibleType ) ) ; syntheticAccessor = destinationType . addSyntheticMethod ( binding ) ; currentScope . problemReporter ( ) . needToEmulateMethodAccess ( binding , this ) ; return ; } else if ( binding . isProtected ( ) ) { SourceTypeBinding enclosingSourceType ; if ( ( ( ( bits ) & ( ASTNode . DepthMASK ) ) != 0 ) && ( ( binding . declaringClass . getPackage ( ) ) != ( ( enclosingSourceType = currentScope . enclosingSourceType ( ) ) . getPackage ( ) ) ) ) { SourceTypeBinding currentCompatibleType = ( ( SourceTypeBinding ) ( enclosingSourceType . enclosingTypeAt ( ( ( ( bits ) & ( ASTNode . DepthMASK ) ) > > ( ASTNode . DepthSHIFT ) ) ) ) ) ; syntheticAccessor = currentCompatibleType . addSyntheticMethod ( binding ) ; currentScope . problemReporter ( ) . needToEmulateMethodAccess ( binding , this ) ; return ; } } if ( ( ( ( binding . declaringClass ) != ( this . qualifyingType ) ) && ( ! ( this . qualifyingType . isArrayType ( ) ) ) ) && ( ( ( ( ( currentScope . environment ( ) . options . complianceLevel ) >= ( JDK1_4 ) ) && ( ( ( receiver ) != ( ThisImplicit ) ) || ( ! ( binding . isStatic ( ) ) ) ) ) && ( ( binding . declaringClass . id ) != ( T_Object ) ) ) || ( ! ( binding . declaringClass . canBeSeenBy ( currentScope ) ) ) ) ) { this . codegenBinding = currentScope . enclosingSourceType ( ) . getUpdatedMethodBinding ( binding , ( ( ReferenceBinding ) ( this . qualifyingType ) ) ) ; } } public TypeBinding resolveType ( BlockScope scope ) { } protected void resolveMethodBinding ( BlockScope scope , TypeBinding [ ] argumentTypes ) { } public void setActualReceiverType ( ReferenceBinding receiverType ) { } public void setDepth ( int depth ) { } public void setFieldIndex ( int depth ) { } public String toStringExpression ( ) { } public void traverse ( IAbstractSyntaxTreeVisitor visitor , BlockScope blockScope ) { } }

Fix:
syntheticAccessor = binding . getAccessMethod ( isSuperAccess ( ) ) ;