Buggy code:
public class MethodLocator extends PatternLocator { protected MethodPattern pattern ; protected boolean isDeclarationOfReferencedMethodsPattern ; public char [ ] [ ] [ ] allSuperDeclaringTypeNames ; private HashMap methodDeclarationsWithInvalidParam = new HashMap ( ) ; public MethodLocator ( MethodPattern pattern ) { } protected void clear ( ) { } public void initializePolymorphicSearch ( MatchLocator locator ) { } private boolean isTypeInSuperDeclaringTypeNames ( char [ ] [ ] typeName ) { } protected boolean isVirtualInvoke ( MethodBinding method , MessageSend messageSend ) { } public int match ( ASTNode node , MatchingNodeSet nodeSet ) { } public int match ( MethodDeclaration node , MatchingNodeSet nodeSet ) { } public int match ( MemberValuePair node , MatchingNodeSet nodeSet ) { } public int match ( MessageSend node , MatchingNodeSet nodeSet ) { } public int match ( Annotation node , MatchingNodeSet nodeSet ) { } protected int matchContainer ( ) { } protected void matchLevelAndReportImportRef ( ImportReference importRef , Binding binding , MatchLocator locator ) throws CoreException { } protected int matchMethod ( MethodBinding method , boolean skipImpossibleArg ) { } private boolean matchOverriddenMethod ( ReferenceBinding type , MethodBinding method , MethodBinding matchMethod ) { <START_BUG> if ( type == null ) <END_BUG> return false ; if ( ( ! ( type . isInterface ( ) ) ) && ( ! ( CharOperation . equals ( type . compoundName , TypeConstants . JAVA_LANG_OBJECT ) ) ) ) { ReferenceBinding superClass = type . superclass ( ) ; if ( superClass . isParameterizedType ( ) ) { MethodBinding [ ] methods = superClass . getMethods ( this . pattern . selector ) ; int length = methods . length ; for ( int i = 0 ; i < length ; i ++ ) { if ( methods [ i ] . areParametersEqual ( method ) ) { if ( matchMethod == null ) { if ( methodParametersEqualsPattern ( methods [ i ] . original ( ) ) ) return true ; } else { if ( methods [ i ] . original ( ) . areParametersEqual ( matchMethod ) ) return true ; } } } } if ( matchOverriddenMethod ( superClass , method , matchMethod ) ) { return true ; } } ReferenceBinding [ ] interfaces = type . superInterfaces ( ) ; if ( interfaces == null ) return false ; int iLength = interfaces . length ; for ( int i = 0 ; i < iLength ; i ++ ) { if ( interfaces [ i ] . isParameterizedType ( ) ) { MethodBinding [ ] methods = interfaces [ i ] . getMethods ( this . pattern . selector ) ; int length = methods . length ; for ( int j = 0 ; j < length ; j ++ ) { if ( methods [ j ] . areParametersEqual ( method ) ) { if ( matchMethod == null ) { if ( methodParametersEqualsPattern ( methods [ j ] . original ( ) ) ) return true ; } else { if ( methods [ j ] . original ( ) . areParametersEqual ( matchMethod ) ) return true ; } } } } if ( matchOverriddenMethod ( interfaces [ i ] , method , matchMethod ) ) { return true ; } } return false ; } protected void matchReportReference ( ASTNode reference , IJavaElement element , Binding elementBinding , int accuracy , MatchLocator locator ) throws CoreException { } void matchReportReference ( MessageSend messageSend , MatchLocator locator , MethodBinding methodBinding ) throws CoreException { } private boolean methodParametersEqualsPattern ( MethodBinding method ) { } public SearchMatch newDeclarationMatch ( ASTNode reference , IJavaElement element , Binding elementBinding , int accuracy , int length , MatchLocator locator ) { } protected int referenceType ( ) { } protected void reportDeclaration ( MethodBinding methodBinding , MatchLocator locator , SimpleSet knownMethods ) throws CoreException { } public int resolveLevel ( ASTNode possibleMatchingNode ) { } public int resolveLevel ( Binding binding ) { } protected int resolveLevel ( MessageSend messageSend ) { } protected int resolveLevelAsSubtype ( char [ ] qualifiedPattern , ReferenceBinding type ) { } public String toString ( ) { } }

Fix:
if ( ( type == null ) || ( ( this . pattern . selector ) == null ) )