1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-06 09:16:02 +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 { try {
ResourcesPlugin.getWorkspace().run(op, monitor); ResourcesPlugin.getWorkspace().run(op, null, IResource.NONE, monitor);
} finally { } finally {
monitor.done(); 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.MakeUIPlugin;
import org.eclipse.cdt.make.internal.ui.preferences.MakePreferencePage; import org.eclipse.cdt.make.internal.ui.preferences.MakePreferencePage;
import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
@ -100,7 +101,7 @@ public class TargetBuild {
target.build(new SubProgressMonitor(monitor, 1)); target.build(new SubProgressMonitor(monitor, 1));
} }
}; };
MakeUIPlugin.getWorkspace().run(runnable, monitor); MakeUIPlugin.getWorkspace().run(runnable, null, IResource.NONE, monitor);
} }
} catch (CoreException e) { } catch (CoreException e) {
return e.getStatus(); return e.getStatus();

View file

@ -22,8 +22,8 @@ import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set;
import org.eclipse.cdt.build.core.scannerconfig.CfgInfoContext; import org.eclipse.cdt.build.core.scannerconfig.CfgInfoContext;
import org.eclipse.cdt.build.core.scannerconfig.ICfgScannerConfigBuilderInfo2Set; import org.eclipse.cdt.build.core.scannerconfig.ICfgScannerConfigBuilderInfo2Set;
@ -2078,4 +2078,30 @@ public class CommonBuilder extends ACBuilder {
if (markers != null) { if (markers != null) {
workspace.deleteMarkers(markers); 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.CoreException;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Preferences; import org.eclipse.core.runtime.Preferences;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
import org.eclipse.osgi.util.NLS; import org.eclipse.osgi.util.NLS;
public abstract class ACBuilder extends IncrementalProjectBuilder implements IMarkerGenerator { 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); 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;
}
} }