### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core.tests.model Index: src/org/eclipse/jdt/core/tests/model/ClasspathTests.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ClasspathTests.java,v retrieving revision 1.221 diff -u -r1.221 ClasspathTests.java --- src/org/eclipse/jdt/core/tests/model/ClasspathTests.java 19 Nov 2010 11:25:39 -0000 1.221 +++ src/org/eclipse/jdt/core/tests/model/ClasspathTests.java 2 Dec 2010 10:42:09 -0000 @@ -6861,5 +6861,74 @@ deleteProject("P"); } } +/** + * @bug 324367: IJavaProject.findPackageFragmentRoots(IClasspathEntry cpe) returns empty list + * + * Test that exported classpath entries from the referenced project are included when invoked + * the API org.eclipse.jdt.core.IJavaProject.findPackageFragmentRoots(IClasspathEntry) + * + * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=324367" + * @throws Exception + */ +public void testBug324367() throws Exception { + try { + IJavaProject referencingProject = this.createJavaProject("ReferencingProject", new String[] {}, "bin"); + IJavaProject referencedProject = this.createJavaProject("ReferencedProject", new String[] {"src"}, "bin"); + + addLibrary(referencedProject, "lib.jar", null, new String[0], + new String[] { + "META-INF/MANIFEST.MF", + "Manifest-Version: 1.0\n", + }, + JavaCore.VERSION_1_4); + IClasspathEntry[] classpath = new IClasspathEntry[2]; + classpath[0] = JavaCore.newSourceEntry(new Path("/ReferencedProject/src"), new Path[0]); + classpath[1] = JavaCore.newLibraryEntry(new Path("/ReferencedProject/lib.jar"), null, null,true); + setClasspath(referencedProject, classpath); + classpath = new IClasspathEntry[1]; + classpath[0] = JavaCore.newProjectEntry(new Path("/ReferencedProject"), false); + setClasspath(referencingProject, classpath); + + IClasspathEntry referencedProjectCPE = null; + IClasspathEntry[] rawClasspath = referencingProject.getRawClasspath(); + for(int index = 0; index < rawClasspath.length; index++) { + IClasspathEntry cpe = rawClasspath[index]; + if (cpe.getPath().equals(referencedProject.getPath())) { + referencedProjectCPE = cpe; + break; + } + } + IResource resource = getWorkspaceRoot().getProject("ReferencedProject").getFile("lib.jar"); + assertTrue(referencingProject.isOnClasspath(resource)); + assertPackageFragmentRootsEqual(referencingProject.getAllPackageFragmentRoots(), + "/ReferencedProject/src\n" + + "/ReferencedProject/lib.jar"); + assertPackageFragmentRootsEqual(referencingProject.findPackageFragmentRoots(referencedProjectCPE), ""); + assertPackageFragmentRootsEqual(referencingProject.getPackageFragmentRoots(), ""); + assertPackageFragmentRootsEqual(referencingProject.getPackageFragmentRoots(referencedProjectCPE), ""); + } finally { + deleteProject("ReferencingProject"); + deleteProject("ReferencedProject"); + } +} + void assertPackageFragmentRootsEqual(IPackageFragmentRoot[] roots, String expected) { + String actual; + if (roots == null) { + actual = ""; + } else { + StringBuffer buffer = new StringBuffer(); + int length = roots.length; + for (int i=0; i