### 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.68 diff -u -r1.68 JavaSearchScope.java --- search/org/eclipse/jdt/internal/core/search/JavaSearchScope.java 23 Apr 2008 11:12:35 -0000 1.68 +++ search/org/eclipse/jdt/internal/core/search/JavaSearchScope.java 25 Apr 2008 11:58:45 -0000 @@ -599,7 +599,10 @@ if (projectPath != null) { IJavaProject project =JavaCore.create(ResourcesPlugin.getWorkspace().getRoot().getProject(projectPath)); if (isJarFile) { - return project.getPackageFragmentRoot(this.containerPaths[index]); + IResource resource = JavaModel.getWorkspaceTarget(new Path(jarPath)); + if (resource != null) + return project.getPackageFragmentRoot(resource); + return project.getPackageFragmentRoot(jarPath); } Object target = JavaModel.getWorkspaceTarget(new Path(this.containerPaths[index]+'/'+this.relativePaths[index])); if (target instanceof IProject) { Index: search/org/eclipse/jdt/internal/core/search/JavaWorkspaceScope.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/JavaWorkspaceScope.java,v retrieving revision 1.31 diff -u -r1.31 JavaWorkspaceScope.java --- search/org/eclipse/jdt/internal/core/search/JavaWorkspaceScope.java 23 Apr 2008 11:12:35 -0000 1.31 +++ search/org/eclipse/jdt/internal/core/search/JavaWorkspaceScope.java 25 Apr 2008 11:58:45 -0000 @@ -127,21 +127,17 @@ if (jarPath != null) { IPath path = new Path(jarPath); rootInfo = (DeltaProcessor.RootInfo) rootInfos.get(path); - if (rootInfo == null) - return null; - return rootInfo.project.getPackageFragmentRoot0(path); } else { - // resource in workspace IPath path = new Path(resourcePathString); rootInfo = (DeltaProcessor.RootInfo) rootInfos.get(path); while (rootInfo == null && path.segmentCount() > 0) { path = path.removeLastSegments(1); rootInfo = (DeltaProcessor.RootInfo) rootInfos.get(path); } - if (rootInfo == null) - return null; - return rootInfo.getPackageFragmentRoot(null/*no resource hint*/); } + if (rootInfo == null) + return null; + return rootInfo.getPackageFragmentRoot(null/*no resource hint*/); } public void processDelta(IJavaElementDelta delta, int eventType) { Index: model/org/eclipse/jdt/internal/core/JavaProject.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaProject.java,v retrieving revision 1.401 diff -u -r1.401 JavaProject.java --- model/org/eclipse/jdt/internal/core/JavaProject.java 25 Apr 2008 10:09:57 -0000 1.401 +++ model/org/eclipse/jdt/internal/core/JavaProject.java 25 Apr 2008 11:58:44 -0000 @@ -1669,18 +1669,18 @@ /** * @see IJavaProject */ - public IPackageFragmentRoot getPackageFragmentRoot(String libraryPath) { - return getPackageFragmentRoot0(JavaProject.canonicalizedPath(new Path(libraryPath))); + public IPackageFragmentRoot getPackageFragmentRoot(String externalLibraryPath) { + return getPackageFragmentRoot0(JavaProject.canonicalizedPath(new Path(externalLibraryPath))); } /* * no path canonicalization */ - public IPackageFragmentRoot getPackageFragmentRoot0(IPath libraryPath) { - IFolder linkedFolder = JavaModelManager.getExternalManager().getFolder(libraryPath); + public IPackageFragmentRoot getPackageFragmentRoot0(IPath externalLibraryPath) { + IFolder linkedFolder = JavaModelManager.getExternalManager().getFolder(externalLibraryPath); if (linkedFolder != null) - return new ExternalPackageFragmentRoot(linkedFolder, libraryPath, this); - return new JarPackageFragmentRoot(libraryPath, this); + return new ExternalPackageFragmentRoot(linkedFolder, externalLibraryPath, this); + return new JarPackageFragmentRoot(externalLibraryPath, this); } /** Index: model/org/eclipse/jdt/internal/core/JarPackageFragmentRoot.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JarPackageFragmentRoot.java,v retrieving revision 1.70 diff -u -r1.70 JarPackageFragmentRoot.java --- model/org/eclipse/jdt/internal/core/JarPackageFragmentRoot.java 18 Apr 2008 15:41:46 -0000 1.70 +++ model/org/eclipse/jdt/internal/core/JarPackageFragmentRoot.java 25 Apr 2008 11:58:44 -0000 @@ -49,9 +49,9 @@ * based on a JAR file that is not contained in a IJavaProject and * does not have an associated IResource. */ - protected JarPackageFragmentRoot(IPath jarPath, JavaProject project) { + protected JarPackageFragmentRoot(IPath externalJarPath, JavaProject project) { super(null, project); - this.jarPath = jarPath; + this.jarPath = externalJarPath; } /** * Constructs a package fragment root which is the root of the Java package directory hierarchy #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.148 diff -u -r1.148 JavaSearchBugsTests.java --- src/org/eclipse/jdt/core/tests/model/JavaSearchBugsTests.java 23 Mar 2008 16:17:34 -0000 1.148 +++ src/org/eclipse/jdt/core/tests/model/JavaSearchBugsTests.java 25 Apr 2008 11:58:48 -0000 @@ -10001,4 +10001,71 @@ "src/Z.java Z [public class Z & §|I|§> {] ERASURE_MATCH" ); } + +/** + * @bug 228852: classes opened via Open Type not found + * @test Ensure that types found in an internal jar exist when using a workspace scope + * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=228852" + */ +public void testBug228852a() throws Exception { + try { + IJavaProject p = createJavaProject("P", new String[] {}, new String[] {"/P/lib228852.jar"}, ""); + createJar(new String[] { + "p228852/X228852.java", + "package p228852;\n" + + "public class X228852 {\n" + + "}" + }, p.getProject().getLocation().append("lib228852.jar").toOSString()); + refresh(p); + + char[][] packagesList = new char[][] { + "p228852".toCharArray() + }; + TypeNameMatchCollector collector = new TypeNameMatchCollector(); + new SearchEngine().searchAllTypeNames( + packagesList, + null, + SearchEngine.createWorkspaceScope(), + collector, + IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, + null); + assertTrue("p228852.X228852 should exist", ((IJavaElement) collector.matches.get(0)).exists()); + } finally { + deleteProject("P"); + } +} + +/** + * @bug 228852: classes opened via Open Type not found + * @test Ensure that types found in an internal jar exist when using a Java search scope + * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=228852" + */ +public void testBug228852b() throws Exception { + try { + IJavaProject p = createJavaProject("P", new String[] {}, new String[] {"/P/lib228852.jar"}, ""); + createJar(new String[] { + "p228852/X228852.java", + "package p228852;\n" + + "public class X228852 {\n" + + "}" + }, p.getProject().getLocation().append("lib228852.jar").toOSString()); + refresh(p); + + char[][] packagesList = new char[][] { + "p228852".toCharArray() + }; + TypeNameMatchCollector collector = new TypeNameMatchCollector(); + new SearchEngine().searchAllTypeNames( + packagesList, + null, + SearchEngine.createJavaSearchScope(new IJavaElement[] {p}), + collector, + IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, + null); + assertTrue("p228852.X228852 should exist", ((IJavaElement) collector.matches.get(0)).exists()); + } finally { + deleteProject("P"); + } +} + } \ No newline at end of file