mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-04 23:55:26 +02:00
Fix specs detection for Container Build feature
- sometimes specs detection will be for a non-active build configuration so the project cannot be used to determine eligibility for the command launcher - change ICommandLauncherFactory to accept an object in its getCommandLauncher method which can either be an IProject or ICConfigurationDesription - change ContainerCommandLauncherFactory to accept an Object instead of IProject in its getCommandLauncher() method - cast the Object received either to be an IProject or ICConfigurationDescription to determine if the build should occur in a Container or not - fix CommandLauncherManager.getCommandLauncher() to accept and pass on an Object to the list of ICommandLauncherFactory instances - fix AbstractBuiltinSpecsDetector to pass in the current configuration description when getting the CommandLauncher since the current configuration may not be the active configuration
This commit is contained in:
parent
0c1c44a47d
commit
49c2109ff6
4 changed files with 25 additions and 11 deletions
|
@ -657,7 +657,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
|
||||||
}
|
}
|
||||||
console.start(currentProject);
|
console.start(currentProject);
|
||||||
|
|
||||||
ICommandLauncher launcher = CommandLauncherManager.getInstance().getCommandLauncher();
|
ICommandLauncher launcher = CommandLauncherManager.getInstance().getCommandLauncher(currentCfgDescription);
|
||||||
launcher.setProject(currentProject);
|
launcher.setProject(currentProject);
|
||||||
|
|
||||||
IPath program = new Path(""); //$NON-NLS-1$
|
IPath program = new Path(""); //$NON-NLS-1$
|
||||||
|
@ -766,7 +766,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
|
||||||
// so collect them to save later when output finishes
|
// so collect them to save later when output finishes
|
||||||
if (entries != null) {
|
if (entries != null) {
|
||||||
for (ICLanguageSettingEntry entry : entries) {
|
for (ICLanguageSettingEntry entry : entries) {
|
||||||
if (!detectedSettingEntries.contains(entry)) {
|
if (detectedSettingEntries != null && !detectedSettingEntries.contains(entry)) {
|
||||||
detectedSettingEntries.add(entry);
|
detectedSettingEntries.add(entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -166,11 +166,11 @@ public class CommandLauncherManager {
|
||||||
* @param project - optional input to determine launcher.
|
* @param project - optional input to determine launcher.
|
||||||
* @return an ICommandLauncher for running commands
|
* @return an ICommandLauncher for running commands
|
||||||
*/
|
*/
|
||||||
public ICommandLauncher getCommandLauncher(IProject project) {
|
public ICommandLauncher getCommandLauncher(Object object) {
|
||||||
// loop through list of factories and return first launcher
|
// loop through list of factories and return first launcher
|
||||||
// returned
|
// returned
|
||||||
for (ICommandLauncherFactory factory : factories) {
|
for (ICommandLauncherFactory factory : factories) {
|
||||||
ICommandLauncher launcher = factory.getCommandLauncher(project);
|
ICommandLauncher launcher = factory.getCommandLauncher(object);
|
||||||
if (launcher != null) {
|
if (launcher != null) {
|
||||||
return launcher;
|
return launcher;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,11 +21,11 @@ import org.eclipse.core.resources.IProject;
|
||||||
public interface ICommandLauncherFactory {
|
public interface ICommandLauncherFactory {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a Command Launcher for a project (optional)
|
* Get a Command Launcher for an object (IProject or IConfiguration) (optional)
|
||||||
* @param project - optional parameter to help determine appropriate launcher
|
* @param object - optional parameter to help determine appropriate launcher
|
||||||
* @return ICommandLauncher or null if not appropriate for project
|
* @return ICommandLauncher or null if not appropriate for object
|
||||||
*/
|
*/
|
||||||
public ICommandLauncher getCommandLauncher(IProject project);
|
public ICommandLauncher getCommandLauncher(Object object);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register language setting entries for a project
|
* Register language setting entries for a project
|
||||||
|
|
|
@ -39,10 +39,24 @@ public class ContainerCommandLauncherFactory
|
||||||
implements ICommandLauncherFactory {
|
implements ICommandLauncherFactory {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ICommandLauncher getCommandLauncher(IProject project) {
|
public ICommandLauncher getCommandLauncher(Object object) {
|
||||||
// check if container build enablement has been checked
|
// check if container build enablement has been checked
|
||||||
ICConfigurationDescription cfgd = CoreModel.getDefault()
|
ICConfigurationDescription cfgd = null;
|
||||||
.getProjectDescription(project).getActiveConfiguration();
|
// We use an object because it could be an IProject, implying the
|
||||||
|
// active configuration, but it could be an ICConfigurationDescription
|
||||||
|
// as is used when computing specs for non-active configurations. We
|
||||||
|
// don't want to force callers to have to declare
|
||||||
|
// ICConfigurationDescription
|
||||||
|
// which is part of Managed build.
|
||||||
|
if (object instanceof IProject) {
|
||||||
|
IProject project = (IProject) object;
|
||||||
|
cfgd = CoreModel.getDefault().getProjectDescription(project)
|
||||||
|
.getActiveConfiguration();
|
||||||
|
} else if (object instanceof ICConfigurationDescription) {
|
||||||
|
cfgd = (ICConfigurationDescription) object;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
IConfiguration cfg = ManagedBuildManager
|
IConfiguration cfg = ManagedBuildManager
|
||||||
.getConfigurationForDescription(cfgd);
|
.getConfigurationForDescription(cfgd);
|
||||||
IOptionalBuildProperties props = cfg.getOptionalBuildProperties();
|
IOptionalBuildProperties props = cfg.getOptionalBuildProperties();
|
||||||
|
|
Loading…
Add table
Reference in a new issue