### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java,v retrieving revision 1.328 diff -u -r1.328 MatchLocator.java --- search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java 6 Oct 2009 17:07:18 -0000 1.328 +++ search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java 1 Dec 2009 09:07:16 -0000 @@ -463,7 +463,20 @@ } // return binary method - return createBinaryMethodHandle(type, method.selector, argumentTypeNames); + IMethod binaryMethod = createBinaryMethodHandle(type, method.selector, argumentTypeNames); + if (binaryMethod == null) { + // when first attempt fails, try with similar matches if any... + PossibleMatch similarMatch = this.currentPossibleMatch.getSimilarMatch(); + while (similarMatch != null) { + type = ((ClassFile)similarMatch.openable).getType(); + binaryMethod = createBinaryMethodHandle(type, method.selector, argumentTypeNames); + if (binaryMethod != null) { + return binaryMethod; + } + similarMatch = similarMatch.getSimilarMatch(); + } + } + return binaryMethod; } } return null; #P org.eclipse.jdt.core.tests.model Index: src/org/eclipse/jdt/core/tests/model/JavaSearchBugsTests.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaSearchBugsTests.java,v retrieving revision 1.182 diff -u -r1.182 JavaSearchBugsTests.java --- src/org/eclipse/jdt/core/tests/model/JavaSearchBugsTests.java 25 Nov 2009 12:26:50 -0000 1.182 +++ src/org/eclipse/jdt/core/tests/model/JavaSearchBugsTests.java 1 Dec 2009 09:07:24 -0000 @@ -11029,4 +11029,39 @@ deleteProject("P"); } } + +/** + * @bug 288174: NullPointerException when searching for type references + * @test Ensure that no NPE occurs when searching for type references + * when a binary type has matches in several member or anonymous types + * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=288174" + */ +public void testBug288174() throws Exception { + final String libPath = "/JavaSearchBugs/lib/b288174.jar"; + addLibraryEntry(JAVA_PROJECT, libPath, false); + try { + IPackageFragmentRoot root = getPackageFragmentRoot(libPath); + IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { root }); + search("*", TYPE, REFERENCES, scope); + assertSearchResults( + "lib/b288174.jar pack. EXACT_MATCH\n" + + "lib/b288174.jar E[] pack..bar1(java.lang.Class) EXACT_MATCH\n" + + "lib/b288174.jar E[] pack..bar1(java.lang.Class) EXACT_MATCH\n" + + "lib/b288174.jar E[] pack..bar1(java.lang.Class) EXACT_MATCH\n" + + "lib/b288174.jar E[] pack..bar1(java.lang.Class) EXACT_MATCH\n" + + "lib/b288174.jar E[] pack..bar1(java.lang.Class) EXACT_MATCH\n" + + "lib/b288174.jar void pack.Test.foo1() EXACT_MATCH\n" + + "lib/b288174.jar pack. EXACT_MATCH\n" + + "lib/b288174.jar F[] pack..bar2(java.lang.Class) EXACT_MATCH\n" + + "lib/b288174.jar F[] pack..bar2(java.lang.Class) EXACT_MATCH\n" + + "lib/b288174.jar F[] pack..bar2(java.lang.Class) EXACT_MATCH\n" + + "lib/b288174.jar F[] pack..bar2(java.lang.Class) EXACT_MATCH\n" + + "lib/b288174.jar F[] pack..bar2(java.lang.Class) EXACT_MATCH\n" + + "lib/b288174.jar void pack.Test.foo2() EXACT_MATCH" + ); + } + finally { + removeClasspathEntry(JAVA_PROJECT, new Path(libPath)); + } +} } \ No newline at end of file