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:
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 {
|
try {
|
||||||
ResourcesPlugin.getWorkspace().run(op, monitor);
|
ResourcesPlugin.getWorkspace().run(op, null, IResource.NONE, monitor);
|
||||||
} finally {
|
} finally {
|
||||||
monitor.done();
|
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.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();
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue