Buggy code:
public abstract class Scope implements BaseTypes , CompilerModifiers , ProblemReasons , TagBits , TypeConstants , TypeIds { public static final int BLOCK_SCOPE = 1 ; public static final int CLASS_SCOPE = 3 ; public static final int COMPILATION_UNIT_SCOPE = 4 ; public static final int METHOD_SCOPE = 2 ; public static final int NOT_COMPATIBLE = - 1 ; public static final int COMPATIBLE = 0 ; public static final int AUTOBOX_COMPATIBLE = 1 ; public static final int VARARGS_COMPATIBLE = 2 ; public int kind ; public Scope parent ; public static int compareTypes ( TypeBinding left , TypeBinding right ) { } public static TypeBinding getBaseType ( char [ ] name ) { } public static ReferenceBinding [ ] substitute ( Substitution substitution , ReferenceBinding [ ] originalTypes ) { } public static TypeBinding substitute ( Substitution substitution , TypeBinding originalType ) { } public static TypeBinding [ ] substitute ( Substitution substitution , TypeBinding [ ] originalTypes ) { } protected Scope ( int kind , Scope parent ) { } public TypeBinding boxing ( TypeBinding type ) { } public final ClassScope classScope ( ) { } public int compareUncheckedException ( ReferenceBinding type ) { } public final CompilationUnitScope compilationUnitScope ( ) { } protected final MethodBinding computeCompatibleMethod ( MethodBinding method , TypeBinding [ ] arguments , InvocationSite invocationSite ) { } protected boolean connectTypeVariables ( TypeParameter [ ] typeParameters ) { } public TypeBinding convertToRawType ( TypeBinding type ) { } public ArrayBinding createArrayType ( TypeBinding type , int dimension ) { } public ParameterizedTypeBinding createParameterizedType ( ReferenceBinding genericType , TypeBinding [ ] arguments , ReferenceBinding enclosingType ) { } public TypeVariableBinding [ ] createTypeVariables ( TypeParameter [ ] typeParameters , Binding declaringElement ) { } public final ClassScope enclosingClassScope ( ) { } public final MethodScope enclosingMethodScope ( ) { } public final SourceTypeBinding enclosingSourceType ( ) { } public final LookupEnvironment environment ( ) { } public MethodBinding findDefaultAbstractMethod ( ReferenceBinding receiverType , char [ ] selector , TypeBinding [ ] argumentTypes , InvocationSite invocationSite , ReferenceBinding classHierarchyStart , MethodBinding matchingMethod , ObjectVector found ) { } public ReferenceBinding findDirectMemberType ( char [ ] typeName , ReferenceBinding enclosingType ) { } public MethodBinding findExactMethod ( ReferenceBinding receiverType , char [ ] selector , TypeBinding [ ] argumentTypes , InvocationSite invocationSite ) { } public FieldBinding findField ( TypeBinding receiverType , char [ ] fieldName , InvocationSite invocationSite , boolean needResolve ) { } public ReferenceBinding findMemberType ( char [ ] typeName , ReferenceBinding enclosingType ) { } public MethodBinding findMethod ( ReferenceBinding receiverType , char [ ] selector , TypeBinding [ ] argumentTypes , InvocationSite invocationSite ) { } public MethodBinding findMethodForArray ( ArrayBinding receiverType , char [ ] selector , TypeBinding [ ] argumentTypes , InvocationSite invocationSite ) { TypeBinding leafType = receiverType . leafComponentType ( ) ; if ( leafType instanceof ReferenceBinding ) { if ( ! ( ( ( ReferenceBinding ) ( leafType ) ) . canBeSeenBy ( this ) ) ) return new ProblemMethodBinding ( selector , NoParameters , ( ( ReferenceBinding ) ( leafType ) ) , ProblemReasons . ReceiverTypeNotVisible ) ; } ReferenceBinding object = getJavaLangObject ( ) ; <START_BUG> MethodBinding methodBinding = object . getExactMethod ( selector , argumentTypes ) ; <END_BUG> if ( methodBinding != null ) { if ( argumentTypes == ( NoParameters ) ) { switch ( selector [ 0 ] ) { case 'c' : if ( CharOperation . equals ( selector , TypeConstants . CLONE ) ) { return new UpdatedMethodBinding ( ( ( environment ( ) . options . targetJDK ) >= ( ClassFileConstants . JDK1_4 ) ? ( ( TypeBinding ) ( receiverType ) ) : ( ( TypeBinding ) ( object ) ) ) , ( ( ( methodBinding . modifiers ) & ( ~ ( AccProtected ) ) ) | ( AccPublic ) ) , TypeConstants . CLONE , methodBinding . returnType , argumentTypes , null , object ) ; } break ; case 'g' : if ( ( CharOperation . equals ( selector , TypeConstants . GETCLASS ) ) && ( methodBinding . returnType . isParameterizedType ( ) ) ) { return ParameterizedMethodBinding . instantiateGetClass ( receiverType , methodBinding , this ) ; } break ; } } if ( methodBinding . canBeSeenBy ( receiverType , invocationSite , this ) ) return methodBinding ; } methodBinding = findMethod ( object , selector , argumentTypes , invocationSite ) ; if ( methodBinding == null ) return new ProblemMethodBinding ( selector , argumentTypes , ProblemReasons . NotFound ) ; if ( methodBinding . isValidBinding ( ) ) { MethodBinding compatibleMethod = computeCompatibleMethod ( methodBinding , argumentTypes , invocationSite ) ; if ( compatibleMethod == null ) return new ProblemMethodBinding ( methodBinding , selector , argumentTypes , ProblemReasons . NotFound ) ; if ( ! ( compatibleMethod . isValidBinding ( ) ) ) return compatibleMethod ; methodBinding = compatibleMethod ; if ( ! ( methodBinding . canBeSeenBy ( receiverType , invocationSite , this ) ) ) return new ProblemMethodBinding ( methodBinding , selector , methodBinding . parameters , ProblemReasons . NotVisible ) ; } return methodBinding ; } public MethodBinding findMethodInSuperInterfaces ( ReferenceBinding currentType , char [ ] selector , ObjectVector found , MethodBinding matchingMethod ) { } public ReferenceBinding findType ( char [ ] typeName , PackageBinding declarationPackage , PackageBinding invocationPackage ) { } public LocalVariableBinding findVariable ( char [ ] variable ) { } public Binding getBinding ( char [ ] name , int mask , InvocationSite invocationSite , boolean needResolve ) { } public MethodBinding getConstructor ( ReferenceBinding receiverType , TypeBinding [ ] argumentTypes , InvocationSite invocationSite ) { } public final PackageBinding getCurrentPackage ( ) { } public int getDeclarationModifiers ( ) { } public FieldBinding getField ( TypeBinding receiverType , char [ ] fieldName , InvocationSite invocationSite ) { } public MethodBinding getImplicitMethod ( char [ ] selector , TypeBinding [ ] argumentTypes , InvocationSite invocationSite ) { }

Fix:
MethodBinding methodBinding = object . getExactMethod ( selector , argumentTypes , null ) ;