### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: model/org/eclipse/jdt/internal/core/DeltaProcessor.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/DeltaProcessor.java,v retrieving revision 1.300 diff -u -r1.300 DeltaProcessor.java --- model/org/eclipse/jdt/internal/core/DeltaProcessor.java 7 May 2007 08:49:22 -0000 1.300 +++ model/org/eclipse/jdt/internal/core/DeltaProcessor.java 7 May 2007 12:58:53 -0000 @@ -924,6 +924,7 @@ System.out.println("- External JAR ADDED, affecting root: "+root.getElementName()); //$NON-NLS-1$ } elementAdded(root, null, null); + this.state.addClasspathValidation(javaProject); // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=185733 hasDelta = true; } else if (status == EXTERNAL_JAR_CHANGED) { PackageFragmentRoot root = (PackageFragmentRoot) javaProject.getPackageFragmentRoot(entryPath.toString()); @@ -938,6 +939,7 @@ System.out.println("- External JAR REMOVED, affecting root: "+root.getElementName()); //$NON-NLS-1$ } elementRemoved(root, null, null); + this.state.addClasspathValidation(javaProject); // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=185733 hasDelta = true; } } #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.161 diff -u -r1.161 ClasspathTests.java --- src/org/eclipse/jdt/core/tests/model/ClasspathTests.java 13 Apr 2007 16:02:17 -0000 1.161 +++ src/org/eclipse/jdt/core/tests/model/ClasspathTests.java 7 May 2007 12:58:54 -0000 @@ -41,6 +41,7 @@ import org.eclipse.jdt.core.IClasspathContainer; import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.ICompilationUnit; +import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IJavaElementDelta; import org.eclipse.jdt.core.IJavaModelMarker; import org.eclipse.jdt.core.IJavaModelStatus; @@ -156,6 +157,29 @@ return result; } +/* + * Ensures that adding an external jar and refreshing removed the markers + * (regression test for 185733 Refreshing external jar doesn't update problem marker) + */ +public void testAddExternalJar() throws CoreException, IOException { + String externalJarPath = getExternalPath() + "test185733.jar"; + try { + IJavaProject p = createJavaProject("P", new String[0], new String[] {externalJarPath}, ""); + waitUntilIndexesReady(); + waitForAutoBuild(); + + createFile(new File(getExternalPath()), "test185733.jar", ""); + getJavaModel().refreshExternalArchives(new IJavaElement[] {p}, null); + assertMarkers( + "Unexpected markers", + "", + p); + } finally { + deleteFile(new File(externalJarPath)); + deleteProject("P"); + } +} + /** * Add an entry to the classpath for a non-existent root. Then create * the root and ensure that it comes alive. @@ -3904,4 +3928,26 @@ this.deleteProjects(new String[] {"P1", "P2"}); } } + +/* + * Ensures that removing an external jar and refreshing creates the correct markers + * (regression test for 185733 Refreshing external jar doesn't update problem marker) + */ +public void testRemoveExternalJar() throws CoreException, IOException { + try { + File externalJar = createFile(new File(getExternalPath()), "test185733.jar", ""); + IJavaProject p = createJavaProject("P", new String[0], new String[] {externalJar.getPath()}, ""); + waitUntilIndexesReady(); + waitForAutoBuild(); + + deleteFile(externalJar); + getJavaModel().refreshExternalArchives(new IJavaElement[] {p}, null); + assertMarkers( + "Unexpected markers", + "Project \'P\' is missing required library: \'" + externalJar.getPath() + "\'", + p); + } finally { + deleteProject("P"); + } +} }