/******************************************************************************* * Copyright (c) 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.internal.dataprovider; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.ICDescriptor; import org.eclipse.cdt.core.ICDescriptorOperation; import org.eclipse.cdt.core.cdtvariables.ICdtVariable; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.IPathEntry; import org.eclipse.cdt.core.settings.model.ICConfigExtensionReference; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICExternalSetting; import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.core.settings.model.ICStorageElement; import org.eclipse.cdt.core.settings.model.extension.CConfigurationData; import org.eclipse.cdt.core.settings.model.extension.ICProjectConverter; import org.eclipse.cdt.core.settings.model.util.PathEntryTranslator; import org.eclipse.cdt.core.settings.model.util.PathEntryTranslator.ReferenceSettingsInfo; import org.eclipse.cdt.internal.core.cdtvariables.ICoreVariableContextInfo; import org.eclipse.cdt.internal.core.cdtvariables.StorableCdtVariables; import org.eclipse.cdt.internal.core.cdtvariables.UserDefinedVariableSupplier; import org.eclipse.cdt.make.core.IMakeTarget; import org.eclipse.cdt.make.core.IMakeTargetManager; import org.eclipse.cdt.make.core.MakeCorePlugin; 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.ManagedBuildManager; import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin; import org.eclipse.cdt.managedbuilder.internal.core.Builder; import org.eclipse.cdt.managedbuilder.internal.core.BuilderFactory; import org.eclipse.cdt.managedbuilder.internal.core.Configuration; import org.eclipse.cdt.managedbuilder.internal.core.ManagedProject; import org.eclipse.cdt.managedbuilder.internal.core.ToolChain; import org.eclipse.core.resources.ICommand; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceVisitor; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.resources.ResourcesPlugin; 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.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.IOverwriteQuery; public class ProjectConverter implements ICProjectConverter { private final static String OLD_MAKE_BUILDER_ID = "org.eclipse.cdt.make.core.makeBuilder"; //$NON-NLS-1$ private final static String OLD_MAKE_NATURE_ID = "org.eclipse.cdt.make.core.makeNature"; //$NON-NLS-1$ private final static String OLD_MNG_BUILDER_ID = "org.eclipse.cdt.managedbuilder.core.genmakebuilder"; //$NON-NLS-1$ private final static String OLD_MNG_NATURE_ID = "org.eclipse.cdt.managedbuilder.core.managedBuildNature"; //$NON-NLS-1$ private final static String OLD_DISCOVERY_MODULE_ID = "scannerConfiguration"; //$NON-NLS-1$ private final static String OLD_BINARY_PARSER_ID = "org.eclipse.cdt.core.BinaryParser"; //$NON-NLS-1$ private final static String OLD_ERROR_PARSER_ID = "org.eclipse.cdt.core.ErrorParser"; //$NON-NLS-1$ private final static String OLD_PATH_ENTRY_ID = "org.eclipse.cdt.core.pathentry"; //$NON-NLS-1$ private final static String OLD_DISCOVERY_NATURE_ID = "org.eclipse.cdt.make.core.ScannerConfigNature"; //$NON-NLS-1$ private final static String OLD_DISCOVERY_BUILDER_ID = "org.eclipse.cdt.make.core.ScannerConfigBuilder"; //$NON-NLS-1$ private final static String OLD_MAKE_TARGET_BUIDER_ID = "org.eclipse.cdt.make.MakeTargetBuilder"; //$NON-NLS-1$ private final static String NEW_MAKE_TARGET_BUIDER_ID = "org.eclipse.cdt.build.MakeTargetBuilder"; //$NON-NLS-1$ private static ResourcePropertyHolder PROPS = new ResourcePropertyHolder(true); private static String CONVERSION_FAILED_MSG_ID = "conversionFailed"; //$NON-NLS-1$ public boolean canConvertProject(IProject project, String oldOwnerId, ICProjectDescription oldDes) { try { if(oldOwnerId == null || oldDes == null) return false; IProjectDescription eDes = project.getDescription(); Set<String> natureSet = new HashSet<String>(Arrays.asList(eDes.getNatureIds())); if(natureSet.contains(OLD_MAKE_NATURE_ID)) return true; if(natureSet.contains(OLD_MNG_NATURE_ID)) return true; } catch (CoreException e) { } return false; // return ManagedBuildManager.canGetBuildInfo(project); } public ICProjectDescription convertProject(IProject project, IProjectDescription eDes, String oldOwnerId, ICProjectDescription oldDes) throws CoreException { Set<String> natureSet = new HashSet<String>(Arrays.asList(eDes.getNatureIds())); CoreModel model = CoreModel.getDefault(); ICProjectDescription newDes = null; IManagedBuildInfo info = null; String[] binErrParserIds = null; // boolean convertMakeTargetInfo = false; if(natureSet.contains(OLD_MAKE_NATURE_ID)){ newDes = oldDes; ICConfigurationDescription des = newDes.getConfigurations()[0]; ICConfigExtensionReference refs[] = des.get(OLD_BINARY_PARSER_ID); if(refs.length != 0){ binErrParserIds = new String[refs.length]; for(int i = 0; i < refs.length; i++){ binErrParserIds[i] = refs[i].getID(); } } info = ManagedBuildManager.createBuildInfo(project); ManagedProject mProj = new ManagedProject(newDes); info.setManagedProject(mProj); Configuration cfg = ConfigurationDataProvider.getClearPreference(des.getId()); cfg.applyToManagedProject(mProj); cfg.setConfigurationDescription(des); des.setConfigurationData(ManagedBuildManager.CFG_DATA_PROVIDER_ID, cfg.getConfigurationData()); } else if(natureSet.contains(OLD_MNG_NATURE_ID)){ try { if(PROPS.getProperty(project, CONVERSION_FAILED_MSG_ID) != null) throw new CoreException(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.getUniqueIdentifier(), DataProviderMessages.getString("ProjectConverter.0"))); //$NON-NLS-1$ newDes = model.createProjectDescription(project, false); info = convertManagedBuildInfo(project, newDes); } catch (CoreException e) { displayInfo(project, CONVERSION_FAILED_MSG_ID, DataProviderMessages.getString("ProjectConverter.10"), DataProviderMessages.getFormattedString("ProjectConverter.11", new String[]{project.getName(), e.getLocalizedMessage()})); //$NON-NLS-1$ //$NON-NLS-2$ throw e; } } if(newDes == null || !newDes.isValid() || newDes.getConfigurations().length == 0){ newDes = null; } else { boolean changeEDes = false; if(natureSet.remove(OLD_MAKE_NATURE_ID)) changeEDes = true; if(natureSet.remove(OLD_DISCOVERY_NATURE_ID)) changeEDes = true; if(changeEDes) eDes.setNatureIds(natureSet.toArray(new String[natureSet.size()])); changeEDes = false; ICommand[] cmds = eDes.getBuildSpec(); List<ICommand> list = new ArrayList<ICommand>(Arrays.asList(cmds)); ICommand makeBuilderCmd = null; for(Iterator<ICommand> iter = list.iterator(); iter.hasNext();){ ICommand cmd = iter.next(); if(OLD_MAKE_BUILDER_ID.equals(cmd.getBuilderName())){ makeBuilderCmd = cmd; iter.remove(); changeEDes = true; // convertMakeTargetInfo = true; } else if(OLD_DISCOVERY_BUILDER_ID.equals(cmd.getBuilderName())){ iter.remove(); changeEDes = true; } } ICConfigurationDescription cfgDess[] = newDes.getConfigurations(); for(int i = 0; i < cfgDess.length; i++){ ICConfigurationDescription cfgDes = cfgDess[i]; BuildConfigurationData data = (BuildConfigurationData)cfgDes.getConfigurationData(); IConfiguration cfg = ManagedBuildManager.getConfigurationForDescription(cfgDes); if(makeBuilderCmd != null) loadBuilderSettings(cfg, makeBuilderCmd); // loadDiscoveryOptions(cfgDes, cfg); loadPathEntryInfo(project, cfgDes, data); if(binErrParserIds != null){ data.getTargetPlatformData().setBinaryParserIds(binErrParserIds); cfgDes.get(OLD_BINARY_PARSER_ID); // ICConfigExtensionReference refs[] = cfgDes.get(OLD_BINARY_PARSER_ID); // String ids[] = idsFromRefs(refs); // data.getTargetPlatformData().setBinaryParserIds(ids); // // refs = cfgDes.get(OLD_ERROR_PARSER_ID); // ids = idsFromRefs(refs); // data.getBuildData().setErrorParserIDs(ids); } try { ConfigurationDataProvider.writeConfiguration(cfgDes, data); } catch (CoreException e){ } } // if(convertMakeTargetInfo){ // try { // convertMakeTargetInfo(project, newDes, null); // } catch (CoreException e){ // ManagedBuilderCorePlugin.log(e); // } // } if(changeEDes){ cmds = list.toArray(new ICommand[list.size()]); eDes.setBuildSpec(cmds); } info.setValid(true); try { ManagedBuildManager.setLoaddedBuildInfo(project, info); } catch (Exception e) { } } return newDes; } static void displayInfo(IProject proj, String id, String title, String message){ if(PROPS.getProperty(proj, id) == null){ openInformation(proj, id, title, message, false); PROPS.setProperty(proj, id, Boolean.TRUE); } } public static boolean getBooleanFromQueryAnswer(String answer){ if(IOverwriteQuery.ALL.equalsIgnoreCase(answer) || IOverwriteQuery.YES.equalsIgnoreCase(answer)) return true; return false; } static public boolean openQuestion(final IResource rc, final String id, final String title, final String message, IOverwriteQuery query, final boolean multiple){ if(query != null) return getBooleanFromQueryAnswer(query.queryOverwrite(message)); IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if(window == null){ IWorkbenchWindow windows[] = PlatformUI.getWorkbench().getWorkbenchWindows(); window = windows[0]; } final Shell shell = window.getShell(); final boolean [] answer = new boolean[1]; shell.getDisplay().syncExec(new Runnable() { public void run() { Object ob = PROPS.getProperty(rc, id); if(multiple || ob == null){ PROPS.setProperty(rc, id, Boolean.TRUE); answer[0] = MessageDialog.openQuestion(shell,title,message); PROPS.setProperty(rc, id, answer[0] ? Boolean.TRUE : Boolean.FALSE); } else { answer[0] = ((Boolean)ob).booleanValue(); } } }); return answer[0]; } static private void openInformation(final IResource rc, final String id, final String title, final String message, final boolean multiple){ IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if(window == null){ IWorkbenchWindow windows[] = PlatformUI.getWorkbench().getWorkbenchWindows(); window = windows[0]; } final Shell shell = window.getShell(); shell.getDisplay().syncExec(new Runnable() { public void run() { if(multiple || PROPS.getProperty(rc, id) == null){ PROPS.setProperty(rc, id, Boolean.TRUE); MessageDialog.openInformation(shell,title,message); } } }); } private static void convertMakeTargetInfo(final IProject project, ICProjectDescription des, IProgressMonitor monitor) throws CoreException{ if(monitor == null) monitor = new NullProgressMonitor(); CCorePlugin.getDefault().getCDescriptorManager().runDescriptorOperation(project, des, new ICDescriptorOperation(){ public void execute(ICDescriptor descriptor, IProgressMonitor monitor) throws CoreException { final IMakeTargetManager mngr = MakeCorePlugin.getDefault().getTargetManager(); project.accept(new IResourceVisitor(){ public boolean visit(IResource resource) throws CoreException { if(resource.getType() == IResource.FILE) return false; try { IContainer cr = (IContainer)resource; IMakeTarget targets[] = mngr.getTargets(cr); for(int i = 0; i < targets.length; i++){ IMakeTarget t = targets[i]; if(!OLD_MAKE_TARGET_BUIDER_ID.equals(t.getTargetBuilderID())) continue; IMakeTarget newT = mngr.createTarget(project, t.getName(), NEW_MAKE_TARGET_BUIDER_ID); copySettings(t, newT); mngr.removeTarget(t); mngr.addTarget(cr, newT); } } catch ( CoreException e){ ManagedBuilderCorePlugin.log(e); } return true; } }); } }, monitor); } private static void copySettings(IMakeTarget fromTarget, IMakeTarget toTarget) throws CoreException{ toTarget.setAppendEnvironment(fromTarget.appendEnvironment()); toTarget.setAppendProjectEnvironment(fromTarget.appendProjectEnvironment()); toTarget.setBuildAttribute(IMakeTarget.BUILD_LOCATION, fromTarget.getBuildAttribute(IMakeTarget.BUILD_LOCATION, null)); toTarget.setBuildAttribute(IMakeTarget.BUILD_COMMAND, fromTarget.getBuildAttribute(IMakeTarget.BUILD_COMMAND, null)); toTarget.setBuildAttribute(IMakeTarget.BUILD_ARGUMENTS, fromTarget.getBuildAttribute(IMakeTarget.BUILD_ARGUMENTS, null)); toTarget.setBuildAttribute(IMakeTarget.BUILD_TARGET, fromTarget.getBuildAttribute(IMakeTarget.BUILD_TARGET, null)); Map<String, String> fromMap = fromTarget.getEnvironment(); if(fromMap != null) toTarget.setEnvironment(new HashMap<String, String>(fromMap)); // toTarget.setErrorParsers(fromTarget.getErrorParsers()); toTarget.setRunAllBuilders(fromTarget.runAllBuilders()); toTarget.setStopOnError(fromTarget.isStopOnError()); toTarget.setUseDefaultBuildCmd(fromTarget.isDefaultBuildCmd()); toTarget.setContainer(fromTarget.getContainer()); } private void loadPathEntryInfo(IProject project, ICConfigurationDescription des, CConfigurationData data){ try { ICStorageElement el = des.getStorage(OLD_PATH_ENTRY_ID, false); if(el != null){ IPathEntry[] entries = PathEntryTranslator.decodePathEntries(project, el); if(entries.length != 0){ List<IPathEntry> list = new ArrayList<IPathEntry>(Arrays.asList(entries)); for(Iterator<IPathEntry> iter = list.iterator(); iter.hasNext();){ IPathEntry entry = iter.next(); if(entry.getEntryKind() == IPathEntry.CDT_CONTAINER){ iter.remove(); continue; } } if(list.size() != 0){ PathEntryTranslator tr = new PathEntryTranslator(project, data); entries = list.toArray(new IPathEntry[list.size()]); ReferenceSettingsInfo refInfo = tr.applyPathEntries(entries, null, PathEntryTranslator.OP_REPLACE); ICExternalSetting extSettings[] = refInfo.getExternalSettings(); des.removeExternalSettings(); if(extSettings.length != 0){ ICExternalSetting setting; for(int i = 0; i < extSettings.length; i++){ setting = extSettings[i]; des.createExternalSetting(setting.getCompatibleLanguageIds(), setting.getCompatibleContentTypeIds(), setting.getCompatibleExtensions(), setting.getEntries()); } } IPath projPaths[] = refInfo.getReferencedProjectsPaths(); if(projPaths.length != 0){ Map<String, String> map = new HashMap<String, String>(projPaths.length); for(int i = 0; i < projPaths.length; i++){ map.put(projPaths[i].segment(0), ""); //$NON-NLS-1$ } des.setReferenceInfo(map); } } } des.removeStorage(OLD_PATH_ENTRY_ID); } } catch (CoreException e) { ManagedBuilderCorePlugin.log(e); } } // private String[] idsFromRefs(ICConfigExtensionReference refs[]){ // String ids[] = new String[refs.length]; // for(int i = 0; i < ids.length; i++){ // ids[i] = refs[i].getID(); // } // return ids; // } // private void loadDiscoveryOptions(ICConfigurationDescription des, IConfiguration cfg){ // try { // ICStorageElement discoveryStorage = des.getStorage(OLD_DISCOVERY_MODULE_ID, false); // if(discoveryStorage != null){ // Configuration config = (Configuration)cfg; // IScannerConfigBuilderInfo2 scannerConfigInfo = ScannerConfigInfoFactory2.create(new CfgInfoContext(cfg), discoveryStorage, ScannerConfigProfileManager.NULL_PROFILE_ID); // config.setPerRcTypeDiscovery(false); // config.setScannerConfigInfo(scannerConfigInfo); // des.removeStorage(OLD_DISCOVERY_MODULE_ID); // } // } catch (CoreException e) { // ManagedBuilderCorePlugin.log(e); // } // // // } private void loadBuilderSettings(IConfiguration cfg, ICommand cmd){ Builder builder = (Builder)BuilderFactory.createBuilderFromCommand(cfg, cmd); if(builder.getCommand() != null && builder.getCommand().length() != 0){ String[] errParserIds = builder.getCustomizedErrorParserIds(); builder.setCustomizedErrorParserIds(null); ((ToolChain)cfg.getToolChain()).setBuilder(builder); if(errParserIds != null && errParserIds.length != 0){ cfg.setErrorParserList(errParserIds); } } } private static boolean convertOldStdMakeToNewStyle(final IProject project, boolean checkOnly, IProgressMonitor monitor, boolean throwExceptions) throws CoreException { try { // ICDescriptor dr = CCorePlugin.getDefault().getCProjectDescription(project, false); // if(dr == null){ // if(throwExceptions) // throw new CoreException(new Status(IStatus.ERROR, // ManagedBuilderCorePlugin.getUniqueIdentifier(), // DataProviderMessages.getString("ProjectConverter.0"))); //$NON-NLS-1$ // return false; // } // // if(!MakeCorePlugin.MAKE_PROJECT_ID.equals(dr.getProjectOwner().getID())){ // if(throwExceptions) // throw new CoreException(new Status(IStatus.ERROR, // ManagedBuilderCorePlugin.getUniqueIdentifier(), // DataProviderMessages.getString("ProjectConverter.1") + dr.getProjectOwner().getID())); //$NON-NLS-1$ // return false; // } ICProjectDescription des = CCorePlugin.getDefault().getProjectDescription(project, false); if(des == null){ if(throwExceptions) throw new CoreException(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.getUniqueIdentifier(), DataProviderMessages.getString("ProjectConverter.9"))); //$NON-NLS-1$ return false; } ICConfigurationDescription cfgs[] = des.getConfigurations(); if(cfgs.length != 1){ if(throwExceptions) throw new CoreException(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.getUniqueIdentifier(), DataProviderMessages.getString("ProjectConverter.2") + cfgs.length)); //$NON-NLS-1$ return false; } if(!CCorePlugin.DEFAULT_PROVIDER_ID.equals(cfgs[0].getBuildSystemId())){ if(throwExceptions) throw new CoreException(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.getUniqueIdentifier(), DataProviderMessages.getString("ProjectConverter.3") + cfgs.length)); //$NON-NLS-1$ return false; } final IProjectDescription eDes = project.getDescription(); String natureIds[] = eDes.getNatureIds(); Set<String> set = new HashSet<String>(Arrays.asList(natureIds)); if(!set.contains(OLD_MAKE_NATURE_ID)){ if(throwExceptions) throw new CoreException(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.getUniqueIdentifier(), DataProviderMessages.getString("ProjectConverter.4") + natureIds.toString())); //$NON-NLS-1$ return false; } if(!checkOnly){ ProjectConverter instance = new ProjectConverter(); ICProjectDescription oldDes = CCorePlugin.getDefault().getProjectDescription(project); if(!instance.canConvertProject(project, MakeCorePlugin.MAKE_PROJECT_ID, oldDes)){ if(throwExceptions) throw new CoreException(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.getUniqueIdentifier(), DataProviderMessages.getString("ProjectConverter.5"))); //$NON-NLS-1$ return false; } final ICProjectDescription newDes = instance.convertProject(project, eDes, MakeCorePlugin.MAKE_PROJECT_ID, oldDes); if(newDes == null){ if(throwExceptions) throw new CoreException(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.getUniqueIdentifier(), DataProviderMessages.getString("ProjectConverter.6"))); //$NON-NLS-1$ return false; } final IWorkspace wsp = ResourcesPlugin.getWorkspace(); wsp.run(new IWorkspaceRunnable(){ public void run(IProgressMonitor monitor) throws CoreException { project.setDescription(eDes, monitor); CCorePlugin.getDefault().setProjectDescription(project, newDes); Job job = new Job(DataProviderMessages.getString("ProjectConverter.7")){ //$NON-NLS-1$ @Override protected IStatus run(IProgressMonitor monitor) { try { ICProjectDescription des = CCorePlugin.getDefault().getProjectDescription(project); convertMakeTargetInfo(project, des, monitor); CCorePlugin.getDefault().setProjectDescription(project, des); } catch (CoreException e) { return e.getStatus(); } return Status.OK_STATUS; } }; job.setRule(wsp.getRoot()); job.schedule(); } }, wsp.getRoot(), IWorkspace.AVOID_UPDATE, monitor); } return true; } catch (CoreException e) { if(throwExceptions) throw e; ManagedBuilderCorePlugin.log(e); } if(throwExceptions) throw new CoreException(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.getUniqueIdentifier(), DataProviderMessages.getString("ProjectConverter.8"))); //$NON-NLS-1$ return false; } public static boolean isOldStyleMakeProject(IProject project){ try { return convertOldStdMakeToNewStyle(project, true, null, false); } catch (CoreException e) { ManagedBuilderCorePlugin.log(e); } return false; } public static void convertOldStdMakeToNewStyle(IProject project, IProgressMonitor monitor) throws CoreException{ convertOldStdMakeToNewStyle(project, false, monitor, true); } private IManagedBuildInfo convertManagedBuildInfo(IProject project, ICProjectDescription newDes) throws CoreException { IManagedBuildInfo info = ManagedBuildManager.getOldStyleBuildInfo(project); synchronized(PROPS){ if(info != null && info.isValid()){ IManagedProject mProj = info.getManagedProject(); IConfiguration cfgs[] = mProj.getConfigurations(); if(cfgs.length != 0){ Configuration cfg; CConfigurationData data; UserDefinedVariableSupplier usrSupplier = UserDefinedVariableSupplier.getInstance(); for(int i = 0; i < cfgs.length; i++){ cfg = (Configuration)cfgs[i]; data = cfg.getConfigurationData(); // try { ICConfigurationDescription cfgDes = newDes.createConfiguration(ManagedBuildManager.CFG_DATA_PROVIDER_ID, data); if(cfg.getConfigurationDescription() != null) { //copy cfg to avoid raise conditions cfg = ConfigurationDataProvider.copyCfg(cfg, cfgDes); cfgDes.setConfigurationData(ManagedBuildManager.CFG_DATA_PROVIDER_ID, cfg.getConfigurationData()); } cfg.setConfigurationDescription(cfgDes); StorableCdtVariables vars = ((ToolChain)cfg.getToolChain()).getResetOldStyleProjectVariables(); if(vars != null){ ICdtVariable vs[] = vars.getMacros(); for(int k = 0; k < vs.length; k++){ usrSupplier.createMacro(vs[k], ICoreVariableContextInfo.CONTEXT_CONFIGURATION, cfgDes); } } // } catch (WriteAccessException e) { // ManagedBuilderCorePlugin.log(e); // } catch (CoreException e) { // ManagedBuilderCorePlugin.log(e); // } cfg.exportArtifactInfo(); } } } else { throw new CoreException(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.getUniqueIdentifier(), DataProviderMessages.getString("ProjectConverter.13"))); //$NON-NLS-1$ } } return info; } }