1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Bug 289986 - Allowing saving resources while running an external Makefile build

This commit is contained in:
James Blackburn 2010-04-30 16:05:52 +00:00
parent e7a52e7c7c
commit 1e87c2c634
4 changed files with 44 additions and 4 deletions

View file

@ -333,7 +333,7 @@ public class MakeTarget extends PlatformObject implements IMakeTarget {
}
};
try {
ResourcesPlugin.getWorkspace().run(op, monitor);
ResourcesPlugin.getWorkspace().run(op, null, IResource.NONE, monitor);
} finally {
monitor.done();
}

View file

@ -18,6 +18,7 @@ import org.eclipse.cdt.make.core.IMakeTarget;
import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
import org.eclipse.cdt.make.internal.ui.preferences.MakePreferencePage;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
@ -100,7 +101,7 @@ public class TargetBuild {
target.build(new SubProgressMonitor(monitor, 1));
}
};
MakeUIPlugin.getWorkspace().run(runnable, monitor);
MakeUIPlugin.getWorkspace().run(runnable, null, IResource.NONE, monitor);
}
} catch (CoreException e) {
return e.getStatus();

View file

@ -22,8 +22,8 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import java.util.Set;
import org.eclipse.cdt.build.core.scannerconfig.CfgInfoContext;
import org.eclipse.cdt.build.core.scannerconfig.ICfgScannerConfigBuilderInfo2Set;
@ -2078,4 +2078,30 @@ public class CommonBuilder extends ACBuilder {
if (markers != null) {
workspace.deleteMarkers(markers);
}
}}
}
/**
* Only lock the workspace is this is a ManagedBuild, or this project references others.
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public ISchedulingRule getRule(int trigger, Map args) {
IResource WR_rule = ResourcesPlugin.getWorkspace().getRoot();
if (needAllConfigBuild() || !isCdtProjectCreated(getProject()))
return WR_rule;
// Get the builders to run
IBuilder builders[] = ManagedBuilderCorePlugin.createBuilders(getProject(), args);
// Be pessimistic if we referenced other configs
if (getReferencedConfigs(builders).length > 0)
return WR_rule;
// If any builder isManaged => pessimistic
for (IBuilder builder : builders) {
if (builder.isManagedBuildOn())
return WR_rule;
}
// Success!
return null;
}
}

View file

@ -30,6 +30,7 @@ import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Preferences;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
import org.eclipse.osgi.util.NLS;
public abstract class ACBuilder extends IncrementalProjectBuilder implements IMarkerGenerator {
@ -222,4 +223,16 @@ public abstract class ACBuilder extends IncrementalProjectBuilder implements IMa
printEvent(IncrementalProjectBuilder.CLEAN_BUILD, null);
}
/**
* Default ACBuilder shouldn't require locking the workspace during a CDT Project build.
*
* Note this may have a detrimental effect on #getDelta(). Derived builders which rely
* on #getDelta(...) being accurate should return a WorkspaceRoot scheduling rule.
* @since 5.2
*/
@SuppressWarnings("rawtypes")
public ISchedulingRule getRule(int trigger, Map args) {
return null;
}
}