Buggy code:
public abstract class Scope { 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 static final int EQUAL_OR_MORE_SPECIFIC = - 1 ; public static final int NOT_RELATED = 0 ; public static final int MORE_GENERIC = 1 ; public int kind ; public Scope parent ; protected Scope ( int kind , Scope parent ) { } public static int compareTypes ( TypeBinding left , TypeBinding right ) { } public static TypeBinding convertEliminatingTypeVariables ( TypeBinding originalType , ReferenceBinding genericType , int rank , Set eliminatedVariables ) { } public static TypeBinding getBaseType ( char [ ] name ) { } public static ReferenceBinding [ ] greaterLowerBound ( ReferenceBinding [ ] types ) { } public static TypeBinding [ ] greaterLowerBound ( TypeBinding [ ] types ) { } public static ReferenceBinding [ ] substitute ( Substitution substitution , ReferenceBinding [ ] originalTypes ) { } public static TypeBinding substitute ( Substitution substitution , TypeBinding originalType ) { } public static TypeBinding [ ] substitute ( Substitution substitution , TypeBinding [ ] originalTypes ) { } public TypeBinding boxing ( TypeBinding type ) { } public final ClassScope classScope ( ) { } public final CompilationUnitScope compilationUnitScope ( ) { } public final CompilerOptions compilerOptions ( ) { } protected final MethodBinding computeCompatibleMethod ( MethodBinding method , TypeBinding [ ] arguments , InvocationSite invocationSite ) { } protected boolean connectTypeVariables ( TypeParameter [ ] typeParameters , boolean checkForErasedCandidateCollisions ) { } public ArrayBinding createArrayType ( TypeBinding type , int dimension ) { } public TypeVariableBinding [ ] createTypeVariables ( TypeParameter [ ] typeParameters , Binding declaringElement ) { } public final ClassScope enclosingClassScope ( ) { } public final MethodScope enclosingMethodScope ( ) { } public final ReferenceBinding enclosingReceiverType ( ) { } public ReferenceContext enclosingReferenceContext ( ) { } public final SourceTypeBinding enclosingSourceType ( ) { } public final LookupEnvironment environment ( ) { } protected MethodBinding findDefaultAbstractMethod ( ReferenceBinding receiverType , char [ ] selector , TypeBinding [ ] argumentTypes , InvocationSite invocationSite , ReferenceBinding classHierarchyStart , ObjectVector found , MethodBinding concreteMatch ) { int startFoundSize = found . size ; ReferenceBinding currentType = classHierarchyStart ; while ( currentType != null ) { findMethodInSuperInterfaces ( currentType , selector , found , invocationSite ) ; currentType = currentType . superclass ( ) ; } MethodBinding [ ] candidates = null ; int candidatesCount = 0 ; MethodBinding problemMethod = null ; int foundSize = found . size ; if ( foundSize > startFoundSize ) { for ( int i = startFoundSize ; i < foundSize ; i ++ ) { MethodBinding methodBinding = ( ( MethodBinding ) ( found . elementAt ( i ) ) ) ; MethodBinding compatibleMethod = computeCompatibleMethod ( methodBinding , argumentTypes , invocationSite ) ; if ( compatibleMethod != null ) { if ( compatibleMethod . isValidBinding ( ) ) { if ( ( concreteMatch != null ) && ( ( concreteMatch . declaringClass . findSuperTypeOriginatingFrom ( compatibleMethod . declaringClass ) ) != null ) ) <START_BUG> if ( environment ( ) . methodVerifier ( ) . isParameterSubsignature ( concreteMatch , compatibleMethod ) ) <END_BUG> continue ; if ( candidatesCount == 0 ) { candidates = new MethodBinding [ ( foundSize - startFoundSize ) + 1 ] ; if ( concreteMatch != null ) candidates [ ( candidatesCount ++ ) ] = concreteMatch ; } candidates [ ( candidatesCount ++ ) ] = compatibleMethod ; } else if ( problemMethod == null ) { problemMethod = compatibleMethod ; } } } } if ( candidatesCount < 2 ) { if ( concreteMatch == null ) { if ( candidatesCount == 0 ) return problemMethod ; concreteMatch = candidates [ 0 ] ; } compilationUnitScope ( ) . recordTypeReferences ( concreteMatch . thrownExceptions ) ; return concreteMatch ; } if ( ( compilerOptions ( ) . complianceLevel ) >= ( ClassFileConstants . JDK1_4 ) ) return mostSpecificMethodBinding ( candidates , candidatesCount , argumentTypes , invocationSite , receiverType ) ; return mostSpecificInterfaceMethodBinding ( candidates , candidatesCount , invocationSite ) ; } 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 findMethod ( ReferenceBinding receiverType , char [ ] selector , TypeBinding [ ] argumentTypes , InvocationSite invocationSite , boolean inStaticContext ) { } public MethodBinding findMethodForArray ( ArrayBinding receiverType , char [ ] selector , TypeBinding [ ] argumentTypes , InvocationSite invocationSite ) { } protected void findMethodInSuperInterfaces ( ReferenceBinding currentType , char [ ] selector , ObjectVector found , InvocationSite invocationSite ) { } 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 ) { }

Fix:
if ( environment ( ) . methodVerifier ( ) . isParameterSubsignature ( concreteMatch . original ( ) , compatibleMethod . original ( ) ) )