### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: search/org/eclipse/jdt/internal/core/search/JavaSearchScope.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/JavaSearchScope.java,v retrieving revision 1.62 diff -u -r1.62 JavaSearchScope.java --- search/org/eclipse/jdt/internal/core/search/JavaSearchScope.java 15 Oct 2007 17:39:34 -0000 1.62 +++ search/org/eclipse/jdt/internal/core/search/JavaSearchScope.java 8 Jan 2008 22:32:02 -0000 @@ -121,7 +121,13 @@ if (referringEntry != null) { // Add only exported entries. // Source folder are implicitly exported. - if (!entry.isExported() && entry.getEntryKind() != IClasspathEntry.CPE_SOURCE) continue; + if (!entry.isExported() && entry.getEntryKind() != IClasspathEntry.CPE_SOURCE) { + // Need to remove the project from visited projects list to be sure + // not to skip library when the project will be added as a top level. + // see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=176831 + visitedProjects.remove(project); + continue; + } cpEntry = cpEntry.combineWith((ClasspathEntry)referringEntry); // cpEntry = ((ClasspathEntry)referringEntry).combineWith(cpEntry); } #P org.eclipse.jdt.core.tests.model Index: src/org/eclipse/jdt/core/tests/model/JavaSearchMultipleProjectsTests.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaSearchMultipleProjectsTests.java,v retrieving revision 1.47 diff -u -r1.47 JavaSearchMultipleProjectsTests.java --- src/org/eclipse/jdt/core/tests/model/JavaSearchMultipleProjectsTests.java 3 Dec 2007 12:02:07 -0000 1.47 +++ src/org/eclipse/jdt/core/tests/model/JavaSearchMultipleProjectsTests.java 8 Jan 2008 22:32:09 -0000 @@ -924,6 +924,68 @@ } /** + * @bug 176831: [search] No search results due to malformed search scope + * @test Verify that type are found in rt.jar even if it's added as a library on the classpath + * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=176831" + */ +public void testBug176831() throws CoreException { + try { + // Create projects and files + final IJavaProject p1 = createJavaProject("P1", new String[] {"src"}, null, new String[] {"/P2"}, "bin"); + final IJavaProject p2 = createJavaProject("P2", new String[] {"src"}, new String[] { getExternalJCLPathString() }, "bin"); + + // Create scope and search + IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { p1, p2 }, IJavaSearchScope.SOURCES | IJavaSearchScope.APPLICATION_LIBRARIES | IJavaSearchScope.REFERENCED_PROJECTS); + JavaSearchResultCollector resultCollector = new JavaSearchResultCollector(); + resultCollector.showProject = true; + resultCollector.showAccuracy = true; + new SearchEngine().search( + SearchPattern.createPattern("toString", IJavaSearchConstants.METHOD, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_EXACT_MATCH), + new SearchParticipant[] {SearchEngine.getDefaultSearchParticipant()}, + scope, + resultCollector, + null + ); + assertSearchResults( + "Unexpected references to /P1/p/A.java", + ""+ getExternalJCLPathString() + " [in P2] java.lang.String java.lang.Object.toString() EXACT_MATCH", + resultCollector); + } finally { + deleteProject("P1"); + deleteProject("P2"); + } +} +public void testBug176831b() throws CoreException { + try { + // Create projects and files + final IJavaProject p1 = createJavaProject("P1", new String[] {"src"}, null, new String[] {"/P2"}, "bin"); + final IJavaProject p2 = createJavaProject("P2", new String[] {"src"}, null, new String[] {"/P3"}, "bin"); + final IJavaProject p3 = createJavaProject("P3", new String[] {"src"}, new String[] { getExternalJCLPathString() }, "bin"); + + // Create scope and search + IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { p1, p2, p3 }, IJavaSearchScope.SOURCES | IJavaSearchScope.APPLICATION_LIBRARIES | IJavaSearchScope.REFERENCED_PROJECTS); + JavaSearchResultCollector resultCollector = new JavaSearchResultCollector(); + resultCollector.showProject = true; + resultCollector.showAccuracy = true; + new SearchEngine().search( + SearchPattern.createPattern("toString", IJavaSearchConstants.METHOD, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_EXACT_MATCH), + new SearchParticipant[] {SearchEngine.getDefaultSearchParticipant()}, + scope, + resultCollector, + null + ); + assertSearchResults( + "Unexpected references to /P1/p/A.java", + ""+ getExternalJCLPathString() + " [in P3] java.lang.String java.lang.Object.toString() EXACT_MATCH", + resultCollector); + } finally { + deleteProject("P1"); + deleteProject("P2"); + deleteProject("P3"); + } +} + +/** * @bug 195228: [search] Invalid path in open type dialog * @test Verify that correct types are found even with project and source folders in the classpath * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=195228"