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 9542fe57eb6..d6e70323b08 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 @@ -2590,6 +2590,10 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI return null; } } + + if(buildInfo == null){ + buildInfo = UpdateManagedProjectManager.getConvertedManagedBuildInfo(proj); + } } // if (buildInfo == null && resource instanceof IProject) // buildInfo = findBuildInfoSynchronized((IProject)resource, forceLoad); diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject30.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject30.java index 06f510c3b23..70bca2e9c57 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject30.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject30.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006 Intel Corporation and others. + * Copyright (c) 2006, 2007 Intel Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -12,8 +12,13 @@ package org.eclipse.cdt.managedbuilder.projectconverter; import java.io.File; +import org.eclipse.cdt.managedbuilder.core.IBuildObjectProperties; +import org.eclipse.cdt.managedbuilder.core.IConfiguration; import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo; +import org.eclipse.cdt.managedbuilder.core.IManagedProject; +import org.eclipse.cdt.managedbuilder.core.IToolChain; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; +import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin; import org.eclipse.cdt.managedbuilder.internal.core.ManagedBuildInfo; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; @@ -49,9 +54,9 @@ public class UpdateManagedProject30 { // No physical conversion is need since the 3.1 model is a superset of the 3.0 model // We need to upgrade the version - ((ManagedBuildInfo)info).setVersion(ManagedBuildManager.getBuildInfoVersion().toString()); - info.setValid(true); - + ((ManagedBuildInfo)info).setVersion("3.1.0"); +// info.setValid(true); + // Save the updated file. IWorkspace workspace = project.getWorkspace(); // boolean treeLock = workspace.isTreeLocked(); diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject31.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject31.java new file mode 100644 index 00000000000..168865e5019 --- /dev/null +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject31.java @@ -0,0 +1,96 @@ +/******************************************************************************* + * Copyright (c) 2006, 2007 Intel Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Intel Corporation - Initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.managedbuilder.projectconverter; + +import org.eclipse.cdt.managedbuilder.core.IBuildObjectProperties; +import org.eclipse.cdt.managedbuilder.core.IConfiguration; +import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo; +import org.eclipse.cdt.managedbuilder.core.IManagedProject; +import org.eclipse.cdt.managedbuilder.core.IToolChain; +import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; +import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin; +import org.eclipse.cdt.managedbuilder.internal.core.ManagedBuildInfo; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; + +public class UpdateManagedProject31 { + + static void doProjectUpdate(IProgressMonitor monitor, final IProject project) throws CoreException { + IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project); + ((ManagedBuildInfo)info).setVersion(ManagedBuildManager.getBuildInfoVersion().toString()); + + info.setValid(true); + adjustProperties(info); + } + + + private static void adjustProperties(IManagedBuildInfo info){ + IManagedProject mProj = info.getManagedProject(); + IConfiguration[] cfgs = mProj.getConfigurations(); + for(int i = 0; i < cfgs.length; i++){ + adjustProperties(cfgs[i]); + } + } + + private static void adjustProperties(IConfiguration cfg){ + IBuildObjectProperties props = cfg.getBuildProperties(); + if(props == null) + return; + + IToolChain tc = cfg.getToolChain(); + IToolChain extTc = ManagedBuildManager.getExtensionToolChain(tc); + if(tc == null) + return; + String id = extTc.getId(); + if(id == null) + return; + + if(props.supportsType(ManagedBuildManager.BUILD_ARTEFACT_TYPE_PROPERTY_ID)){ + String val = getBuildArtefactTypeFromId(id); + if(val != null && props.supportsValue(ManagedBuildManager.BUILD_ARTEFACT_TYPE_PROPERTY_ID, val)){ + try { + props.setProperty(ManagedBuildManager.BUILD_ARTEFACT_TYPE_PROPERTY_ID, val); + } catch (CoreException e) { + ManagedBuilderCorePlugin.log(e); + } + } + } + if(props.supportsType(ManagedBuildManager.BUILD_TYPE_PROPERTY_ID)){ + String val = getBuildTypeFromId(id); + if(val != null && props.supportsValue(ManagedBuildManager.BUILD_TYPE_PROPERTY_ID, val)){ + try { + props.setProperty(ManagedBuildManager.BUILD_TYPE_PROPERTY_ID, val); + } catch (CoreException e) { + ManagedBuilderCorePlugin.log(e); + } + } + } + } + + private static String getBuildArtefactTypeFromId(String id){ + if(id.indexOf(".exe") != -1) + return ManagedBuildManager.BUILD_ARTEFACT_TYPE_PROPERTY_EXE; + if(id.indexOf(".so") != -1) + return ManagedBuildManager.BUILD_ARTEFACT_TYPE_PROPERTY_SHAREDLIB; + if(id.indexOf(".lib") != -1) + return ManagedBuildManager.BUILD_ARTEFACT_TYPE_PROPERTY_STATICLIB; + return null; + } + + private static String getBuildTypeFromId(String id){ + if(id.indexOf(".debug") != -1) + return ManagedBuildManager.BUILD_TYPE_PROPERTY_DEBUG; + if(id.indexOf(".release") != -1) + return ManagedBuildManager.BUILD_TYPE_PROPERTY_RELEASE; + return null; + } +} diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProjectManager.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProjectManager.java index d1b49dc7ed9..d67561acb4b 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProjectManager.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProjectManager.java @@ -15,6 +15,7 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.HashMap; +import java.util.Map; import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; @@ -42,7 +43,7 @@ import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.IOverwriteQuery; public class UpdateManagedProjectManager { - static private HashMap fUpdateManagers = new HashMap(); + static private ThreadLocal fThreadInfo = new ThreadLocal(); static private IOverwriteQuery fBackupFileOverwriteQuery = null; static private IOverwriteQuery fOpenQuestionQuery = null; static private IOverwriteQuery fUpdateProjectQuery = null; @@ -82,12 +83,13 @@ public class UpdateManagedProjectManager { } static private UpdateManagedProjectManager getExistingUpdateManager(IProject project){ - return (UpdateManagedProjectManager)fUpdateManagers.get(project.getName()); + Map map = getManagerMap(false); + return map != null ? (UpdateManagedProjectManager)map.get(project.getName()) : null; } static private UpdateManagedProjectManager createUpdateManager(IProject project){ UpdateManagedProjectManager mngr = new UpdateManagedProjectManager(project); - fUpdateManagers.put(project.getName(),mngr); + getManagerMap(true).put(project.getName(),mngr); return mngr; } @@ -95,7 +97,16 @@ public class UpdateManagedProjectManager { UpdateManagedProjectManager mngr = getExistingUpdateManager(project); if(mngr == null) return; - fUpdateManagers.remove(project.getName()); + getManagerMap(false).remove(project.getName()); + } + + static private Map getManagerMap(boolean create){ + Map map = (Map)fThreadInfo.get(); + if(map == null && create){ + map = new HashMap(); + fThreadInfo.set(map); + } + return map; } static protected PluginVersionIdentifier getManagedBuildInfoVersion(String version){ @@ -317,9 +328,13 @@ public class UpdateManagedProjectManager { if(version.isEquivalentTo(new PluginVersionIdentifier(3,0,0))){ UpdateManagedProject30.doProjectUpdate(monitor, fProject); version = getManagedBuildInfoVersion(info.getVersion()); + } + if (new PluginVersionIdentifier(4,0,0).isGreaterThan(version)){ + UpdateManagedProject31.doProjectUpdate(monitor, fProject); + version = getManagedBuildInfoVersion(info.getVersion()); } - if(/*!isCompatibleProject(info)*/ !version.equals(new PluginVersionIdentifier(3,1,0))){ + if(!isCompatibleProject(info)){ throw new CoreException(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.getUniqueIdentifier(), -1, ConverterMessages.getFormattedString("UpdateManagedProjectManager.5", //$NON-NLS-1$ new String [] {