Buggy code:
class MethodVerifier15 extends MethodVerifier { MethodVerifier15 ( LookupEnvironment environment ) { } boolean areMethodsEqual ( MethodBinding one , MethodBinding two ) { } boolean areParametersEqual ( MethodBinding one , MethodBinding two ) { } boolean areReturnTypesEqual ( MethodBinding one , MethodBinding substituteTwo ) { } boolean areTypesEqual ( TypeBinding one , TypeBinding two ) { } boolean canSkipInheritedMethods ( ) { } boolean canSkipInheritedMethods ( MethodBinding one , MethodBinding two ) { } void checkConcreteInheritedMethod ( MethodBinding concreteMethod , MethodBinding [ ] abstractMethods ) { } void checkForBridgeMethod ( MethodBinding currentMethod , MethodBinding inheritedMethod , MethodBinding [ ] allInheritedMethods ) { } void checkForInheritedNameClash ( MethodBinding inheritedMethod , MethodBinding otherInheritedMethod ) { } void checkForNameClash ( MethodBinding currentMethod , MethodBinding inheritedMethod ) { } void checkInheritedMethods ( MethodBinding [ ] methods , int length ) { } boolean checkInheritedReturnTypes ( MethodBinding [ ] methods , int length ) { } void checkMethods ( ) { } void checkTypeVariableMethods ( ) { } MethodBinding computeSubstituteMethod ( MethodBinding inheritedMethod , MethodBinding currentMethod ) { if ( inheritedMethod == null ) return null ; if ( ( currentMethod . parameters . length ) != ( inheritedMethod . parameters . length ) ) return null ; if ( ( currentMethod . declaringClass ) instanceof BinaryTypeBinding ) ( ( BinaryTypeBinding ) ( currentMethod . declaringClass ) ) . resolveTypesFor ( currentMethod ) ; if ( ( inheritedMethod . declaringClass ) instanceof BinaryTypeBinding ) ( ( BinaryTypeBinding ) ( inheritedMethod . declaringClass ) ) . resolveTypesFor ( inheritedMethod ) ; TypeVariableBinding [ ] inheritedTypeVariables = inheritedMethod . typeVariables ; if ( inheritedTypeVariables == ( Binding . NO_TYPE_VARIABLES ) ) return inheritedMethod ; int inheritedLength = inheritedTypeVariables . length ; TypeVariableBinding [ ] typeVariables = currentMethod . typeVariables ; int length = typeVariables . length ; if ( ( length > 0 ) && ( inheritedLength != length ) ) return inheritedMethod ; TypeBinding [ ] arguments = new TypeBinding [ inheritedLength ] ; if ( inheritedLength <= length ) { System . arraycopy ( typeVariables , 0 , arguments , 0 , inheritedLength ) ; } else { System . arraycopy ( typeVariables , 0 , arguments , 0 , length ) ; for ( int i = length ; i < inheritedLength ; i ++ ) arguments [ i ] = inheritedTypeVariables [ i ] . upperBound ( ) ; } <START_BUG> ParameterizedGenericMethodBinding substitute = new ParameterizedGenericMethodBinding ( inheritedMethod , arguments , this . environment ) ; <END_BUG> for ( int i = 0 ; i < inheritedLength ; i ++ ) { TypeVariableBinding inheritedTypeVariable = inheritedTypeVariables [ i ] ; TypeBinding argument = arguments [ i ] ; if ( argument instanceof TypeVariableBinding ) { TypeVariableBinding typeVariable = ( ( TypeVariableBinding ) ( argument ) ) ; if ( ( Scope . substitute ( substitute , inheritedTypeVariable . superclass ) ) != ( typeVariable . superclass ) ) return inheritedMethod ; int interfaceLength = inheritedTypeVariable . superInterfaces . length ; ReferenceBinding [ ] interfaces = typeVariable . superInterfaces ; if ( interfaceLength != ( interfaces . length ) ) return inheritedMethod ; next : for ( int j = 0 ; j < interfaceLength ; j ++ ) { TypeBinding superType = Scope . substitute ( substitute , inheritedTypeVariable . superInterfaces [ j ] ) ; for ( int k = 0 ; k < interfaceLength ; k ++ ) if ( superType == ( interfaces [ k ] ) ) continue next ; return inheritedMethod ; } } else if ( ( inheritedTypeVariable . boundCheck ( substitute , argument ) ) != ( OK ) ) { return inheritedMethod ; } } return substitute ; } boolean detectInheritedNameClash ( MethodBinding inherited , MethodBinding otherInherited ) { } boolean detectNameClash ( MethodBinding current , MethodBinding inherited ) { } public boolean doesMethodOverride ( MethodBinding method , MethodBinding inheritedMethod ) { } boolean doesSubstituteMethodOverride ( MethodBinding method , MethodBinding substituteMethod ) { } boolean doTypeVariablesClash ( MethodBinding one , MethodBinding substituteTwo ) { } boolean isInterfaceMethodImplemented ( MethodBinding inheritedMethod , MethodBinding existingMethod , ReferenceBinding superType ) { } boolean reportIncompatibleReturnTypeError ( MethodBinding currentMethod , MethodBinding inheritedMethod ) { } void verify ( SourceTypeBinding someType ) { } }

Fix:
ParameterizedGenericMethodBinding substitute = this . environment . createParameterizedGenericMethod ( inheritedMethod , arguments ) ;