### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: buildnotes_jdt-core.html =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/buildnotes_jdt-core.html,v retrieving revision 1.5373 diff -u -r1.5373 buildnotes_jdt-core.html --- buildnotes_jdt-core.html 15 Aug 2006 16:03:50 -0000 1.5373 +++ buildnotes_jdt-core.html 16 Aug 2006 15:16:08 -0000 @@ -75,7 +75,9 @@

Problem Reports Fixed

-148224 +151189 +[search] Declaration search does not find all matches +
148224 AST API request: have binding for int, need int[], int[][] .... Index: search/org/eclipse/jdt/internal/core/search/IndexSelector.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/IndexSelector.java,v retrieving revision 1.34 diff -u -r1.34 IndexSelector.java --- search/org/eclipse/jdt/internal/core/search/IndexSelector.java 13 Jun 2006 13:00:43 -0000 1.34 +++ search/org/eclipse/jdt/internal/core/search/IndexSelector.java 16 Aug 2006 15:16:08 -0000 @@ -123,7 +123,7 @@ IndexManager manager = JavaModelManager.getJavaModelManager().getIndexManager(); SimpleSet locations = new SimpleSet(); IJavaElement focus = MatchLocator.projectOrJarFocus(this.pattern); - if (focus == null) { + if (focus == null || this.searchScope instanceof JavaWorkspaceScope) { for (int i = 0; i < projectsAndJars.length; i++) locations.add(manager.computeIndexLocation(projectsAndJars[i])); } else { @@ -157,12 +157,18 @@ IClasspathEntry[] entries = projectsCanSeeFocus[i].getResolvedClasspath(); for (int j = entries.length; --j >= 0;) { IClasspathEntry entry = entries[j]; - if (entry.getEntryKind() == IClasspathEntry.CPE_LIBRARY) { - IPath path = entry.getPath(); - if (jarsToCheck.includes(path)) { + switch (entry.getEntryKind()) { + case IClasspathEntry.CPE_LIBRARY: + IPath path = entry.getPath(); + if (jarsToCheck.includes(path)) { + locations.add(manager.computeIndexLocation(entry.getPath())); + jarsToCheck.remove(path); + } + break; + case IClasspathEntry.CPE_PROJECT: + // add required projects to index locations locations.add(manager.computeIndexLocation(entry.getPath())); - jarsToCheck.remove(path); - } + break; } } } #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.36 diff -u -r1.36 JavaSearchMultipleProjectsTests.java --- src/org/eclipse/jdt/core/tests/model/JavaSearchMultipleProjectsTests.java 13 Jun 2006 13:01:06 -0000 1.36 +++ src/org/eclipse/jdt/core/tests/model/JavaSearchMultipleProjectsTests.java 16 Aug 2006 15:16:15 -0000 @@ -24,6 +24,7 @@ * Tests the Java search engine accross multiple projects. */ public class JavaSearchMultipleProjectsTests extends ModifyingResourceTests implements IJavaSearchConstants { + private final static int UI_DECLARATIONS = DECLARATIONS|IGNORE_DECLARING_TYPE|IGNORE_RETURN_TYPE; public JavaSearchMultipleProjectsTests(String name) { super(name); } @@ -664,4 +665,132 @@ deleteProject("P2"); } } + +/** + * Bug 151189: [search] Declaration search does not find all matches + * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=151189" + */ +public void testBug151189_Workspace() throws CoreException { + try { + // setup project P1 + /*IJavaProject p1 = */createJavaProject("P1"); + createFolder("/P1/pack"); + createFile( + "/P1/pack/Declaration.java", + "package pack;\n" + + "public class Declaration implements Interface {\n" + + " public void doOperation(int val) {}\n" + + "}\n" + ); + createFile( + "/P1/pack/Interface.java", + "package pack;\n" + + "public interface Interface {\n" + + " void doOperation(int val);\n" + + "}\n" + ); + + // setup project P2 + createJavaProject("P2", new String[] {""}, new String[] {"JCL_LIB"}, new String[] { "/P1" }, ""); + createFolder("/P2/test"); + createFile( + "/P2/test/Declaration_bis.java", + "package test;\n" + + "import pack.Interface;\n" + + "public class Declaration_bis implements Interface {\n" + + " public void doOperation(int val) {}\n" + + "}\n" + ); + + // Get method + IMethod method = getCompilationUnit("/P2/test/Declaration_bis.java").getType("Declaration_bis").getMethod("doOperation", new String[] {"I"}); + + // search method declaration in workspace scope + IJavaSearchScope scope = SearchEngine.createWorkspaceScope(); //JavaSearchScope(new IJavaElement[] {p1, p2}); + JavaSearchResultCollector resultCollector = new JavaSearchResultCollector(); + resultCollector.showProject = true; + search( + method, + DECLARATIONS, + scope, + resultCollector); + assertSearchResults( + "Unexpected declarations of method test.Declaration_bis.doOperation(int)", + "test/Declaration_bis.java [in P2] void test.Declaration_bis.doOperation(int) [doOperation]", + resultCollector); + + // search method declaration in workspace scope with JDT-UI flags + resultCollector = new JavaSearchResultCollector(); + resultCollector.showProject = true; + search( + method, + UI_DECLARATIONS, + scope, + resultCollector); + assertSearchResults( + "Unexpected declarations of method test.Declaration_bis.doOperation(int)", + "pack/Declaration.java [in P1] void pack.Declaration.doOperation(int) [doOperation]\n" + + "pack/Interface.java [in P1] void pack.Interface.doOperation(int) [doOperation]\n" + + "test/Declaration_bis.java [in P2] void test.Declaration_bis.doOperation(int) [doOperation]", + resultCollector); + } finally { + deleteProject("P1"); + deleteProject("P2"); + } +} +public void testBug151189_Project() throws CoreException { + try { + // setup project P1 + createJavaProject("P1"); + createFolder("/P1/pack"); + createFile( + "/P1/pack/Declaration.java", + "package pack;\n" + + "public class Declaration implements Interface {\n" + + " public void doOperation(int val) {}\n" + + "}\n" + ); + createFile( + "/P1/pack/Interface.java", + "package pack;\n" + + "public interface Interface {\n" + + " void doOperation(int val);\n" + + "}\n" + ); + + // setup project P2 + IJavaProject p2 = createJavaProject("P2", new String[] {""}, new String[] {"JCL_LIB"}, new String[] { "/P1" }, ""); + createFolder("/P2/test"); + createFile( + "/P2/test/Declaration_bis.java", + "package test;\n" + + "import pack.Interface;\n" + + "public class Declaration_bis implements Interface {\n" + + " public void doOperation(int val) {}\n" + + "}\n" + ); + + // Get method + IMethod method = getCompilationUnit("/P2/test/Declaration_bis.java").getType("Declaration_bis").getMethod("doOperation", new String[] {"I"}); + + // search method declaration in workspace scope + IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] {p2}); + JavaSearchResultCollector resultCollector = new JavaSearchResultCollector(); + resultCollector.showProject = true; + search( + method, + UI_DECLARATIONS, + scope, + resultCollector); + assertSearchResults( + "Unexpected declarations of method test.Declaration_bis.doOperation(int)", + "pack/Declaration.java [in P1] void pack.Declaration.doOperation(int) [doOperation]\n" + + "pack/Interface.java [in P1] void pack.Interface.doOperation(int) [doOperation]\n" + + "test/Declaration_bis.java [in P2] void test.Declaration_bis.doOperation(int) [doOperation]", + resultCollector); + } finally { + deleteProject("P1"); + deleteProject("P2"); + } +} }