Buggy code:
class MethodBinding implements IMethodBinding { private static final int VALID_MODIFIERS = ( ( ( ( ( ( ( ( Modifier . PUBLIC ) | ( Modifier . PROTECTED ) ) | ( Modifier . PRIVATE ) ) | ( Modifier . ABSTRACT ) ) | ( Modifier . STATIC ) ) | ( Modifier . FINAL ) ) | ( Modifier . SYNCHRONIZED ) ) | ( Modifier . NATIVE ) ) | ( Modifier . STRICTFP ) ; private static final ITypeBinding [ ] NO_TYPE_BINDINGS = new ITypeBinding [ 0 ] ; private org . eclipse . jdt . internal . compiler . lookup . MethodBinding binding ; private BindingResolver resolver ; private ITypeBinding [ ] parameterTypes ; private ITypeBinding [ ] exceptionTypes ; private String name ; private ITypeBinding declaringClass ; private ITypeBinding returnType ; private String key ; private ITypeBinding [ ] typeParameters ; private ITypeBinding [ ] typeArguments ; private IAnnotationBinding [ ] annotations ; private IAnnotationBinding [ ] parameterAnnotations ; MethodBinding ( BindingResolver resolver , org . eclipse . jdt . internal . compiler . lookup . MethodBinding binding ) { } public boolean isAnnotationMember ( ) { } public boolean isConstructor ( ) { } public boolean isDefaultConstructor ( ) { } public String getName ( ) { } public IAnnotationBinding [ ] getAnnotations ( ) { } public ITypeBinding getDeclaringClass ( ) { } public IAnnotationBinding [ ] getParameterAnnotations ( int index ) { } public ITypeBinding [ ] getParameterTypes ( ) { } public ITypeBinding getReturnType ( ) { } public Object getDefaultValue ( ) { } public ITypeBinding [ ] getExceptionTypes ( ) { } public IJavaElement getJavaElement ( ) { } private JavaElement getUnresolvedJavaElement ( ) { } public int getKind ( ) { } public int getModifiers ( ) { } public boolean isDeprecated ( ) { } public boolean isRecovered ( ) { } public boolean isSynthetic ( ) { } public boolean isVarargs ( ) { } public String getKey ( ) { } public boolean isEqualTo ( IBinding other ) { } public ITypeBinding [ ] getTypeParameters ( ) { } public boolean isGenericMethod ( ) { } public ITypeBinding [ ] getTypeArguments ( ) { } public boolean isParameterizedMethod ( ) { } public boolean isRawMethod ( ) { } public boolean isSubsignature ( IMethodBinding otherMethod ) { } public IMethodBinding getMethodDeclaration ( ) { } public boolean overrides ( IMethodBinding overridenMethod ) { try { org . eclipse . jdt . internal . compiler . lookup . MethodBinding overridenCompilerBinding = ( ( MethodBinding ) ( overridenMethod ) ) . binding ; if ( ( ( ( ( this . binding ) == overridenCompilerBinding ) || ( overridenCompilerBinding . isStatic ( ) ) ) || ( overridenCompilerBinding . isPrivate ( ) ) ) || ( this . binding . isStatic ( ) ) ) return false ; char [ ] selector = this . binding . selector ; if ( ! ( CharOperation . equals ( selector , overridenCompilerBinding . selector ) ) ) return false ; <START_BUG> TypeBinding match = this . binding . declaringClass . findSuperTypeWithSameErasure ( overridenCompilerBinding . declaringClass ) ; <END_BUG> if ( ! ( match instanceof ReferenceBinding ) ) return false ; org . eclipse . jdt . internal . compiler . lookup . MethodBinding [ ] superMethods = ( ( ReferenceBinding ) ( match ) ) . getMethods ( selector ) ; for ( int i = 0 , length = superMethods . length ; i < length ; i ++ ) { if ( ( superMethods [ i ] . original ( ) ) == overridenCompilerBinding ) { LookupEnvironment lookupEnvironment = this . resolver . lookupEnvironment ( ) ; if ( lookupEnvironment == null ) return false ; MethodVerifier methodVerifier = lookupEnvironment . methodVerifier ( ) ; org . eclipse . jdt . internal . compiler . lookup . MethodBinding superMethod = superMethods [ i ] ; return ( ! ( ( superMethod . isDefault ( ) ) && ( ( superMethod . declaringClass . getPackage ( ) ) != ( this . binding . declaringClass . getPackage ( ) ) ) ) ) && ( methodVerifier . doesMethodOverride ( this . binding , superMethod ) ) ; } } return false ; } catch ( AbortCompilation e ) { return false ; } } public String toString ( ) { } }

Fix:
TypeBinding match = this . binding . declaringClass . findSuperTypeOriginatingFrom ( overridenCompilerBinding . declaringClass ) ;