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 fd2bceeeb25..12ad3f2750a 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 @@ -49,8 +49,6 @@ import javax.xml.transform.stream.StreamResult; import org.eclipse.cdt.core.AbstractCExtension; import org.eclipse.cdt.core.CCorePlugin; -import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider; -import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.CoreModelUtil; import org.eclipse.cdt.core.parser.IScannerInfo; @@ -191,10 +189,6 @@ public class ManagedBuildManager extends AbstractCExtension { public static final String INTERNAL_BUILDER_ID = "org.eclipse.cdt.build.core.internal.builder"; //$NON-NLS-1$ - public static final String MBS_LANGUAGE_SETTINGS_PROVIDER = "org.eclipse.cdt.managedbuilder.core.LanguageSettingsProvider"; - private static final String UI_USER_LANGUAGE_SETTINGS_PROVIDER = "org.eclipse.cdt.ui.user.LanguageSettingsProvider"; - private static final String LANGUAGE_SETTINGS_PROVIDER_DELIMITER = ";"; - private static final String os = Platform.getOS(); private static final String arch = Platform.getOSArch(); private static final String ALL = "all"; //$NON-NLS-1$ @@ -4726,86 +4720,4 @@ public class ManagedBuildManager extends AbstractCExtension { return true; // no target platform - nothing to check. } - private static String getLanguageSettingsProvidersStr(IToolChain toolchain) { - for (;toolchain!=null;toolchain=toolchain.getSuperClass()) { - String providersIdsStr = toolchain.getDefaultLanguageSettingsProvidersIds(); - if (providersIdsStr!=null) { - return providersIdsStr; - } - } - return ""; - } - - private static String getLanguageSettingsProvidersStr(IConfiguration cfg) { - for (;cfg!=null;cfg=cfg.getParent()) { - String providersIdsStr = cfg.getDefaultLanguageSettingsProvidersIds(); - if (providersIdsStr!=null) { - return providersIdsStr; - } - } - return ""; - } - - public static List getLanguageSettingsProviders(IConfiguration cfg) { - List providers = new ArrayList(); - - String providersIdsStr = getLanguageSettingsProvidersStr(cfg); - if (providersIdsStr!=null) { - if (providersIdsStr.contains("${Toolchain}")) { - IToolChain toolchain = cfg.getToolChain(); - String toolchainProvidersIds = getLanguageSettingsProvidersStr(toolchain); - if (toolchainProvidersIds==null) { - toolchainProvidersIds=""; - } - providersIdsStr = providersIdsStr.replaceAll("\\$\\{Toolchain\\}", toolchainProvidersIds); - } - List providersIds = Arrays.asList(providersIdsStr.split(LANGUAGE_SETTINGS_PROVIDER_DELIMITER)); - for (String id : providersIds) { - id = id.trim(); - ILanguageSettingsProvider provider = null; - if (id.startsWith("*")) { - id = id.substring(1); - provider = LanguageSettingsManager.getWorkspaceProvider(id); - } else if (id.startsWith("-")) { - id = id.substring(1); - for (ILanguageSettingsProvider pr : providers) { - if (pr.getId().equals(id)) { - providers.remove(pr); - // Has to break as the collection is invalidated - // TODO: remove all elements or better use unique list - break; - } - } - } else if (id.length()>0){ - provider = LanguageSettingsManager.getExtensionProviderCopy(id); - } - if (provider!=null) { - providers.add(provider); - } - } - } - - if (providers.isEmpty()) { - // Add MBS provider for unsuspecting toolchains (backward compatibility) - ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(MBS_LANGUAGE_SETTINGS_PROVIDER); - providers.add(provider); - } - - if (!isProviderThere(providers, UI_USER_LANGUAGE_SETTINGS_PROVIDER)) { - ILanguageSettingsProvider provider = LanguageSettingsManager.getExtensionProviderCopy(UI_USER_LANGUAGE_SETTINGS_PROVIDER); - providers.add(0, provider); - } - - return providers; - } - - private static boolean isProviderThere(List providers, String id) { - for (ILanguageSettingsProvider provider : providers) { - if (provider.getId().equals(id)) { - return true; - } - } - return false; - } - } diff --git a/build/org.eclipse.cdt.managedbuilder.gnu.ui/plugin.xml b/build/org.eclipse.cdt.managedbuilder.gnu.ui/plugin.xml index fe404978003..7a0e84ae36e 100644 --- a/build/org.eclipse.cdt.managedbuilder.gnu.ui/plugin.xml +++ b/build/org.eclipse.cdt.managedbuilder.gnu.ui/plugin.xml @@ -1672,7 +1672,7 @@ @@ -1740,7 +1740,7 @@ configurationEnvironmentSupplier="org.eclipse.cdt.managedbuilder.gnu.cygwin.GnuCygwinConfigurationEnvironmentSupplier" id="cdt.managedbuild.toolchain.gnu.cygwin.base" isToolChainSupported="org.eclipse.cdt.managedbuilder.gnu.cygwin.IsGnuCygwinToolChainSupported" - languageSettingsProviders="org.eclipse.cdt.make.core.build.command.parser.gcc;*org.eclipse.cdt.managedbuilder.core.cygwin.gcc.specs.detector" + languageSettingsProviders="org.eclipse.cdt.make.core.build.command.parser.gcc;org.eclipse.cdt.managedbuilder.core.cygwin.gcc.specs.detector" name="%ToolChainName.Cygwin" osList="win32" targetTool="cdt.managedbuild.tool.gnu.cpp.linker.cygwin.base;cdt.managedbuild.tool.gnu.c.linker.cygwin.base;cdt.managedbuild.tool.gnu.archiver"> @@ -1810,7 +1810,7 @@ configurationEnvironmentSupplier="org.eclipse.cdt.managedbuilder.gnu.mingw.MingwEnvironmentVariableSupplier" id="cdt.managedbuild.toolchain.gnu.mingw.base" isToolChainSupported="org.eclipse.cdt.managedbuilder.gnu.mingw.MingwIsToolChainSupported" - languageSettingsProviders="org.eclipse.cdt.make.core.build.command.parser.gcc;*org.eclipse.cdt.managedbuilder.core.gcc.specs.detector" + languageSettingsProviders="org.eclipse.cdt.make.core.build.command.parser.gcc;org.eclipse.cdt.managedbuilder.core.gcc.specs.detector" name="%ToolChainName.MinGW" osList="win32" targetTool="cdt.managedbuild.tool.gnu.cpp.linker.mingw.base;cdt.managedbuild.tool.gnu.c.linker.mingw.base;cdt.managedbuild.tool.gnu.archiver"> diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/MBSWizardHandler.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/MBSWizardHandler.java index e8f532e79c6..5139b36cfbb 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/MBSWizardHandler.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/MBSWizardHandler.java @@ -33,6 +33,7 @@ import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.core.settings.model.ICProjectDescriptionManager; import org.eclipse.cdt.core.settings.model.extension.CConfigurationData; import org.eclipse.cdt.core.templateengine.process.ProcessFailureException; +import org.eclipse.cdt.internal.ui.language.settings.providers.LanguageSettingsProviderAssociationManager; import org.eclipse.cdt.internal.ui.wizards.ICDTCommonProjectWizard; import org.eclipse.cdt.managedbuilder.buildproperties.IBuildProperty; import org.eclipse.cdt.managedbuilder.buildproperties.IBuildPropertyValue; @@ -91,6 +92,11 @@ public class MBSWizardHandler extends CWizardHandler { private static final String PROPERTY = "org.eclipse.cdt.build.core.buildType"; //$NON-NLS-1$ private static final String PROP_VAL = PROPERTY + ".debug"; //$NON-NLS-1$ + + private static final String UI_USER_LANGUAGE_SETTINGS_PROVIDER = "org.eclipse.cdt.ui.user.LanguageSettingsProvider"; + public static final String MBS_LANGUAGE_SETTINGS_PROVIDER = "org.eclipse.cdt.managedbuilder.core.LanguageSettingsProvider"; + private static final String LANGUAGE_SETTINGS_PROVIDER_DELIMITER = ";"; + private static final String tooltip = Messages.CWizardHandler_1 + Messages.CWizardHandler_2 + @@ -550,13 +556,6 @@ public class MBSWizardHandler extends CWizardHandler { } private void setProjectDescription(IProject project, boolean defaults, boolean onFinish, IProgressMonitor monitor) throws CoreException { - boolean isTryingNewSD = false; - IWizardPage page = getStartingPage(); - if (page instanceof CDTMainWizardPage) { - CDTMainWizardPage mainWizardPage = (CDTMainWizardPage)page; - isTryingNewSD = mainWizardPage.isTryingNewSD(); - } - ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager(); ICProjectDescription des = mngr.createProjectDescription(project, false, !onFinish); ManagedBuildInfo info = ManagedBuildManager.createBuildInfo(project); @@ -604,16 +603,21 @@ public class MBSWizardHandler extends CWizardHandler { cfgFirst = cfgDes; if (cfgDes instanceof ILanguageSettingsProvidersKeeper) { - ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, isTryingNewSD); - if (isTryingNewSD) { - List providers = ManagedBuildManager.getLanguageSettingsProviders(config); - ((ILanguageSettingsProvidersKeeper) cfgDes).setLanguageSettingProviders(providers); - } else { - ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(ManagedBuildManager.MBS_LANGUAGE_SETTINGS_PROVIDER); - List providers = new ArrayList(); - providers.add(provider); - ((ILanguageSettingsProvidersKeeper) cfgDes).setLanguageSettingProviders(providers); + boolean isTryingNewSD = false; + IWizardPage page = getStartingPage(); + if (page instanceof CDTMainWizardPage) { + isTryingNewSD = ((CDTMainWizardPage)page).isTryingNewSD(); } + + ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, isTryingNewSD); + List providers; + if (isTryingNewSD) { + providers = MBSWizardHandler.getLanguageSettingsProviders(config); + } else { + providers = new ArrayList(); + providers.add(LanguageSettingsManager.getWorkspaceProvider(MBSWizardHandler.MBS_LANGUAGE_SETTINGS_PROVIDER)); + } + ((ILanguageSettingsProvidersKeeper) cfgDes).setLanguageSettingProviders(providers); } else { ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, false); } @@ -861,5 +865,91 @@ public class MBSWizardHandler extends CWizardHandler { return super.canFinish(); } + private static String getLanguageSettingsProvidersStr(IToolChain toolchain) { + for (;toolchain!=null;toolchain=toolchain.getSuperClass()) { + String providersIdsStr = toolchain.getDefaultLanguageSettingsProvidersIds(); + if (providersIdsStr!=null) { + return providersIdsStr; + } + } + return ""; + } + + private static String getLanguageSettingsProvidersStr(IConfiguration cfg) { + for (;cfg!=null;cfg=cfg.getParent()) { + String providersIdsStr = cfg.getDefaultLanguageSettingsProvidersIds(); + if (providersIdsStr!=null) { + return providersIdsStr; + } + } + return ""; + } + + public static List getLanguageSettingsProviders(IConfiguration cfg) { + List providers = new ArrayList(); + + String providersIdsStr = getLanguageSettingsProvidersStr(cfg); + if (providersIdsStr!=null) { + if (providersIdsStr.contains("${Toolchain}")) { + IToolChain toolchain = cfg.getToolChain(); + String toolchainProvidersIds = getLanguageSettingsProvidersStr(toolchain); + if (toolchainProvidersIds==null) { + toolchainProvidersIds=""; + } + providersIdsStr = providersIdsStr.replaceAll("\\$\\{Toolchain\\}", toolchainProvidersIds); + } + List providersIds = Arrays.asList(providersIdsStr.split(LANGUAGE_SETTINGS_PROVIDER_DELIMITER)); + for (String id : providersIds) { + id = id.trim(); + ILanguageSettingsProvider provider = null; + if (id.startsWith("-")) { + id = id.substring(1); + for (ILanguageSettingsProvider pr : providers) { + if (pr.getId().equals(id)) { + providers.remove(pr); + // Has to break as the collection is invalidated + // TODO: remove all elements or better use unique list + break; + } + } + } else if (id.length()>0){ + // TODO - look into saving on copying, need to figure out "shared" attribute from extension provider directly + ILanguageSettingsProvider providerExt = LanguageSettingsManager.getExtensionProviderCopy(id); + if (LanguageSettingsProviderAssociationManager.shouldBeShared(providerExt)) { + provider = LanguageSettingsManager.getWorkspaceProvider(id); + } else { + provider = providerExt; + } + } + if (provider!=null) { + providers.add(provider); + } + } + } + + + if (providers.isEmpty()) { + // Add MBS provider for unsuspecting toolchains (backward compatibility) + ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(MBS_LANGUAGE_SETTINGS_PROVIDER); + providers.add(provider); + } + + if (!isProviderThere(providers, UI_USER_LANGUAGE_SETTINGS_PROVIDER)) { + ILanguageSettingsProvider provider = LanguageSettingsManager.getExtensionProviderCopy(UI_USER_LANGUAGE_SETTINGS_PROVIDER); + providers.add(0, provider); + } + + return providers; + } + + private static boolean isProviderThere(List providers, String id) { + for (ILanguageSettingsProvider provider : providers) { + if (provider.getId().equals(id)) { + return true; + } + } + return false; + } + } diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewMakeProjFromExisting.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewMakeProjFromExisting.java index 19a71657fc4..cf44315d0c6 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewMakeProjFromExisting.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewMakeProjFromExisting.java @@ -122,15 +122,14 @@ public class NewMakeProjFromExisting extends Wizard implements IImportWizard, IN if (cfgDes instanceof ILanguageSettingsProvidersKeeper) { ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, isTryingNewSD); + List providers; if (isTryingNewSD) { - List providers = ManagedBuildManager.getLanguageSettingsProviders(config); - ((ILanguageSettingsProvidersKeeper) cfgDes).setLanguageSettingProviders(providers); + providers = MBSWizardHandler.getLanguageSettingsProviders(config); } else { - ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(ManagedBuildManager.MBS_LANGUAGE_SETTINGS_PROVIDER); - List providers = new ArrayList(); - providers.add(provider); - ((ILanguageSettingsProvidersKeeper) cfgDes).setLanguageSettingProviders(providers); + providers = new ArrayList(); + providers.add(LanguageSettingsManager.getWorkspaceProvider(MBSWizardHandler.MBS_LANGUAGE_SETTINGS_PROVIDER)); } + ((ILanguageSettingsProvidersKeeper) cfgDes).setLanguageSettingProviders(providers); } else { ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, false); } diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/STDWizardHandler.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/STDWizardHandler.java index 6ac895391ed..5232b3a0d7b 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/STDWizardHandler.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/STDWizardHandler.java @@ -82,13 +82,6 @@ public class STDWizardHandler extends MBSWizardHandler { private void setProjectDescription(IProject project, boolean defaults, boolean onFinish, IProgressMonitor monitor) throws CoreException { - boolean isTryingNewSD = false; - IWizardPage page = getStartingPage(); - if (page instanceof CDTMainWizardPage) { - CDTMainWizardPage mainWizardPage = (CDTMainWizardPage)page; - isTryingNewSD = mainWizardPage.isTryingNewSD(); - } - ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager(); ICProjectDescription des = mngr.createProjectDescription(project, false, !onFinish); ManagedBuildInfo info = ManagedBuildManager.createBuildInfo(project); @@ -120,16 +113,21 @@ public class STDWizardHandler extends MBSWizardHandler { ICConfigurationDescription cfgDes = des.createConfiguration(ManagedBuildManager.CFG_DATA_PROVIDER_ID, data); if (cfgDes instanceof ILanguageSettingsProvidersKeeper) { - ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, isTryingNewSD); - if (isTryingNewSD) { - List providers = ManagedBuildManager.getLanguageSettingsProviders(cfg); - ((ILanguageSettingsProvidersKeeper) cfgDes).setLanguageSettingProviders(providers); - } else { - ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(ManagedBuildManager.MBS_LANGUAGE_SETTINGS_PROVIDER); - List providers = new ArrayList(); - providers.add(provider); - ((ILanguageSettingsProvidersKeeper) cfgDes).setLanguageSettingProviders(providers); + boolean isTryingNewSD = false; + IWizardPage page = getStartingPage(); + if (page instanceof CDTMainWizardPage) { + isTryingNewSD = ((CDTMainWizardPage)page).isTryingNewSD(); } + + ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, isTryingNewSD); + List providers; + if (isTryingNewSD) { + providers = MBSWizardHandler.getLanguageSettingsProviders(cfg); + } else { + providers = new ArrayList(); + providers.add(LanguageSettingsManager.getWorkspaceProvider(MBSWizardHandler.MBS_LANGUAGE_SETTINGS_PROVIDER)); + } + ((ILanguageSettingsProvidersKeeper) cfgDes).setLanguageSettingProviders(providers); } else { ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, false); } diff --git a/xlc/org.eclipse.cdt.managedbuilder.xlc.ui/plugin.xml b/xlc/org.eclipse.cdt.managedbuilder.xlc.ui/plugin.xml index 1a3575471fd..5b40309bd7c 100644 --- a/xlc/org.eclipse.cdt.managedbuilder.xlc.ui/plugin.xml +++ b/xlc/org.eclipse.cdt.managedbuilder.xlc.ui/plugin.xml @@ -534,7 +534,7 @@ id="cdt.managedbuild.toolchain.xlc.exe.debug" name="%ToolChainName.Dbg" osList="all" - languageSettingsProviders="org.eclipse.cdt.managedbuilder.xlc.core.xlc.build.command.parser;*org.eclipse.cdt.managedbuilder.xlc.core.xlc.specs.detector" + languageSettingsProviders="org.eclipse.cdt.managedbuilder.xlc.core.xlc.build.command.parser;org.eclipse.cdt.managedbuilder.xlc.core.xlc.specs.detector" targetTool="cdt.managedbuild.tool.xlc.c.linker.exe.debug;cdt.managedbuild.tool.xlc.cpp.linker.exe.debug">