View | Details | Raw Unified | Return to bug 288174
Collapse All | Expand All

(-)search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java (-1 / +14 lines)
Lines 463-469 Link Here
463
				}
463
				}
464
464
465
				// return binary method
465
				// return binary method
466
				return createBinaryMethodHandle(type, method.selector, argumentTypeNames);
466
				IMethod binaryMethod = createBinaryMethodHandle(type, method.selector, argumentTypeNames);
467
				if (binaryMethod == null) {
468
					// when first attempt fails, try with similar matches if any...
469
					PossibleMatch similarMatch = this.currentPossibleMatch.getSimilarMatch();
470
					while (similarMatch != null) {
471
						type = ((ClassFile)similarMatch.openable).getType();
472
						binaryMethod = createBinaryMethodHandle(type, method.selector, argumentTypeNames);
473
						if (binaryMethod != null) {
474
							return binaryMethod;
475
						}
476
						similarMatch = similarMatch.getSimilarMatch();
477
					}
478
				}
479
				return binaryMethod;
467
			}
480
			}
468
		}
481
		}
469
		return null;
482
		return null;
(-)src/org/eclipse/jdt/core/tests/model/JavaSearchBugsTests.java (+35 lines)
Lines 11029-11032 Link Here
11029
		deleteProject("P");
11029
		deleteProject("P");
11030
	}
11030
	}
11031
}
11031
}
11032
11033
/**
11034
 * @bug 288174: NullPointerException when searching for type references
11035
 * @test Ensure that no NPE occurs when searching for type references
11036
 * 		when a binary type has matches in several member or anonymous types
11037
 * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=288174"
11038
 */
11039
public void testBug288174() throws Exception {
11040
	final String libPath = "/JavaSearchBugs/lib/b288174.jar";
11041
	addLibraryEntry(JAVA_PROJECT, libPath, false);
11042
	try {
11043
		IPackageFragmentRoot root = getPackageFragmentRoot(libPath);
11044
		IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { root });
11045
		search("*", TYPE, REFERENCES, scope);
11046
		assertSearchResults(
11047
			"lib/b288174.jar pack.<anonymous> EXACT_MATCH\n" + 
11048
			"lib/b288174.jar E[] pack.<anonymous>.bar1(java.lang.Class<E>) EXACT_MATCH\n" + 
11049
			"lib/b288174.jar E[] pack.<anonymous>.bar1(java.lang.Class<E>) EXACT_MATCH\n" + 
11050
			"lib/b288174.jar E[] pack.<anonymous>.bar1(java.lang.Class<E>) EXACT_MATCH\n" + 
11051
			"lib/b288174.jar E[] pack.<anonymous>.bar1(java.lang.Class<E>) EXACT_MATCH\n" + 
11052
			"lib/b288174.jar E[] pack.<anonymous>.bar1(java.lang.Class<E>) EXACT_MATCH\n" + 
11053
			"lib/b288174.jar void pack.Test.foo1() EXACT_MATCH\n" + 
11054
			"lib/b288174.jar pack.<anonymous> EXACT_MATCH\n" + 
11055
			"lib/b288174.jar F[] pack.<anonymous>.bar2(java.lang.Class<F>) EXACT_MATCH\n" + 
11056
			"lib/b288174.jar F[] pack.<anonymous>.bar2(java.lang.Class<F>) EXACT_MATCH\n" + 
11057
			"lib/b288174.jar F[] pack.<anonymous>.bar2(java.lang.Class<F>) EXACT_MATCH\n" + 
11058
			"lib/b288174.jar F[] pack.<anonymous>.bar2(java.lang.Class<F>) EXACT_MATCH\n" + 
11059
			"lib/b288174.jar F[] pack.<anonymous>.bar2(java.lang.Class<F>) EXACT_MATCH\n" + 
11060
			"lib/b288174.jar void pack.Test.foo2() EXACT_MATCH"
11061
		);
11062
	}
11063
	finally {
11064
		removeClasspathEntry(JAVA_PROJECT, new Path(libPath));
11065
	}
11066
}
11032
}
11067
}

Return to bug 288174