### 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.311 diff -u -r1.311 DeltaProcessor.java --- model/org/eclipse/jdt/internal/core/DeltaProcessor.java 16 Jan 2008 16:59:47 -0000 1.311 +++ model/org/eclipse/jdt/internal/core/DeltaProcessor.java 29 Jan 2008 16:32:04 -0000 @@ -1850,10 +1850,14 @@ } // add late coming elements to refresh (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=212769 ) - if (elementsToRefresh == null) + if (elementsToRefresh == null) { elementsToRefresh = this.state.removeExternalElementsToRefresh(); - else - elementsToRefresh.addAll(this.state.removeExternalElementsToRefresh()); + } else { + HashSet existingElements = this.state.removeExternalElementsToRefresh(); + if (existingElements != null) { + elementsToRefresh.addAll(existingElements); + } + } // generate external archive change deltas if (elementsToRefresh != null) { #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.167 diff -u -r1.167 ClasspathTests.java --- src/org/eclipse/jdt/core/tests/model/ClasspathTests.java 28 Jan 2008 16:58:28 -0000 1.167 +++ src/org/eclipse/jdt/core/tests/model/ClasspathTests.java 29 Jan 2008 16:32:08 -0000 @@ -33,9 +33,13 @@ import org.eclipse.core.resources.IncrementalProjectBuilder; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.ILog; +import org.eclipse.core.runtime.ILogListener; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Platform; import org.eclipse.jdt.core.IAccessRule; import org.eclipse.jdt.core.IClasspathAttribute; import org.eclipse.jdt.core.IClasspathContainer; @@ -3450,6 +3454,36 @@ deleteProject("P"); } } +/* + * Ensures that no error is reported when deleting a project after setting its raw classpath with no resource change. + * (regression test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=216895 ) + */ +public void testNoResourceChange06() throws CoreException { + ILogListener listener = new ILogListener(){ + private StringBuffer buffer = new StringBuffer(); + public void logging(IStatus status, String plugin) { + buffer.append(status); + buffer.append('\n'); + } + public String toString() { + return this.buffer.toString(); + } + }; + try { + Platform.addLogListener(listener); + IJavaProject project = createJavaProject("P", new String[] {"src1"}, "bin"); + IClasspathEntry[] newClasspath = createClasspath("P", new String[] {"/P/src2", ""}); + project.setRawClasspath(newClasspath, false/*cannot modify resources*/, null/*no progress*/); + deleteProject("P"); + assertSourceEquals( + "Unexpected error logged", + "", + listener.toString()); + } finally { + Platform.removeLogListener(listener); + deleteProject("P"); + } +} /** * Ensures that a duplicate entry created by editing the .classpath is detected. * (regression test for bug 24498 Duplicate entries on classpath cause CP marker to no longer refresh)