### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: model/org/eclipse/jdt/internal/core/MovePackageFragmentRootOperation.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/MovePackageFragmentRootOperation.java,v retrieving revision 1.15 diff -u -r1.15 MovePackageFragmentRootOperation.java --- model/org/eclipse/jdt/internal/core/MovePackageFragmentRootOperation.java 29 Mar 2006 03:08:48 -0000 1.15 +++ model/org/eclipse/jdt/internal/core/MovePackageFragmentRootOperation.java 3 Apr 2007 08:40:26 -0000 @@ -224,7 +224,7 @@ throw new JavaModelException(e); } } - this.setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); + setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); } /* * Renames the classpath entries equal to the given path in all Java projects. Index: model/org/eclipse/jdt/internal/core/JavaModelOperation.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaModelOperation.java,v retrieving revision 1.65 diff -u -r1.65 JavaModelOperation.java --- model/org/eclipse/jdt/internal/core/JavaModelOperation.java 19 Jan 2007 17:13:27 -0000 1.65 +++ model/org/eclipse/jdt/internal/core/JavaModelOperation.java 3 Apr 2007 08:40:26 -0000 @@ -247,7 +247,7 @@ IWorkspace workspace = resources[0].getWorkspace(); try { workspace.copy(resources, destinationPath, false, subProgressMonitor); - this.setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); + setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); } catch (CoreException e) { throw new JavaModelException(e); } @@ -262,7 +262,7 @@ contents, forceFlag ? IResource.FORCE | IResource.KEEP_HISTORY : IResource.KEEP_HISTORY, getSubProgressMonitor(1)); - this.setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); + setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); } catch (CoreException e) { throw new JavaModelException(e); } @@ -278,7 +278,7 @@ forceFlag ? IResource.FORCE | IResource.KEEP_HISTORY : IResource.KEEP_HISTORY, true, // local getSubProgressMonitor(1)); - this.setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); + setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); } catch (CoreException e) { throw new JavaModelException(e); } @@ -298,7 +298,7 @@ resource.delete( forceFlag ? IResource.FORCE | IResource.KEEP_HISTORY : IResource.KEEP_HISTORY, getSubProgressMonitor(1)); - this.setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); + setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); while (resource instanceof IFolder) { // deleting a package: delete the parent if it is empty (eg. deleting x.y where folder x doesn't have resources but y) // without deleting the package fragment root @@ -307,7 +307,7 @@ resource.delete( forceFlag ? IResource.FORCE | IResource.KEEP_HISTORY : IResource.KEEP_HISTORY, getSubProgressMonitor(1)); - this.setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); + setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); } } } catch (CoreException e) { @@ -320,7 +320,7 @@ protected void deleteResource(IResource resource,int flags) throws JavaModelException { try { resource.delete(flags, getSubProgressMonitor(1)); - this.setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); + setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); } catch (CoreException e) { throw new JavaModelException(e); } @@ -337,7 +337,7 @@ resources, forceFlag ? IResource.FORCE | IResource.KEEP_HISTORY : IResource.KEEP_HISTORY, subProgressMonitor); - this.setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); + setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); } catch (CoreException e) { throw new JavaModelException(e); } @@ -397,7 +397,7 @@ * Returns the attribute registered at the given key with the top level operation. * Returns null if no such attribute is found. */ - protected Object getAttribute(Object key) { + protected static Object getAttribute(Object key) { ArrayList stack = getCurrentOperationStack(); if (stack.size() == 0) return null; JavaModelOperation topLevelOp = (JavaModelOperation)stack.get(0); @@ -524,7 +524,7 @@ * Returns false if this operation has not been executed yet. */ public boolean hasModifiedResource() { - return !this.isReadOnly() && this.getAttribute(HAS_MODIFIED_RESOURCE_ATTR) == TRUE; + return !this.isReadOnly() && getAttribute(HAS_MODIFIED_RESOURCE_ATTR) == TRUE; } public void internalWorked(double work) { if (progressMonitor != null) { @@ -580,7 +580,7 @@ IWorkspace workspace = resources[0].getWorkspace(); try { workspace.move(resources, destinationPath, false, subProgressMonitor); - this.setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); + setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); } catch (CoreException e) { throw new JavaModelException(e); } @@ -809,8 +809,11 @@ /* * Registers the given attribute at the given key with the top level operation. */ - protected void setAttribute(Object key, Object attribute) { - JavaModelOperation topLevelOp = (JavaModelOperation) getCurrentOperationStack().get(0); + protected static void setAttribute(Object key, Object attribute) { + ArrayList operationStack = getCurrentOperationStack(); + if (operationStack.size() == 0) + return; + JavaModelOperation topLevelOp = (JavaModelOperation) operationStack.get(0); if (topLevelOp.attributes == null) { topLevelOp.attributes = new HashMap(); } Index: model/org/eclipse/jdt/internal/core/DeletePackageFragmentRootOperation.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/DeletePackageFragmentRootOperation.java,v retrieving revision 1.15 diff -u -r1.15 DeletePackageFragmentRootOperation.java --- model/org/eclipse/jdt/internal/core/DeletePackageFragmentRootOperation.java 13 Jun 2006 13:00:43 -0000 1.15 +++ model/org/eclipse/jdt/internal/core/DeletePackageFragmentRootOperation.java 3 Apr 2007 08:40:26 -0000 @@ -95,7 +95,7 @@ throw new JavaModelException(e); } } - this.setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); + setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); } Index: model/org/eclipse/jdt/internal/core/DeleteElementsOperation.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/DeleteElementsOperation.java,v retrieving revision 1.42 diff -u -r1.42 DeleteElementsOperation.java --- model/org/eclipse/jdt/internal/core/DeleteElementsOperation.java 10 May 2006 18:03:47 -0000 1.42 +++ model/org/eclipse/jdt/internal/core/DeleteElementsOperation.java 3 Apr 2007 08:40:25 -0000 @@ -165,7 +165,7 @@ cu.save(getSubProgressMonitor(1), force); if (!cu.isWorkingCopy()) { // if unit is working copy, then save will have already fired the delta addDelta(delta); - this.setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); + setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); } } } 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.297 diff -u -r1.297 DeltaProcessor.java --- model/org/eclipse/jdt/internal/core/DeltaProcessor.java 8 Mar 2007 09:33:02 -0000 1.297 +++ model/org/eclipse/jdt/internal/core/DeltaProcessor.java 3 Apr 2007 08:40:26 -0000 @@ -1368,6 +1368,9 @@ // flush now so as to keep listener reactions to post their own deltas for subsequent iteration this.flush(); + // mark the operation stack has not modifying resources since resource deltas are being fired + JavaModelOperation.setAttribute(JavaModelOperation.HAS_MODIFIED_RESOURCE_ATTR, null); + notifyListeners(deltaToNotify, ElementChangedEvent.POST_CHANGE, listeners, listenerMask, listenerCount); } } Index: model/org/eclipse/jdt/internal/core/CopyPackageFragmentRootOperation.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CopyPackageFragmentRootOperation.java,v retrieving revision 1.26 diff -u -r1.26 CopyPackageFragmentRootOperation.java --- model/org/eclipse/jdt/internal/core/CopyPackageFragmentRootOperation.java 23 Oct 2006 17:03:56 -0000 1.26 +++ model/org/eclipse/jdt/internal/core/CopyPackageFragmentRootOperation.java 3 Apr 2007 08:40:25 -0000 @@ -124,7 +124,7 @@ throw new JavaModelException(e); } } - this.setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); + setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); } protected void addEntryToClasspath(IClasspathEntry rootEntry, IWorkspaceRoot workspaceRoot) throws JavaModelException { Index: model/org/eclipse/jdt/internal/core/CopyResourceElementsOperation.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CopyResourceElementsOperation.java,v retrieving revision 1.103 diff -u -r1.103 CopyResourceElementsOperation.java --- model/org/eclipse/jdt/internal/core/CopyResourceElementsOperation.java 23 Oct 2006 16:42:12 -0000 1.103 +++ model/org/eclipse/jdt/internal/core/CopyResourceElementsOperation.java 3 Apr 2007 08:40:25 -0000 @@ -268,7 +268,7 @@ if (rewrite != null) flags |= IResource.KEEP_HISTORY; sourceResource.copy(destFile.getFullPath(), flags, getSubProgressMonitor(1)); } - this.setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); + setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); } else { destCU.getBuffer().setContents(source.getBuffer().getContents()); } @@ -404,7 +404,7 @@ if (sourceIsReadOnly) { Util.setReadOnly(srcFolder, true); } - this.setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); + setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); } else { // process the leaf resources if (resources.length > 0) { Index: model/org/eclipse/jdt/internal/core/CreateElementInCUOperation.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CreateElementInCUOperation.java,v retrieving revision 1.36 diff -u -r1.36 CreateElementInCUOperation.java --- model/org/eclipse/jdt/internal/core/CreateElementInCUOperation.java 6 Mar 2007 02:38:49 -0000 1.36 +++ model/org/eclipse/jdt/internal/core/CreateElementInCUOperation.java 3 Apr 2007 08:40:25 -0000 @@ -142,7 +142,7 @@ unit.save(null, false); boolean isWorkingCopy = unit.isWorkingCopy(); if (!isWorkingCopy) - this.setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); + setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); worked(1); resultElements = generateResultHandles(); if (!isWorkingCopy // if unit is working copy, then save will have already fired the delta