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:
parent
e7a52e7c7c
commit
1e87c2c634
4 changed files with 44 additions and 4 deletions
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue