### 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