Bug 73092 [IDE] WorkspaceModifyOperation does not avoid updates, although comment indicates it does
From the class comment of WorkspaceModifyOperation: * The primary * consequence of using this operation is that events which typically occur as a * result of workspace changes (such as the firing of resource deltas, * performance of autobuilds, etc.) are deferred until the outermost operation * has successfully completed. However this doesn't appear to be true in Eclipse 3.0. It is possible that the notification manager will send out an intermediate ResourceModifyEvent during the execution. It seems that this is because of this line: IDEWorkbenchPlugin.getPluginWorkspace().run(workspaceRunnable, rule, IResource.NONE, monitor); If IWorkspace.AVOID_UPDATE were passed (instead of IResource.NONE) I believe that these intermediate events would not occur. Probably either the comment or the implementation should be changed. Also as a side request it would be nice if this parameter could be configurable through the API of this class.
bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/WorkspaceModifyOperation.java
InterruptedException;
    /**
     * The <code>WorkspaceModifyOperation</code> implementation of this 
     * <code>IRunnableWithProgress</code> method initiates a batch of changes by 
     * invoking the <code>execute</code> method as a workspace runnable 
     * (<code>IWorkspaceRunnable</code>).
     */
    public synchronized final void run(IProgressMonitor monitor)
            throws InvocationTargetException, InterruptedException {
        final InvocationTargetException[] iteHolder = new InvocationTargetException[1];
        try {
            IWorkspaceRunnable workspaceRunnable = new IWorkspaceRunnable() {
                public void run(IProgressMonitor pm) throws CoreException {
                    try {
                        execute(pm);
                    } catch (InvocationTargetException e) {
                        
                        iteHolder[0] = e;
                    } catch (InterruptedException e) {
                        
                        
                        throw new OperationCanceledException(e.getMessage());
                    }
                    
                }
            };
            IDEWorkbenchPlugin.getPluginWorkspace().run(workspaceRunnable,
                    rule, IResource.NONE, monitor);
        } catch (CoreException e) {
            throw new InvocationTargetException(e);