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
this(IDEWorkbenchPlugin.getPluginWorkspace().getRoot());
    }
    /**
     * Creates a new operation that will run using the provided
     * scheduling rule.
     * @param rule  The ISchedulingRule to use or <code>null</code>.
     * @since 3.0
     */
    protected WorkspaceModifyOperation(ISchedulingRule rule) {
        this.rule = rule;
    }
    /**
     * Performs the steps that are to be treated as a single logical workspace
     * change.
     * <p>
     * Subclasses must implement this method.
     * </p>
     *
     * @param monitor the progress monitor to use to display progress and field
     *   user requests to cancel
     * @exception CoreException if the operation fails due to a CoreException
     * @exception InvocationTargetException if the operation fails due to an exception other than CoreException
     * @exception InterruptedException if the operation detects a request to cancel, 
     *  using <code>IProgressMonitor.isCanceled()</code>, it should exit by throwing 
     *  <code>InterruptedException</code>.  It is also possible to throw 
     *  <code>OperationCanceledException</code>, which gets mapped to <code>InterruptedException</code>
     *  by the <code>run</code> method.
     */
    protected abstract void execute(IProgressMonitor monitor)
            throws CoreException, InvocationTargetException,