Buggy code:
public class MatchLocator implements ITypeRequestor { public static final int MAX_AT_ONCE = 500 ; public SearchPattern pattern ; public PatternLocator patternLocator ; public int matchContainer ; public SearchRequestor requestor ; public IJavaSearchScope scope ; public IProgressMonitor progressMonitor ; public ICompilationUnit [ ] workingCopies ; public HandleFactory handleFactory ; public char [ ] [ ] [ ] allSuperTypeNames ; public MatchLocatorParser parser ; private Parser basicParser ; public INameEnvironment nameEnvironment ; public NameLookup nameLookup ; public LookupEnvironment lookupEnvironment ; public HierarchyResolver hierarchyResolver ; public CompilerOptions options ; public int numberOfMatches ; public PossibleMatch [ ] matchesToProcess ; public PossibleMatch currentPossibleMatch ; public long resultCollectorTime = 0 ; public class LocalDeclarationVisitor extends ASTVisitor { IJavaElement enclosingElement ; MatchingNodeSet nodeSet ; HashMap occurrencesCounts = new HashMap ( ) ; public LocalDeclarationVisitor ( IJavaElement enclosingElement , MatchingNodeSet nodeSet ) { } public boolean visit ( TypeDeclaration typeDeclaration , BlockScope unused ) { } } public class WrappedCoreException extends RuntimeException { public CoreException coreException ; public WrappedCoreException ( CoreException coreException ) { } } public static ClassFileReader classFileReader ( IType type ) { } public MatchLocator ( SearchPattern pattern , SearchRequestor requestor , IJavaSearchScope scope , ICompilationUnit [ ] workingCopies , IProgressMonitor progressMonitor ) { } public void accept ( IBinaryType binaryType , PackageBinding packageBinding ) { } public void accept ( org . eclipse . jdt . internal . compiler . env . ICompilationUnit sourceUnit ) { } public void accept ( ISourceType [ ] sourceTypes , PackageBinding packageBinding ) { } protected Parser basicParser ( ) { } protected void buildBindings ( PossibleMatch possibleMatch ) { } protected BinaryTypeBinding cacheBinaryType ( IType type ) throws JavaModelException { } protected char [ ] [ ] [ ] computeSuperTypeNames ( IType focusType ) { } protected IJavaElement createHandle ( AbstractMethodDeclaration method , IJavaElement parent ) { if ( ! ( parent instanceof IType ) ) return parent ; IType type = ( ( IType ) ( parent ) ) ; Argument [ ] arguments = method . arguments ; int argCount = ( arguments == null ) ? 0 : arguments . length ; if ( type . isBinary ( ) ) { ClassFileReader reader = MatchLocator . classFileReader ( type ) ; if ( reader != null ) { IBinaryMethod [ ] methods = reader . getMethods ( ) ; if ( methods != null ) { boolean firstIsSynthetic = false ; try { <START_BUG> if ( ( ( type . isMember ( ) ) && ( method . isConstructor ( ) ) ) && ( ! ( method . isStatic ( ) ) ) ) { <END_BUG> firstIsSynthetic = true ; argCount ++ ; } } catch ( JavaModelException e ) { } nextMethod : for ( int i = 0 , methodsLength = methods . length ; i < methodsLength ; i ++ ) { IBinaryMethod binaryMethod = methods [ i ] ; char [ ] selector = ( binaryMethod . isConstructor ( ) ) ? type . getElementName ( ) . toCharArray ( ) : binaryMethod . getSelector ( ) ; if ( CharOperation . equals ( selector , method . selector ) ) { char [ ] [ ] parameterTypes = Signature . getParameterTypes ( binaryMethod . getMethodDescriptor ( ) ) ; if ( argCount != ( parameterTypes . length ) ) continue nextMethod ; for ( int j = 0 ; j < argCount ; j ++ ) { char [ ] typeName ; if ( ( j == 0 ) && firstIsSynthetic ) { typeName = type . getDeclaringType ( ) . getFullyQualifiedName ( ) . toCharArray ( ) ; } else { TypeReference typeRef = arguments [ ( firstIsSynthetic ? j - 1 : j ) ] . type ; typeName = CharOperation . concatWith ( typeRef . getTypeName ( ) , '.' ) ; for ( int k = 0 , dim = typeRef . dimensions ( ) ; k < dim ; k ++ ) typeName = CharOperation . concat ( typeName , new char [ ] { '[' , ']' } ) ; } char [ ] parameterTypeName = ClassFileMatchLocator . convertClassFileFormat ( parameterTypes [ j ] ) ; if ( ! ( CharOperation . endsWith ( Signature . toCharArray ( parameterTypeName ) , typeName ) ) ) continue nextMethod ; parameterTypes [ j ] = parameterTypeName ; } return type . getMethod ( new String ( selector ) , CharOperation . toStrings ( parameterTypes ) ) ; } } } } return null ; } String [ ] parameterTypeSignatures = new String [ argCount ] ; for ( int i = 0 ; i < argCount ; i ++ ) { TypeReference typeRef = arguments [ i ] . type ; char [ ] typeName = CharOperation . concatWith ( typeRef . getTypeName ( ) , '.' ) ; for ( int j = 0 , dim = typeRef . dimensions ( ) ; j < dim ; j ++ ) typeName = CharOperation . concat ( typeName , new char [ ] { '[' , ']' } ) ; parameterTypeSignatures [ i ] = Signature . createTypeSignature ( typeName , false ) ; } return type . getMethod ( new String ( method . selector ) , parameterTypeSignatures ) ; } protected IJavaElement createHandle ( FieldDeclaration fieldDeclaration , TypeDeclaration typeDeclaration , IJavaElement parent ) { } protected boolean createHierarchyResolver ( IType focusType , PossibleMatch [ ] possibleMatches ) { } protected IJavaElement createImportHandle ( ImportReference importRef ) { } protected IType createTypeHandle ( String simpleTypeName ) { } protected IBinaryType getBinaryInfo ( ClassFile classFile , IResource resource ) throws CoreException { } protected IType getFocusType ( ) { } protected void getMethodBodies ( CompilationUnitDeclaration unit ) { } protected boolean hasAlreadyDefinedType ( CompilationUnitDeclaration parsedUnit ) { } public void initialize ( JavaProject project , int possibleMatchSize ) throws JavaModelException { }

Fix:
if ( ( ( type . isMember ( ) ) && ( method . isConstructor ( ) ) ) && ( ! ( Flags . isStatic ( type . getFlags ( ) ) ) ) ) {