diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedBuildCoreTests.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedBuildCoreTests.java
index 3f4974be2c8..e538af65087 100644
--- a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedBuildCoreTests.java
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedBuildCoreTests.java
@@ -57,10 +57,12 @@ import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
+
public class ManagedBuildCoreTests extends TestCase {
private static final boolean boolVal = true;
private static final String testConfigId = "test.config.override";
@@ -165,6 +167,11 @@ public class ManagedBuildCoreTests extends TestCase {
IProject project = null;
try {
project = createProject(projectName);
+ IProjectDescription description = project.getDescription();
+ // Make sure it has a managed nature
+ if (description != null) {
+ assertTrue(description.hasNature(ManagedCProjectNature.MNG_NATURE_ID));
+ }
} catch (CoreException e) {
fail("Failed to open project in 'testMakeCommandManipulation': " + e.getLocalizedMessage());
}
@@ -204,12 +211,18 @@ public class ManagedBuildCoreTests extends TestCase {
IProject project = null;
try {
project = createProject(projectName);
+ IProjectDescription description = project.getDescription();
+ // Make sure it has a managed nature
+ if (description != null) {
+ assertTrue(description.hasNature(ManagedCProjectNature.MNG_NATURE_ID));
+ }
} catch (CoreException e) {
fail("Failed to open project in 'testScannerInfoInterface': " + e.getLocalizedMessage());
}
//These are the expected path settings
final String[] expectedPaths = new String[5];
+
// This first path is a built-in, so it will not be manipulated by build manager
expectedPaths[0] = "/usr/gnu/include";
expectedPaths[1] = (new Path("/usr/include")).toOSString();
@@ -227,11 +240,13 @@ public class ManagedBuildCoreTests extends TestCase {
fail("Failed adding new target to project: " + e.getLocalizedMessage());
}
assertNotNull(newTarget);
+
// Copy over the configs
IConfiguration[] baseConfigs = baseTarget.getConfigurations();
for (int i = 0; i < baseConfigs.length; ++i) {
newTarget.createConfiguration(baseConfigs[i], baseConfigs[i].getId() + "." + i);
}
+
// Change the default configuration to the sub config
IConfiguration[] configs = newTarget.getConfigurations();
assertEquals(4, configs.length);
@@ -251,15 +266,6 @@ public class ManagedBuildCoreTests extends TestCase {
IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(project);
assertNotNull(provider);
- // Check the build information right away
- IScannerInfo currentSettings = provider.getScannerInformation(project);
- Map currentSymbols = currentSettings.getDefinedSymbols();
- // It should simply contain the built-in
- assertTrue(currentSymbols.containsKey("BUILTIN"));
- assertEquals((String)currentSymbols.get("BUILTIN"), "");
- String[] currentPaths = currentSettings.getIncludePaths();
- assertTrue(Arrays.equals(expectedPaths, currentPaths));
-
// Now subscribe (note that the method will be called after a change
provider.subscribe(project, new IScannerInfoChangeListener () {
public void changeNotification(IResource project, IScannerInfo info) {
@@ -278,7 +284,17 @@ public class ManagedBuildCoreTests extends TestCase {
assertTrue(Arrays.equals(expectedPaths, actualPaths));
}
});
+
+ // Check the build information before we change it
+ IScannerInfo currentSettings = provider.getScannerInformation(project);
+ Map currentSymbols = currentSettings.getDefinedSymbols();
+ // It should simply contain the built-in
+ assertTrue(currentSymbols.containsKey("BUILTIN"));
+ assertEquals((String)currentSymbols.get("BUILTIN"), "");
+ String[] currentPaths = currentSettings.getIncludePaths();
+ assertTrue(Arrays.equals(expectedPaths, currentPaths));
+
// Add some defined symbols programmatically
String[] expectedSymbols = {"DEBUG", "GNOME = ME "};
IConfiguration defaultConfig = buildInfo.getDefaultConfiguration(newTarget);
@@ -329,6 +345,11 @@ public class ManagedBuildCoreTests extends TestCase {
// Open the test project
IProject project = createProject(projectName);
+ IProjectDescription description = project.getDescription();
+ // Make sure it has a managed nature
+ if (description != null) {
+ assertTrue(description.hasNature(ManagedCProjectNature.MNG_NATURE_ID));
+ }
// Make sure there is one and only one target with 3 configs
ITarget[] definedTargets = ManagedBuildManager.getTargets(project);
@@ -403,6 +424,11 @@ public class ManagedBuildCoreTests extends TestCase {
IProject project = null;
try {
project = createProject(projectName);
+ IProjectDescription description = project.getDescription();
+ // Make sure it has a managed nature
+ if (description != null) {
+ assertTrue(description.hasNature(ManagedCProjectNature.MNG_NATURE_ID));
+ }
} catch (CoreException e) {
fail("Failed to open project: " + e.getLocalizedMessage());
}
@@ -483,7 +509,15 @@ public class ManagedBuildCoreTests extends TestCase {
target.createConfiguration(configs[i], target.getId() + "." + i);
}
}
- ManagedBuildManager.setDefaultConfiguration(project, defaultConfig);
+ ManagedBuildManager.setDefaultConfiguration(project, defaultConfig);
+
+ // Initialize the path entry container
+ IStatus initResult = ManagedBuildManager.initBuildInfoContainer(project);
+ if (initResult.getCode() != IStatus.OK) {
+ fail("Initializing build information failed for: " + project.getName() + " because: " + initResult.getMessage());
+ }
+
+ // Now test the results out
checkRootTarget(target);
// Override the "String Option in Category" option value
@@ -541,6 +575,11 @@ public class ManagedBuildCoreTests extends TestCase {
IProject project = null;
try {
project = createProject(projectName);
+ IProjectDescription description = project.getDescription();
+ // Make sure it has a managed nature
+ if (description != null) {
+ assertTrue(description.hasNature(ManagedCProjectNature.MNG_NATURE_ID));
+ }
} catch (CoreException e) {
fail("Failed to open project: " + e.getLocalizedMessage());
}
@@ -569,6 +608,11 @@ public class ManagedBuildCoreTests extends TestCase {
}
try {
project = createProject(projectRename);
+ description = project.getDescription();
+ // Make sure it has a managed nature
+ if (description != null) {
+ assertTrue(description.hasNature(ManagedCProjectNature.MNG_NATURE_ID));
+ }
} catch (CoreException e) {
fail("Failed to open renamed project: " + e.getLocalizedMessage());
}
@@ -618,6 +662,11 @@ public class ManagedBuildCoreTests extends TestCase {
}
try {
project = createProject(projectName);
+ description = project.getDescription();
+ // Make sure it has a managed nature
+ if (description != null) {
+ assertTrue(description.hasNature(ManagedCProjectNature.MNG_NATURE_ID));
+ }
} catch (CoreException e) {
fail("Failed to open re-renamed project: " + e.getLocalizedMessage());
}
@@ -643,6 +692,9 @@ public class ManagedBuildCoreTests extends TestCase {
}
private void addManagedBuildNature (IProject project) {
+ // Create the buildinformation object for the project
+ ManagedBuildManager.createBuildInfo(project);
+
// Add the managed build nature
try {
ManagedCProjectNature.addManagedNature(project, new NullProgressMonitor());
@@ -1316,10 +1368,10 @@ public class ManagedBuildCoreTests extends TestCase {
if (description != null) {
assertTrue(description.hasNature(ManagedCProjectNature.MNG_NATURE_ID));
}
-
} catch (CoreException e) {
fail("Test failed on error parser project creation: " + e.getLocalizedMessage());
}
+
// There should not be any targets defined for this project yet
assertEquals(0, ManagedBuildManager.getTargets(project).length);
@@ -1339,6 +1391,14 @@ public class ManagedBuildCoreTests extends TestCase {
ITarget target = targets[0];
assertEquals(target, newTarget);
assertFalse(target.equals(targetDef));
+
+ // Initialize the path entry container
+ IStatus initResult = ManagedBuildManager.initBuildInfoContainer(project);
+ if (initResult.getCode() != IStatus.OK) {
+ fail("Initializing build information failed for: " + project.getName() + " because: " + initResult.getMessage());
+ }
+
+ // Test this out
checkErrorParsersTarget(target);
// Save, close, reopen and test again
@@ -1456,3 +1516,4 @@ public class ManagedBuildCoreTests extends TestCase {
}
}
+
diff --git a/build/org.eclipse.cdt.managedbuilder.core/.options b/build/org.eclipse.cdt.managedbuilder.core/.options
new file mode 100644
index 00000000000..ee072d7ffb0
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.core/.options
@@ -0,0 +1,4 @@
+org.eclipse.cdt.managedbuilder.core/debug=true
+
+# Reports path entry container activity
+org.eclipse.cdt.managedbuilder.core/debug/pathEntry=false
diff --git a/build/org.eclipse.cdt.managedbuilder.core/plugin.xml b/build/org.eclipse.cdt.managedbuilder.core/plugin.xml
index a2685df62b7..2f75590e532 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/plugin.xml
+++ b/build/org.eclipse.cdt.managedbuilder.core/plugin.xml
@@ -67,5 +67,11 @@
id="org.eclipse.cdt.managedbuilder.core.genmakebuilder">
+
+ * The typical sequence of calls to add a new build information object to + * a managed build project is + *
+ * ManagedBuildManager.createBuildInfo(project); + * // Do whatever initialization you need here + * ManagedBuildManager.createTarget(project); + * ManagedBuildManager.initBuildInfoContainer(project); + * + * @param resource The resource the build information is associated with + */ + public static void createBuildInfo(IResource resource) { + ManagedBuildInfo buildInfo = new ManagedBuildInfo(resource); + try { + // Associate the build info with the project for the duration of the session + resource.setSessionProperty(buildInfoProperty, buildInfo); + } catch (CoreException e) { + // There is no point in keeping the info around if it isn't associated with the project + ManagedBuilderCorePlugin.log(e); + buildInfo = null; + } + } + private static IManagedConfigElementProvider createConfigProvider( DefaultManagedConfigElement element) throws CoreException { @@ -774,7 +862,17 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI return false; } - private static ManagedBuildInfo findBuildInfo(IResource resource, boolean create) { + /* (non-Javadoc) + * Provate helper method that first checks to see if a build information + * object has been associated with the project for the current workspace + * session. If one cannot be found, one is created from the project file + * associated with the argument. If there is no prject file or the load + * fails for some reason, the method will returnnull
+ * + * @param resource + * @return + */ + private static ManagedBuildInfo findBuildInfo(IResource resource/*, boolean create*/) { // I am sick of NPEs if (resource == null) return null; @@ -796,55 +894,40 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI buildInfo.updateOwner(resource); } } catch (CoreException e) { + ManagedBuilderCorePlugin.log(e); return null; } + // Nothing in session store, so see if we can load it from cdtbuild if (buildInfo == null && resource instanceof IProject) { - // Nothing in session store, so see if we can load it from cdtbuild buildInfo = loadBuildInfo((IProject)resource); - } - - if (buildInfo == null && create) { try { - // Create a new build info object for the project - buildInfo = new ManagedBuildInfo(resource, true); - // Associate the build info with the project for the duration of the session - resource.setSessionProperty(buildInfoProperty, buildInfo); + // Check if the project needs its container initialized + initBuildInfoContainer(buildInfo); } catch (CoreException e) { - return null; + // We can live without a path entry container if the build information is valid + ManagedBuilderCorePlugin.log(e); } } - return buildInfo; } /** - * Answers the build information for theIResource
in the - * argument. If thecreate
is true, then a new build information - * repository will be created for the resource. - * - * @param resource - * @param create - * @return IManagedBuildInfo - */ - public static IManagedBuildInfo getBuildInfo(IResource resource, boolean create) { - return (IManagedBuildInfo) findBuildInfo(resource, create); - } - - /** - * Answers, but does not create, the managed build information for the + * Finds, but does not create, the managed build information for the * argument. * - * @see ManagedBuildManager#getBuildInfo(IResource, boolean) - * @param resource - * @return IManagedBuildInfo + * @see ManagedBuildManager#initBuildInfo(IResource) + * @param resource The resource to search for managed build information on. + * @return IManagedBuildInfo The build information object for the resource. */ public static IManagedBuildInfo getBuildInfo(IResource resource) { - return (IManagedBuildInfo) findBuildInfo(resource, false); + return (IManagedBuildInfo) findBuildInfo(resource.getProject()); } /** - * @return + * Answers the current version of the managed builder plugin. + * + * @return the current version of the managed builder plugin */ public static PluginVersionIdentifier getBuildInfoVersion() { return buildInfoVersion; @@ -864,7 +947,7 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI * @see org.eclipse.cdt.core.parser.IScannerInfoProvider#getScannerInformation(org.eclipse.core.resources.IResource) */ public IScannerInfo getScannerInformation(IResource resource) { - return (IScannerInfo) getBuildInfo(resource.getProject(), false); + return (IScannerInfo) getBuildInfo(resource.getProject()); } /* (non-Javadoc) diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuilderCorePlugin.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuilderCorePlugin.java index 66fda3f3885..49069e81f73 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuilderCorePlugin.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuilderCorePlugin.java @@ -13,11 +13,14 @@ package org.eclipse.cdt.managedbuilder.core; import java.lang.reflect.InvocationTargetException; +import org.eclipse.cdt.managedbuilder.internal.scannerconfig.ManagedBuildCPathEntryContainer; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Plugin; import org.eclipse.core.runtime.Status; +import org.osgi.framework.BundleContext; public class ManagedBuilderCorePlugin extends Plugin { @@ -71,4 +74,26 @@ public class ManagedBuilderCorePlugin extends Plugin { ResourcesPlugin.getPlugin().getLog().log(status); } + /* (non-Javadoc) + * @see org.eclipse.core.runtime.Plugin#start(org.osgi.framework.BundleContext) + */ + public void start(BundleContext context) throws Exception { + // Turn on logging for plugin when debugging + super.start(context); + configurePluginDebugOptions(); + } + + private static final String PATH_ENTRY = getUniqueIdentifier() + "/debug/pathEntry"; //$NON-NLS-1$ + + /** + * + */ + private void configurePluginDebugOptions() { + if (isDebugging()) { + String option = Platform.getDebugOption(PATH_ENTRY); + if (option != null) { + ManagedBuildCPathEntryContainer.VERBOSE = option.equalsIgnoreCase("true") ; //$NON-NLS-1$ + } + } + } } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java index c80290fa863..0dfce1aeb84 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java @@ -42,13 +42,9 @@ import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.QualifiedName; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; @@ -61,72 +57,34 @@ public class ManagedBuildInfo implements IManagedBuildInfo, IScannerInfo { private static final QualifiedName defaultConfigProperty = new QualifiedName(ManagedBuilderCorePlugin.getUniqueIdentifier(), "defaultConfig"); //$NON-NLS-1$ private static final QualifiedName defaultTargetProperty = new QualifiedName(ManagedBuilderCorePlugin.getUniqueIdentifier(), "defaultTarget"); //$NON-NLS-1$ // The path container used for all managed projects - private static final IContainerEntry containerEntry = CoreModel.newContainerEntry(new Path("org.eclipse.cdt.managedbuilder.MANAGED_CONTAINER")); //$NON-NLS-1$ + public static final IContainerEntry containerEntry = CoreModel.newContainerEntry(new Path("org.eclipse.cdt.managedbuilder.MANAGED_CONTAINER")); //$NON-NLS-1$ - private ICProject cModelElement; + private boolean containerCreated; + private ICProject cProject; private String defaultConfigIds; private Map defaultConfigMap; private ITarget defaultTarget; private String defaultTargetId; - private ITarget selectedTarget; private boolean isDirty; - private boolean rebuildNeeded; private IResource owner; + private boolean rebuildNeeded; + private ITarget selectedTarget; private Map targetMap; private List targetList; - private String version; + private String version; /** - * For compatability. + * Basic contructor used when the project is brand new. * * @param owner */ public ManagedBuildInfo(IResource owner) { - this(owner, true); - } - - /** - * Create a new managed build information for the IResource specified in the argument - * - * @param owner - * @param intializeEntries - * @since 2.0 - */ - public ManagedBuildInfo(IResource owner, boolean intializeEntries) { this.owner = owner; - cModelElement = CoreModel.getDefault().create(owner.getProject()); - - try { - IPathEntry[] entries = cModelElement.getRawPathEntries(); - if (entries.length > 0 && entries[0].equals(containerEntry)) { - - } else { - Job initJob = new Job(ManagedMakeMessages.getFormattedString("ManagedBuildInfo.message.job.init", getOwner().getName())) { //$NON-NLS-1$ - protected IStatus run(IProgressMonitor monitor) { - try { - // Set the raw path entries - cModelElement.setRawPathEntries(new IPathEntry[]{containerEntry}, new NullProgressMonitor()); - } catch (CModelException e) { - return new Status(IStatus.ERROR, - ManagedBuilderCorePlugin.getUniqueIdentifier(), - -1, - e.getLocalizedMessage(), - e); - } - return new Status(IStatus.OK, - ManagedBuilderCorePlugin.getUniqueIdentifier(), - IStatus.OK, - ManagedMakeMessages.getFormattedString("ManagedBuildInfo.message.init.ok", getOwner().getName()), //$NON-NLS-1$ - null); - } + cProject = CoreModel.getDefault().create(owner.getProject()); - }; - initJob.schedule(); - } - } catch (CModelException e) { - ManagedBuilderCorePlugin.log(e); - } + // The container for this project has never been created + containerCreated = false; // Does not need a save but should be rebuilt isDirty = false; @@ -150,10 +108,6 @@ public class ManagedBuildInfo implements IManagedBuildInfo, IScannerInfo { // Again, hitting this error just means the default config is not set return; } - - if(intializeEntries) { - initializePathEntries(); - } } /** @@ -164,16 +118,16 @@ public class ManagedBuildInfo implements IManagedBuildInfo, IScannerInfo { * @param element */ public ManagedBuildInfo(IResource owner, Element element) { - this(owner, false); + this(owner); + // Container has already been created for this project + containerCreated = true; // Inflate the targets NodeList targetNodes = element.getElementsByTagName(ITarget.TARGET_ELEMENT_NAME); for (int targIndex = targetNodes.getLength() - 1; targIndex >= 0; --targIndex) { new Target(this, (Element)targetNodes.item(targIndex)); } - - initializePathEntries(); - + // Switch the rebuild off since this is an existing project rebuildNeeded = false; } @@ -242,7 +196,9 @@ public class ManagedBuildInfo implements IManagedBuildInfo, IScannerInfo { return name; } - + public ICProject getCProject() { + return cProject; + } /* (non-Javadoc) * @see org.eclipse.cdt.core.build.managed.IManagedBuildInfo#getCleanCommand() @@ -436,9 +392,9 @@ public class ManagedBuildInfo implements IManagedBuildInfo, IScannerInfo { private ArrayList getIncludePathEntries() { // Extract the resolved paths from the project (if any) ArrayList paths = new ArrayList(); - if (cModelElement != null) { + if (cProject != null) { try { - IPathEntry[] entries = cModelElement.getResolvedPathEntries(); + IPathEntry[] entries = cProject.getResolvedPathEntries(); for (int index = 0; index < entries.length; ++index) { int kind = entries[index].getEntryKind(); if (kind == IPathEntry.CDT_INCLUDE) { @@ -505,9 +461,9 @@ public class ManagedBuildInfo implements IManagedBuildInfo, IScannerInfo { private HashMap getMacroPathEntries() { HashMap macros = new HashMap(); - if (cModelElement != null) { + if (cProject != null) { try { - IPathEntry[] entries = cModelElement.getResolvedPathEntries(); + IPathEntry[] entries = cProject.getResolvedPathEntries(); for (int index = 0; index < entries.length; ++index) { if (entries[index].getEntryKind() == IPathEntry.CDT_MACRO) { IMacroEntry macro = (IMacroEntry) entries[index]; @@ -865,8 +821,8 @@ public class ManagedBuildInfo implements IManagedBuildInfo, IScannerInfo { */ private void initializePathEntries() { try { - IPathEntryContainer container = new ManagedBuildCPathEntryContainer(this); - CoreModel.getDefault().setPathEntryContainer(new ICProject[]{cModelElement}, container, new NullProgressMonitor()); + IPathEntryContainer container = new ManagedBuildCPathEntryContainer(getOwner().getProject()); + CoreModel.getDefault().setPathEntryContainer(new ICProject[]{cProject}, container, new NullProgressMonitor()); } catch (CModelException e) { ManagedBuilderCorePlugin.log(e); } @@ -908,19 +864,23 @@ public class ManagedBuildInfo implements IManagedBuildInfo, IScannerInfo { setDirty(false); } + public void setContainerCreated(boolean isCreated) { + containerCreated = isCreated; + } + /* (non-Javadoc) * @see org.eclipse.cdt.core.build.managed.IManagedBuildInfo#setDefaultConfiguration(org.eclipse.cdt.core.build.managed.IConfiguration) */ public void setDefaultConfiguration(IConfiguration configuration) { // Sanity - if (configuration== null) return; + if (configuration == null) return; // Get the target associated with the argument ITarget target = configuration.getTarget(); // See if there is anything to be done IConfiguration oldDefault = getDefaultConfiguration(target); - if (!configuration.equals(oldDefault)) { + if (defaultTarget == null || !configuration.equals(oldDefault)) { // Make sure it is the default setDefaultTarget(target); // Make the argument the @@ -960,7 +920,9 @@ public class ManagedBuildInfo implements IManagedBuildInfo, IScannerInfo { defaultTarget = target; defaultTargetId = target.getId(); persistDefaultTarget(); - initializePathEntries(); + if (containerCreated) { + initializePathEntries(); + } } } @@ -1028,17 +990,11 @@ public class ManagedBuildInfo implements IManagedBuildInfo, IScannerInfo { target.updateOwner(resource); } // And finally update the cModelElement - cModelElement = CoreModel.getDefault().create(owner.getProject()); - try { - CoreModel.setRawPathEntries(cModelElement, new IPathEntry[]{containerEntry}, new NullProgressMonitor()); - } catch (CModelException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - initializePathEntries(); - + cProject = CoreModel.getDefault().create(owner.getProject()); + // Save everything setDirty(true); + setRebuildState(true); } } } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Target.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Target.java index ac234b25306..60c0dba655e 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Target.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Target.java @@ -98,7 +98,7 @@ public class Target extends BuildObject implements ITarget { this.cleanCommand = parent.getCleanCommand(); // Hook me up - IManagedBuildInfo buildInfo = ManagedBuildManager.getBuildInfo(owner, true); + IManagedBuildInfo buildInfo = ManagedBuildManager.getBuildInfo(owner); buildInfo.addTarget(this); } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/ManagedBuildCPathEntryContainer.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/ManagedBuildCPathEntryContainer.java index af5d169c64a..78abc9f9155 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/ManagedBuildCPathEntryContainer.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/ManagedBuildCPathEntryContainer.java @@ -1,5 +1,5 @@ /********************************************************************** - * Copyright (c) Apr 21, 2004 IBM Corporation and others. + * Copyright (c) 2004 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at @@ -19,7 +19,6 @@ import java.util.Map; import java.util.Vector; import org.eclipse.cdt.core.model.CoreModel; -import org.eclipse.cdt.core.model.IIncludeEntry; import org.eclipse.cdt.core.model.IMacroEntry; import org.eclipse.cdt.core.model.IPathEntry; import org.eclipse.cdt.core.model.IPathEntryContainer; @@ -52,21 +51,34 @@ import org.eclipse.core.runtime.Platform; * @since 2.0 */ public class ManagedBuildCPathEntryContainer implements IPathEntryContainer { - private static final String BUILDER_ID = MakeCorePlugin.getUniqueIdentifier() + ".ScannerConfigBuilder"; //$NON-NLS-1$ + private static final String NEWLINE = System.getProperty("line.separator"); //$NON-NLS-1$ + private static final String ERROR_HEADER = "PathEntryContainer error ["; //$NON-NLS-1$ + private static final String TRACE_FOOTER = "]: "; //$NON-NLS-1$ + private static final String TRACE_HEADER = "PathEntryContainer trace ["; //$NON-NLS-1$ + private ITarget defaultTarget; private Vector entries; + private IProject project; private ManagedBuildInfo info; + public static boolean VERBOSE = false; + public static void outputTrace(String resourceName, String message) { + System.out.println(TRACE_HEADER + resourceName + TRACE_FOOTER + message + NEWLINE); + } + + public static void outputError(String resourceName, String message) { + System.err.println(ERROR_HEADER + resourceName + TRACE_FOOTER + message + NEWLINE); + } + /** * Creates a new path container for the managed buildd project. * * @param info the build information associated with the project */ - public ManagedBuildCPathEntryContainer(ManagedBuildInfo info) { + public ManagedBuildCPathEntryContainer(IProject project) { super(); - this.info = info; - defaultTarget = info.getDefaultTarget(); + this.project = project; entries = new Vector(); } @@ -91,7 +103,7 @@ public class ManagedBuildCPathEntryContainer implements IPathEntryContainer { } if (add) { - entries.add(CoreModel.newMacroEntry(new Path(""), macro, value)); //$NON-NLS-1$ + entries.add(CoreModel.newMacroEntry(Path.EMPTY, macro, value)); } } @@ -101,24 +113,12 @@ public class ManagedBuildCPathEntryContainer implements IPathEntryContainer { // A little checking is needed to avoid adding duplicates Iterator pathIter = paths.listIterator(); while (pathIter.hasNext()) { - boolean add = true; String path = (String) pathIter.next(); - // Make sure there is no other path with the same value - Iterator entryIter = entries.listIterator(); - while (entryIter.hasNext()) { - IPathEntry entry = (IPathEntry) entryIter.next(); - if (entry.getEntryKind() == IPathEntry.CDT_INCLUDE) { - if (((IIncludeEntry)entry).getFullIncludePath().equals(path)) { - add = false; - break; - } - } - } - if (add) { - entries.add(CoreModel.newIncludeEntry(new Path(""), null, new Path(path), true)); //$NON-NLS-1$ + IPathEntry entry = CoreModel.newIncludeEntry(Path.EMPTY, Path.EMPTY, new Path(path), true); + if (!entries.contains(entry)) { + entries.add(entry); } } - } protected void calculateBuiltIns(ITarget defaultTarget, IConfiguration config) { @@ -190,35 +190,38 @@ public class ManagedBuildCPathEntryContainer implements IPathEntryContainer { * @see org.eclipse.cdt.core.model.IPathEntryContainer#getPathEntries() */ public IPathEntry[] getPathEntries() { - // TODO figure out when I can skip this step - if (entries.isEmpty()) { - // Load the toolchain-spec'd collector - defaultTarget = info.getDefaultTarget(); - if (defaultTarget == null) { - // The build information has not been loaded yet - return (IPathEntry[])entries.toArray(new IPathEntry[entries.size()]); - } - ITarget parent = defaultTarget.getParent(); - if (parent == null) { - // The build information has not been loaded yet - return (IPathEntry[])entries.toArray(new IPathEntry[entries.size()]); - } - // See if we can load a dynamic resolver - String baseTargetId = parent.getId(); - IManagedScannerInfoCollector collector = ManagedBuildManager.getScannerInfoCollector(baseTargetId); - if (collector != null) { - collector.setProject(info.getOwner().getProject()); - calculateEntriesDynamically((IProject)info.getOwner(), collector); - addIncludePaths(collector.getIncludePaths()); - addDefinedSymbols(collector.getDefinedSymbols()); + info = (ManagedBuildInfo) ManagedBuildManager.getBuildInfo(project); + + // Load the toolchain-spec'd collector + defaultTarget = info.getDefaultTarget(); + if (defaultTarget == null) { + // The build information has not been loaded yet + return (IPathEntry[])entries.toArray(new IPathEntry[entries.size()]); + } + ITarget parent = defaultTarget.getParent(); + if (parent == null) { + // The build information has not been loaded yet + ManagedBuildCPathEntryContainer.outputError(project.getName(), "Build information has not been loaded yet"); //$NON-NLS-1$ + return (IPathEntry[])entries.toArray(new IPathEntry[entries.size()]); + } + // See if we can load a dynamic resolver + String baseTargetId = parent.getId(); + IManagedScannerInfoCollector collector = ManagedBuildManager.getScannerInfoCollector(baseTargetId); + if (collector != null) { + ManagedBuildCPathEntryContainer.outputTrace(project.getName(), "Path entries collected dynamically"); //$NON-NLS-1$ + collector.setProject(info.getOwner().getProject()); + calculateEntriesDynamically((IProject)info.getOwner(), collector); + addIncludePaths(collector.getIncludePaths()); + addDefinedSymbols(collector.getDefinedSymbols()); + } else { + // If none supplied, use the built-ins + IConfiguration config = info.getDefaultConfiguration(defaultTarget); + if (config != null) { + calculateBuiltIns(defaultTarget, config); + ManagedBuildCPathEntryContainer.outputTrace(project.getName(), "Path entries set using built-in definitions from " + config.getName()); //$NON-NLS-1$ } else { - // If none supplied, use the built-ins - IConfiguration config = info.getDefaultConfiguration(defaultTarget); - if (config != null) { - calculateBuiltIns(defaultTarget, config); - } else { - return (IPathEntry[])entries.toArray(new IPathEntry[entries.size()]); - } + ManagedBuildCPathEntryContainer.outputError(project.getName(), "Configuration is null"); //$NON-NLS-1$ + return (IPathEntry[])entries.toArray(new IPathEntry[entries.size()]); } } return (IPathEntry[])entries.toArray(new IPathEntry[entries.size()]); diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/ManagedBuildPathEntryContainerInitializer.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/ManagedBuildPathEntryContainerInitializer.java new file mode 100644 index 00000000000..8b93c14ec07 --- /dev/null +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/ManagedBuildPathEntryContainerInitializer.java @@ -0,0 +1,40 @@ +/********************************************************************** + * Copyright (c) 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + **********************************************************************/ + +package org.eclipse.cdt.managedbuilder.internal.scannerconfig; + +import org.eclipse.cdt.core.model.CoreModel; +import org.eclipse.cdt.core.model.ICProject; +import org.eclipse.cdt.core.model.PathEntryContainerInitializer; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; + +/** + * @since 2.0 + */ +public class ManagedBuildPathEntryContainerInitializer extends PathEntryContainerInitializer { + + /** + * Need a zero-argument constructor to allow the system to create + * the intitializer + */ + public ManagedBuildPathEntryContainerInitializer() { + super(); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.model.PathEntryContainerInitializer#initialize(org.eclipse.core.runtime.IPath, org.eclipse.cdt.core.model.ICProject) + */ + public void initialize(IPath containerPath, ICProject project) throws CoreException { + CoreModel.getDefault().setPathEntryContainer(new ICProject[]{project}, new ManagedBuildCPathEntryContainer(project.getProject()), null); + } + +} diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/GnuMakefileGenerator.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/GnuMakefileGenerator.java index 6d5eaa05ff7..9e241caff00 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/GnuMakefileGenerator.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/GnuMakefileGenerator.java @@ -546,7 +546,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator { IProject dep = refdProjects[i]; if (!dep.exists()) continue; if (addDeps) { - buffer.append("dependents:" + NEWLINE); //$NON-NLS-1 + buffer.append("dependents:" + NEWLINE); //$NON-NLS-1$ addDeps = false; } String buildDir = dep.getLocation().toString(); @@ -1163,7 +1163,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator { } // Some echo implementations misbehave and put the -n and newline in the output - if (firstLine.startsWith("-n")) { + if (firstLine.startsWith("-n")) { //$NON-NLS-1$ // Create a vector with all the strings Vector tokens = new Vector(dependencies.length); for (int index = 1; index < dependencies.length; ++index) { @@ -1184,7 +1184,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator { } catch (ArrayIndexOutOfBoundsException e) { secondLine = new String(); } - if (secondLine.startsWith("'")) { + if (secondLine.startsWith("'")) { //$NON-NLS-1$ // This is the Win32 implementation of echo (MinGW without MSYS) outBuffer.append(secondLine.substring(1) + WHITESPACE); } else { @@ -1198,7 +1198,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator { } catch (ArrayIndexOutOfBoundsException e) { thirdLine = new String(); } - int lastIndex = thirdLine.lastIndexOf("'"); + int lastIndex = thirdLine.lastIndexOf("'"); //$NON-NLS-1$ if (lastIndex != -1) { if (lastIndex == 0) { outBuffer.append(WHITESPACE); @@ -1223,7 +1223,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator { Iterator iter = tokens.listIterator(3); while (iter.hasNext()) { String nextElement = (String)iter.next(); - if (nextElement.endsWith("\\")) { + if (nextElement.endsWith("\\")) { //$NON-NLS-1$ outBuffer.append(nextElement + NEWLINE + WHITESPACE); } else { outBuffer.append(nextElement + WHITESPACE); diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ErrorParserBlock.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ErrorParserBlock.java index 319b10b3491..58008294ad9 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ErrorParserBlock.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ErrorParserBlock.java @@ -48,7 +48,7 @@ public class ErrorParserBlock extends AbstractErrorParserBlock { // page before the "C/C++ Build" page. // Get the build information - IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project, true); + IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project); target = info.getDefaultTarget(); } if (target != null) { diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ManagedBuilderUIImages.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ManagedBuilderUIImages.java index 1a3ee7eac3b..36c85e1aa74 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ManagedBuilderUIImages.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ManagedBuilderUIImages.java @@ -31,7 +31,7 @@ public class ManagedBuilderUIImages { // Subdirectory (under the package containing this class) where 16 color images are private static URL iconBaseURL = null; static { - iconBaseURL = Platform.getBundle(ManagedBuilderUIPlugin.getUniqueIdentifier()).getEntry("icons/"); + iconBaseURL = Platform.getBundle(ManagedBuilderUIPlugin.getUniqueIdentifier()).getEntry("icons/"); //$NON-NLS-1$ } private static final String NAME_PREFIX= ManagedBuilderUIPlugin.getUniqueIdentifier() + '.'; diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildPropertyPage.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildPropertyPage.java index e4f2bbed0a7..89a22839bb0 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildPropertyPage.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildPropertyPage.java @@ -173,7 +173,7 @@ public class BuildPropertyPage extends PropertyPage implements IWorkbenchPropert GridData gd; // Initialize the key data - IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(getProject(), true); + IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(getProject()); if (info.getVersion() == null) { // Display a message page instead of the properties control final Label invalidInfo = new Label(composite, SWT.LEFT); diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ManagedBuilderPropertyPage.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ManagedBuilderPropertyPage.java index 518aaf9dc39..1e7a5a6b835 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ManagedBuilderPropertyPage.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ManagedBuilderPropertyPage.java @@ -141,7 +141,7 @@ public class ManagedBuilderPropertyPage extends PropertyPage implements ICOption IProject project = getProject(); ITarget target = ManagedBuildManager.getSelectedTarget(project); if (target == null) { - IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project, true); + IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project); target = info.getDefaultTarget(); ManagedBuildManager.setSelectedTarget(project, target); } diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedCProjectWizard.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedCProjectWizard.java index 3ee8c744dd6..f8ad8e0091e 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedCProjectWizard.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedCProjectWizard.java @@ -28,6 +28,9 @@ public class NewManagedCProjectWizard extends NewManagedProjectWizard { super(title, description); } + /* (non-Javadoc) + * @see org.eclipse.jface.wizard.IWizard#addPages() + */ public void addPages() { // Add the default page for all new managed projects super.addPages(); diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectWizard.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectWizard.java index 9d028a934bf..5a6591f3068 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectWizard.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectWizard.java @@ -21,9 +21,11 @@ import org.eclipse.cdt.managedbuilder.core.ITarget; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; import org.eclipse.cdt.managedbuilder.core.ManagedCProjectNature; import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderUIMessages; +import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderUIPlugin; import org.eclipse.cdt.ui.wizards.NewCProjectWizard; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.SubProgressMonitor; @@ -89,27 +91,34 @@ public class NewManagedProjectWizard extends NewCProjectWizard { // super.doRun() just creates the project and does not assign a builder to it. super.doRun(new SubProgressMonitor(monitor, 5)); - // Add the managed build nature + // Add the managed build nature and builder + ICDescriptor desc = null; try { monitor.subTask(ManagedBuilderUIMessages.getResourceString(MSG_ADD_NATURE)); ManagedCProjectNature.addManagedNature(newProject, new SubProgressMonitor(monitor, 1)); - } catch (CoreException e) { - // Bail out of the project creation - } - // Add the builder - try { monitor.subTask(ManagedBuilderUIMessages.getResourceString(MSG_ADD_BUILDER)); ManagedCProjectNature.addManagedBuilder(newProject, new SubProgressMonitor(monitor, 1)); + desc = CCorePlugin.getDefault().getCProjectDescription(newProject); + desc.remove(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID); + desc.create(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID, ManagedBuildManager.INTERFACE_IDENTITY); + desc.remove(CCorePlugin.BINARY_PARSER_UNIQ_ID); } catch (CoreException e) { - // Bail out of the project creation + ManagedBuilderUIPlugin.log(e); } - + // Add the target to the project ITarget newTarget = null; try { + ManagedBuildManager.createBuildInfo(newProject); ITarget parent = targetConfigurationPage.getSelectedTarget(); newTarget = ManagedBuildManager.createTarget(newProject, parent); if (newTarget != null) { + try { + // org.eclipse.cdt.core.ELF or org.eclipse.cdt.core.PE + desc.create(CCorePlugin.BINARY_PARSER_UNIQ_ID, newTarget.getBinaryParserId()); + } catch (CoreException e) { + ManagedBuilderUIPlugin.log(e); + } String artifactName = newProject.getName(); newTarget.setArtifactName(artifactName); IConfiguration [] selectedConfigs = targetConfigurationPage.getSelectedConfigurations(); @@ -132,27 +141,14 @@ public class NewManagedProjectWizard extends NewCProjectWizard { ManagedBuildManager.setNewProjectVersion(newProject); } } catch (BuildException e) { - // TODO Flag the error to the user + ManagedBuilderUIPlugin.log(e); } - // Associate the project with the managed builder so the clients can get proper information - try { - ICDescriptor desc = CCorePlugin.getDefault().getCProjectDescription(newProject); - desc.remove(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID); - desc.create(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID, ManagedBuildManager.INTERFACE_IDENTITY); - - desc.remove(CCorePlugin.BINARY_PARSER_UNIQ_ID); - // org.eclipse.cdt.core.ELF or org.eclipse.cdt.core.PE - desc.create(CCorePlugin.BINARY_PARSER_UNIQ_ID, newTarget.getBinaryParserId()); - } catch (CoreException e) { - // TODO Flag the error to the user - } - // Modify the project settings if (newProject != null) { optionPage.performApply(new SubProgressMonitor(monitor, 2)); } - + // Save the build options monitor.subTask(ManagedBuilderUIMessages.getResourceString(MSG_SAVE)); ManagedBuildManager.saveBuildInfo(newProject, true); @@ -171,8 +167,12 @@ public class NewManagedProjectWizard extends NewCProjectWizard { * @see org.eclipse.cdt.ui.wizards.NewCProjectWizard#doRunEpilogue(org.eclipse.core.runtime.IProgressMonitor) */ protected void doRunEpilogue(IProgressMonitor monitor) { - // Auto-generated method stub - + // Get my initializer to run + IStatus initResult = ManagedBuildManager.initBuildInfoContainer(newProject); + if (initResult.getCode() != IStatus.OK) { + // At this point, I can live with a failure + ManagedBuilderUIPlugin.log(initResult); + } } /* (non-Javadoc)