diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/1.2/test12.zip b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/1.2/test12.zip index 5b776ed5446..cd22d850156 100644 Binary files a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/1.2/test12.zip and b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/1.2/test12.zip differ diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/2.0/test20.zip b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/2.0/test20.zip index 377fef458b1..c504c60eab1 100644 Binary files a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/2.0/test20.zip and b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/2.0/test20.zip differ diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/2.1/test21.zip b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/2.1/test21.zip index b821a210ba9..e3f47d3f715 100644 Binary files a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/2.1/test21.zip and b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/2.1/test21.zip differ diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/2.1CPP/Test21CXX.zip b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/2.1CPP/Test21CXX.zip new file mode 100644 index 00000000000..b604a9116a1 Binary files /dev/null and b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/2.1CPP/Test21CXX.zip differ diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ManagedProjectUpdateTests.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ManagedProjectUpdateTests.java index 375e194f9f0..74c42742fee 100644 --- a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ManagedProjectUpdateTests.java +++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ManagedProjectUpdateTests.java @@ -45,6 +45,8 @@ public class ManagedProjectUpdateTests extends TestCase { suite.addTest(new ManagedProjectUpdateTests("testProjectUpdate12_NoUpdate")); suite.addTest(new ManagedProjectUpdateTests("testProjectUpdate20_NoUpdate")); suite.addTest(new ManagedProjectUpdateTests("testProjectUpdate21_NoUpdate")); + // TODO: This is affected by the TODO in UpdateManagedProjectManager + //suite.addTest(new ManagedProjectUpdateTests("testProjectUpdate21CPP_Update")); return suite; } @@ -122,8 +124,16 @@ public class ManagedProjectUpdateTests extends TestCase { if(isCompatible){ //check for correct update - if(!updateProject){ + if (!updateProject) { //TODO: if the user has chosen not to update the project the .cdtbuild file should not change + } else { + // Make sure that we have a valid project + if (info == null || + info.getManagedProject() == null || + info.getManagedProject().isValid() == false) + { + fail("the project \"" + curProject.getName() + "\" was not properly converted"); + } } //check whether the project builds without errors @@ -192,6 +202,19 @@ public class ManagedProjectUpdateTests extends TestCase { doTestProjectUpdate("2.1", true, true, makefiles); } + /* (non-Javadoc) + * tests project v2.1 update of a C++ project with C source files + */ + public void testProjectUpdate21CPP_Update(){ + IPath[] makefiles = { + Path.fromOSString("makefile"), + Path.fromOSString("objects.mk"), + Path.fromOSString("sources.mk"), + Path.fromOSString("subdir.mk"), + Path.fromOSString("Functions/subdir.mk")}; + doTestProjectUpdate("2.1CPP", true, true, makefiles); + } + /* (non-Javadoc) * tests project v1.2 update * in case when user chooses not to update the project diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java index 283b5bb31dc..3e1877f3b5f 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java @@ -1514,28 +1514,33 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI buildInfo = new ManagedBuildInfo(project, (Element)node, fileVersion); if (fileVersion != null) { buildInfo.setVersion(fileVersion); - } - // Check to see if all elements could be loaded correctly - for example, - // if references in the project file could not be resolved to extension - // elements - if (buildInfo.getManagedProject() == null || - (!buildInfo.getManagedProject().isValid())) { - // The load failed - throw new Exception(ManagedMakeMessages.getFormattedString("ManagedBuildManager.error.id.nomatch", project.getName())); //$NON-NLS-1$ - } - - // Each ToolChain/Tool/Builder element maintain two separate - // converters if available - // 0ne for previous Mbs versions and one for current Mbs version - // walk through the project hierarchy and call the converters - // written for previous mbs versions - if ( checkForMigrationSupport(buildInfo, false) != true ) { - // display an error message that the project is no loadable - if (buildInfo.getManagedProject() == null || + PluginVersionIdentifier version = new PluginVersionIdentifier(fileVersion); + PluginVersionIdentifier version21 = new PluginVersionIdentifier("2.1"); //$NON-NLS-1$ + // CDT 2.1 is the first version using the new MBS model + if (version.isGreaterOrEqualTo(version21)) { + // Check to see if all elements could be loaded correctly - for example, + // if references in the project file could not be resolved to extension + // elements + if (buildInfo.getManagedProject() == null || (!buildInfo.getManagedProject().isValid())) { // The load failed throw new Exception(ManagedMakeMessages.getFormattedString("ManagedBuildManager.error.id.nomatch", project.getName())); //$NON-NLS-1$ } + + // Each ToolChain/Tool/Builder element maintain two separate + // converters if available + // 0ne for previous Mbs versions and one for current Mbs version + // walk through the project hierarchy and call the converters + // written for previous mbs versions + if ( checkForMigrationSupport(buildInfo, false) != true ) { + // display an error message that the project is not loadable + if (buildInfo.getManagedProject() == null || + (!buildInfo.getManagedProject().isValid())) { + // The load failed + throw new Exception(ManagedMakeMessages.getFormattedString("ManagedBuildManager.error.id.nomatch", project.getName())); //$NON-NLS-1$ + } + } + } } // Upgrade the project's CDT version if necessary diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java index af7318f0be8..6a3bf791693 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java @@ -339,7 +339,7 @@ public class Configuration extends BuildObject implements IConfiguration { // Hook me up managedProject.addConfiguration(this); setDirty(true); - setRebuildState(true); + rebuildNeeded = true; } /* @@ -1096,7 +1096,7 @@ public class Configuration extends BuildObject implements IConfiguration { if (extension == null && artifactExtension == null) return; if (artifactExtension == null || extension == null || !artifactExtension.equals(extension)) { artifactExtension = extension; - setRebuildState(true); + rebuildNeeded = true; isDirty = true; } } @@ -1108,7 +1108,7 @@ public class Configuration extends BuildObject implements IConfiguration { if (name == null && artifactName == null) return; if (artifactName == null || name == null || !artifactName.equals(name)) { artifactName = name; - setRebuildState(true); + rebuildNeeded = true; isDirty = true; } } @@ -1184,7 +1184,7 @@ public class Configuration extends BuildObject implements IConfiguration { if (step == null && prebuildStep == null) return; if (prebuildStep == null || step == null || !prebuildStep.equals(step)) { prebuildStep = step; - setRebuildState(true); + rebuildNeeded = true; isDirty = true; } } @@ -1197,7 +1197,7 @@ public class Configuration extends BuildObject implements IConfiguration { if (step == null && postbuildStep == null) return; if (postbuildStep == null || step == null || !postbuildStep.equals(step)) { postbuildStep = step; - setRebuildState(true); + rebuildNeeded = true; isDirty = true; } } @@ -1209,7 +1209,7 @@ public class Configuration extends BuildObject implements IConfiguration { if (announceStep == null && preannouncebuildStep == null) return; if (preannouncebuildStep == null || announceStep == null || !preannouncebuildStep.equals(announceStep)) { preannouncebuildStep = announceStep; - setRebuildState(true); + rebuildNeeded = true; isDirty = true; } } @@ -1221,7 +1221,7 @@ public class Configuration extends BuildObject implements IConfiguration { if (announceStep == null && postannouncebuildStep == null) return; if (postannouncebuildStep == null || announceStep == null || !postannouncebuildStep.equals(announceStep)) { postannouncebuildStep = announceStep; - setRebuildState(true); + rebuildNeeded = true; isDirty = true; } } 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 76da6f983d4..0cff6fab153 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 @@ -73,7 +73,7 @@ public class ManagedBuildInfo implements IManagedBuildInfo, IScannerInfo { // The path container used for all managed projects public static final IContainerEntry containerEntry = CoreModel.newContainerEntry(new Path("org.eclipse.cdt.managedbuilder.MANAGED_CONTAINER")); //$NON-NLS-1$ private static final QualifiedName defaultConfigProperty = new QualifiedName(ManagedBuilderCorePlugin.getUniqueIdentifier(), DEFAULT_CONFIGURATION); - private static final QualifiedName defaultTargetProperty = new QualifiedName(ManagedBuilderCorePlugin.getUniqueIdentifier(), DEFAULT_TARGET); + //private static final QualifiedName defaultTargetProperty = new QualifiedName(ManagedBuilderCorePlugin.getUniqueIdentifier(), DEFAULT_TARGET); public static final String MAJOR_SEPERATOR = ";"; //$NON-NLS-1$ public static final String MINOR_SEPERATOR = "::"; //$NON-NLS-1$ private static final String EMPTY_STRING = new String(); @@ -791,6 +791,7 @@ public class ManagedBuildInfo implements IManagedBuildInfo, IScannerInfo { * */ public void initializePathEntries() { + if (!isValid()) return; try { IPathEntryContainer container = new ManagedBuildCPathEntryContainer(getOwner().getProject()); CoreModel.setPathEntryContainer(new ICProject[]{cProject}, container, new NullProgressMonitor()); diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ProjectType.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ProjectType.java index 7016488ff30..b453656dca2 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ProjectType.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ProjectType.java @@ -80,7 +80,7 @@ public class ProjectType extends BuildObject implements IProjectType { // Load the configuration children IManagedConfigElement[] configs = element.getChildren(IConfiguration.CONFIGURATION_ELEMENT_NAME); - String [] usedConfigNames = new String[0]; + String [] usedConfigNames = new String[configs.length]; IConfigurationNameProvider configurationNameProvder = getConfigurationNameProvider(); if ( configurationNameProvder != null ) { diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject12.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject12.java index 81a33229113..f4d29bac882 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject12.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject12.java @@ -734,7 +734,7 @@ class UpdateManagedProject12 { } // Upgrade the version - ((ManagedBuildInfo)info).setVersion(ManagedBuildManager.getBuildInfoVersion().toString()); + ((ManagedBuildInfo)info).setVersion("2.1.0"); info.setValid(true); } catch (CoreException e){ throw e; diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject20.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject20.java index 1a5abc9ecac..597572c2abd 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject20.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject20.java @@ -94,7 +94,7 @@ class UpdateManagedProject20 { } } // Upgrade the version - ((ManagedBuildInfo)info).setVersion(ManagedBuildManager.getBuildInfoVersion().toString()); + ((ManagedBuildInfo)info).setVersion("2.1.0"); info.setValid(true); }catch (CoreException e){ throw e; @@ -377,7 +377,7 @@ class UpdateManagedProject20 { for(int i = 0; i < options.length; i++){ IOption curOption = options[i]; IOption parent = curOption.getSuperClass(); - String curOptionId = curOption.getId(); + //String curOptionId = curOption.getId(); if(parent == null) continue; diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject21.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject21.java index a9d2325dba6..fe3874f56f5 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject21.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject21.java @@ -64,26 +64,31 @@ class UpdateManagedProject21 { // did in CDT 2.*. Otherwise the .c files will not be compiled by default since CDT 3.0 switched to using // Eclipse content types. if (CoreModel.hasCCNature(project)) { - IResource[] files = project.members(); - for (int i=0; i