diff options
author | Doug Schaefer | 2004-03-27 05:03:58 +0000 |
---|---|---|
committer | Doug Schaefer | 2004-03-27 05:03:58 +0000 |
commit | 783624b37e4c7cc555a8336ca6038fb07bef6018 (patch) | |
tree | fa316075bd7ec599082ec050fc289a8bb5464372 /core | |
parent | a9d96b77961d1a67cb077aea5f464016b2540041 (diff) | |
download | org.eclipse.cdt-783624b37e4c7cc555a8336ca6038fb07bef6018.tar.gz org.eclipse.cdt-783624b37e4c7cc555a8336ca6038fb07bef6018.tar.xz org.eclipse.cdt-783624b37e4c7cc555a8336ca6038fb07bef6018.zip |
Fixed up the commit operation to use the correct Scheduling
Rule. M8 seems to have gotten more strict.
Diffstat (limited to 'core')
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 @@ -383,6 +385,15 @@ public abstract class CModelOperation implements IWorkspaceRunnable, IProgressMo } /** + * 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. */ protected IProgressMonitor getSubProgressMonitor(int workAmount) { 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() |