From 783624b37e4c7cc555a8336ca6038fb07bef6018 Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Sat, 27 Mar 2004 05:03:58 +0000 Subject: [PATCH] Fixed up the commit operation to use the correct Scheduling Rule. M8 seems to have gotten more strict. --- .../cdt/internal/core/model/CModelManager.java | 3 ++- .../cdt/internal/core/model/CModelOperation.java | 11 +++++++++++ .../core/model/CommitWorkingCopyOperation.java | 14 +++++++++++++- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java index ec3d41c6f37..7b89b3491c0 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java @@ -883,7 +883,8 @@ public class CModelManager implements IResourceChangeListener, ICDescriptorListe operation.run(monitor); } else { // use IWorkspace.run(...) to ensure that a build will be done in autobuild mode - getCModel().getUnderlyingResource().getWorkspace().run(operation, monitor); + getCModel().getUnderlyingResource().getWorkspace() + .run(operation, operation.getSchedulingRule(), IWorkspace.AVOID_UPDATE, monitor); } } catch (CoreException ce) { if (ce instanceof CModelException) { diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelOperation.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelOperation.java index 1719cd75b19..941240c7101 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelOperation.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelOperation.java @@ -21,12 +21,14 @@ import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceStatus; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRunnable; +import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.SubProgressMonitor; +import org.eclipse.core.runtime.jobs.ISchedulingRule; /** * Defines behavior common to all C Model operations @@ -382,6 +384,15 @@ public abstract class CModelOperation implements IWorkspaceRunnable, IProgressMo return fResultElements; } + /** + * Returns the scheduling rule for this operation (i.e. the resource that needs to be locked + * while this operation is running. + * Subclasses can override. + */ + public ISchedulingRule getSchedulingRule() { + return ResourcesPlugin.getWorkspace().getRoot(); + } + /** * Creates and returns a subprogress monitor if appropriate. */ diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CommitWorkingCopyOperation.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CommitWorkingCopyOperation.java index 4be0ce47a03..6ea25a80ed9 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CommitWorkingCopyOperation.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CommitWorkingCopyOperation.java @@ -11,13 +11,16 @@ package org.eclipse.cdt.internal.core.model; * Rational Software - Initial API and implementation ***********************************************************************/ -import org.eclipse.cdt.core.model.*; import org.eclipse.cdt.core.model.CModelException; +import org.eclipse.cdt.core.model.IBuffer; import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICModelStatus; import org.eclipse.cdt.core.model.ICModelStatusConstants; import org.eclipse.cdt.core.model.ITranslationUnit; +import org.eclipse.cdt.core.model.IWorkingCopy; import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IWorkspace; +import org.eclipse.core.runtime.jobs.ISchedulingRule; /** * Commits the contents of a working copy translation unit to its original @@ -54,6 +57,15 @@ public class CommitWorkingCopyOperation extends CModelOperation { super(new ICElement[] {element}, force); } + public ISchedulingRule getSchedulingRule() { + IResource resource = getElementToProcess().getResource(); + IWorkspace workspace = resource.getWorkspace(); + if (resource.exists()) { + return workspace.getRuleFactory().modifyRule(resource); + } else { + return workspace.getRuleFactory().createRule(resource); + } + } /** * @see org.eclipse.cdt.internal.core.model.CModelOperation#executeOperation()