### Eclipse Workspace Patch 1.0
#P org.eclipse.jdt.core
Index: model/org/eclipse/jdt/internal/core/ClasspathEntry.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClasspathEntry.java,v
retrieving revision 1.106
diff -u -r1.106 ClasspathEntry.java
--- model/org/eclipse/jdt/internal/core/ClasspathEntry.java 13 Oct 2008 10:34:40 -0000 1.106
+++ model/org/eclipse/jdt/internal/core/ClasspathEntry.java 16 Oct 2008 09:17:18 -0000
@@ -1727,10 +1727,10 @@
* @param project the given java project
* @param entry the given classpath entry
* @param checkSourceAttachment a flag to determine if source attachment should be checked
- * @param recurseInContainers flag indicating whether validation should be applied to container entries recursively
+ * @param referredByContainer flag indicating whether the given entry is referred by a classpath container
* @return a java model status describing the problem related to this classpath entry if any, a status object with code IStatus.OK
if the entry is fine
*/
- public static IJavaModelStatus validateClasspathEntry(IJavaProject project, IClasspathEntry entry, boolean checkSourceAttachment, boolean recurseInContainers){
+ public static IJavaModelStatus validateClasspathEntry(IJavaProject project, IClasspathEntry entry, boolean checkSourceAttachment, boolean referredByContainer){
IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
IPath path = entry.getPath();
@@ -1782,11 +1782,9 @@
if (description == null) description = path.makeRelative().toString();
return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CP_CONTAINER_ENTRY, project, path);
}
- if (recurseInContainers) {
- IJavaModelStatus containerEntryStatus = validateClasspathEntry(project, containerEntry, checkSourceAttachment, recurseInContainers);
- if (!containerEntryStatus.isOK()){
- return containerEntryStatus;
- }
+ IJavaModelStatus containerEntryStatus = validateClasspathEntry(project, containerEntry, checkSourceAttachment, true/*referred by container*/);
+ if (!containerEntryStatus.isOK()){
+ return containerEntryStatus;
}
}
}
@@ -1813,7 +1811,7 @@
}
// get validation status
- IJavaModelStatus status = validateClasspathEntry(project, entry, checkSourceAttachment, recurseInContainers);
+ IJavaModelStatus status = validateClasspathEntry(project, entry, checkSourceAttachment, false/*not referred by container*/);
if (!status.isOK()) return status;
// return deprecation status if any
@@ -1836,8 +1834,11 @@
for (int i = 0, length = chainedJars.length; i < length; i++) {
IPath chainedJar = chainedJars[i];
IJavaModelStatus status = validateLibraryEntry(chainedJar, project, null/*don't check source attachment*/, null/*force computing of entryPathMsg*/);
- if (!status.isOK())
+ if (!status.isOK()) {
+ if (referredByContainer && status.getCode() == IJavaModelStatusConstants.INVALID_CLASSPATH)
+ continue; // ignore this entry (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=250946 )
return status;
+ }
}
IJavaModelStatus status = validateLibraryEntry(path, project, checkSourceAttachment ? entry.getSourceAttachmentPath() : null, entryPathMsg);
Index: model/org/eclipse/jdt/internal/core/ClasspathValidation.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClasspathValidation.java,v
retrieving revision 1.2
diff -u -r1.2 ClasspathValidation.java
--- model/org/eclipse/jdt/internal/core/ClasspathValidation.java 27 Jun 2008 16:03:51 -0000 1.2
+++ model/org/eclipse/jdt/internal/core/ClasspathValidation.java 16 Oct 2008 09:17:18 -0000
@@ -66,7 +66,7 @@
if (rawClasspath != JavaProject.INVALID_CLASSPATH && outputLocation != null) {
for (int i = 0; i < rawClasspath.length; i++) {
- status = ClasspathEntry.validateClasspathEntry(this.project, rawClasspath[i], false/*src attach*/, true /*recurse in container*/);
+ status = ClasspathEntry.validateClasspathEntry(this.project, rawClasspath[i], false/*src attach*/, false /*not referred by a container*/);
if (!status.isOK()) {
if (status.getCode() == IJavaModelStatusConstants.INVALID_CLASSPATH && ((ClasspathEntry) rawClasspath[i]).isOptional())
continue; // ignore this entry
Index: model/org/eclipse/jdt/core/JavaConventions.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaConventions.java,v
retrieving revision 1.120
diff -u -r1.120 JavaConventions.java
--- model/org/eclipse/jdt/core/JavaConventions.java 27 Jun 2008 16:04:01 -0000 1.120
+++ model/org/eclipse/jdt/core/JavaConventions.java 16 Oct 2008 09:17:17 -0000
@@ -605,12 +605,12 @@
*
* @param project the given java project
* @param entry the given classpath entry
- * @param checkSourceAttachment a flag to determine if source attachement should be checked
+ * @param checkSourceAttachment a flag to determine if source attachment should be checked
* @return a java model status describing the problem related to this classpath entry if any, a status object with code IStatus.OK
if the entry is fine
* @since 2.0
*/
public static IJavaModelStatus validateClasspathEntry(IJavaProject project, IClasspathEntry entry, boolean checkSourceAttachment){
- IJavaModelStatus status = ClasspathEntry.validateClasspathEntry(project, entry, checkSourceAttachment, true/*recurse in container*/);
+ IJavaModelStatus status = ClasspathEntry.validateClasspathEntry(project, entry, checkSourceAttachment, false/*not referred by container*/);
if (status.getCode() == IJavaModelStatusConstants.INVALID_CLASSPATH && ((ClasspathEntry) entry).isOptional())
return JavaModelStatus.VERIFIED_OK;
return status;
#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.189
diff -u -r1.189 ClasspathTests.java
--- src/org/eclipse/jdt/core/tests/model/ClasspathTests.java 13 Oct 2008 10:34:37 -0000 1.189
+++ src/org/eclipse/jdt/core/tests/model/ClasspathTests.java 16 Oct 2008 09:17:20 -0000
@@ -3340,6 +3340,32 @@
}
}
/*
+ * Ensures that no marker is created for incorrect extra libraries in the Class-Path: clause of an external jar referenced by a container
+ * (regression test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=250946 )
+ */
+public void testExtraLibraries14() throws Exception {
+ try {
+ Util.createJar(
+ new String[0],
+ new String[] {
+ "META-INF/MANIFEST.MF",
+ "Manifest-Version: 1.0\n" +
+ "Class-Path: nonExisting.jar\n",
+ },
+ getExternalResourcePath("lib1.jar"),
+ JavaCore.VERSION_1_4);
+ ContainerInitializer.setInitializer(new DefaultContainerInitializer(new String[] {"P", getExternalResourcePath("lib1.jar")}));
+ IJavaProject p = createJavaProject("P", new String[0], new String[] {"org.eclipse.jdt.core.tests.model.TEST_CONTAINER"}, "");
+ assertMarkers(
+ "Unexpected markers",
+ "",
+ p);
+ } finally {
+ deleteProject("P");
+ deleteExternalResource("lib1.jar");
+ }
+}
+/*
* Ensures that a marker is removed if adding an internal jar that is on the classpath in another project
* (regression test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=213723 )
*/
Index: src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java,v
retrieving revision 1.224
diff -u -r1.224 AbstractJavaModelTests.java
--- src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java 9 Oct 2008 11:55:20 -0000 1.224
+++ src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java 16 Oct 2008 09:17:19 -0000
@@ -1756,8 +1756,8 @@
return new File(getExternalPath(), relativePath);
}
- protected String getExternalResourcePath(String name) {
- return getExternalPath() + name;
+ protected String getExternalResourcePath(String relativePath) {
+ return getExternalPath() + relativePath;
}
/**