Buggy code:
class MethodVerifier15 extends MethodVerifier { MethodVerifier15 ( LookupEnvironment environment ) { } boolean areMethodsEqual ( MethodBinding one , MethodBinding substituteTwo ) { } 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 [ ] otherInheritedMethods ) { } void checkForInheritedNameClash ( MethodBinding inheritedMethod , MethodBinding otherInheritedMethod ) { } void checkForNameClash ( MethodBinding currentMethod , MethodBinding inheritedMethod ) { } void checkInheritedMethods ( MethodBinding [ ] methods , int length ) { } 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 == ( NoTypeVariables ) ) return inheritedMethod ; int inheritedLength = inheritedTypeVariables . length ; TypeVariableBinding [ ] typeVariables = currentMethod . typeVariables ; int length = typeVariables . length ; 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 ++ ) <START_BUG> arguments [ i ] = inheritedTypeVariables [ i ] . erasure ( ) ; <END_BUG> } ParameterizedGenericMethodBinding substitute = new ParameterizedGenericMethodBinding ( inheritedMethod , arguments , this . environment ) ; for ( int i = 0 ; i < inheritedLength ; i ++ ) if ( ( inheritedTypeVariables [ i ] . boundCheck ( substitute , arguments [ i ] ) ) != ( OK ) ) return inheritedMethod ; return substitute ; } boolean detectInheritedMethodClash ( MethodBinding inherited , MethodBinding otherInherited ) { } boolean detectNameClash ( MethodBinding current , MethodBinding inherited ) { } public boolean doesMethodOverride ( MethodBinding one , MethodBinding two ) { } boolean doParametersClash ( MethodBinding one , MethodBinding substituteTwo ) { } boolean doTypeVariablesClash ( MethodBinding one , MethodBinding substituteTwo ) { } boolean isInterfaceMethodImplemented ( MethodBinding inheritedMethod , MethodBinding existingMethod , ReferenceBinding superType ) { } void verify ( SourceTypeBinding someType ) { } }

Fix:
arguments [ i ] = inheritedTypeVariables [ i ] . upperBound ( ) ;