1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Use "shared" attribute from LanguageSettingsProviderAssociation

extension rather than star "*" in toolchain definition.
This commit is contained in:
Andrew Gvozdev 2011-12-08 12:23:29 -05:00
parent 6a4136bf96
commit c9b2608713
6 changed files with 134 additions and 135 deletions

View file

@ -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<ILanguageSettingsProvider> getLanguageSettingsProviders(IConfiguration cfg) {
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
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<String> 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<ILanguageSettingsProvider> providers, String id) {
for (ILanguageSettingsProvider provider : providers) {
if (provider.getId().equals(id)) {
return true;
}
}
return false;
}
}

View file

@ -1672,7 +1672,7 @@
<toolChain
archList="all"
id="cdt.managedbuild.toolchain.gnu.base"
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.Linux"
osList="linux,hpux,aix,qnx"
targetTool="cdt.managedbuild.tool.gnu.c.linker;cdt.managedbuild.tool.gnu.cpp.linker;cdt.managedbuild.tool.gnu.archiver">
@ -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">

View file

@ -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<ILanguageSettingsProvider> providers = ManagedBuildManager.getLanguageSettingsProviders(config);
((ILanguageSettingsProvidersKeeper) cfgDes).setLanguageSettingProviders(providers);
} else {
ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(ManagedBuildManager.MBS_LANGUAGE_SETTINGS_PROVIDER);
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
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<ILanguageSettingsProvider> providers;
if (isTryingNewSD) {
providers = MBSWizardHandler.getLanguageSettingsProviders(config);
} else {
providers = new ArrayList<ILanguageSettingsProvider>();
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<ILanguageSettingsProvider> getLanguageSettingsProviders(IConfiguration cfg) {
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
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<String> 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<ILanguageSettingsProvider> providers, String id) {
for (ILanguageSettingsProvider provider : providers) {
if (provider.getId().equals(id)) {
return true;
}
}
return false;
}
}

View file

@ -122,15 +122,14 @@ public class NewMakeProjFromExisting extends Wizard implements IImportWizard, IN
if (cfgDes instanceof ILanguageSettingsProvidersKeeper) {
ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, isTryingNewSD);
List<ILanguageSettingsProvider> providers;
if (isTryingNewSD) {
List<ILanguageSettingsProvider> providers = ManagedBuildManager.getLanguageSettingsProviders(config);
((ILanguageSettingsProvidersKeeper) cfgDes).setLanguageSettingProviders(providers);
providers = MBSWizardHandler.getLanguageSettingsProviders(config);
} else {
ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(ManagedBuildManager.MBS_LANGUAGE_SETTINGS_PROVIDER);
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(provider);
((ILanguageSettingsProvidersKeeper) cfgDes).setLanguageSettingProviders(providers);
providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(LanguageSettingsManager.getWorkspaceProvider(MBSWizardHandler.MBS_LANGUAGE_SETTINGS_PROVIDER));
}
((ILanguageSettingsProvidersKeeper) cfgDes).setLanguageSettingProviders(providers);
} else {
ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, false);
}

View file

@ -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<ILanguageSettingsProvider> providers = ManagedBuildManager.getLanguageSettingsProviders(cfg);
((ILanguageSettingsProvidersKeeper) cfgDes).setLanguageSettingProviders(providers);
} else {
ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(ManagedBuildManager.MBS_LANGUAGE_SETTINGS_PROVIDER);
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
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<ILanguageSettingsProvider> providers;
if (isTryingNewSD) {
providers = MBSWizardHandler.getLanguageSettingsProviders(cfg);
} else {
providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(LanguageSettingsManager.getWorkspaceProvider(MBSWizardHandler.MBS_LANGUAGE_SETTINGS_PROVIDER));
}
((ILanguageSettingsProvidersKeeper) cfgDes).setLanguageSettingProviders(providers);
} else {
ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, false);
}

View file

@ -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">
<targetPlatform
id="cdt.managedbuild.target.xlc.platform.exe.debug"
@ -600,7 +600,7 @@
id="cdt.managedbuild.toolchain.xlc.exe.release"
name="%ToolChainName.Rel"
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.release;cdt.managedbuild.tool.xlc.cpp.linker.exe.release">
<targetPlatform
id="cdt.managedbuild.target.xlc.platform.exe.release"
@ -671,7 +671,7 @@
id="cdt.managedbuild.config.xlc.so.debug">
<toolChain
id="cdt.managedbuild.toolchain.xlc.so.debug"
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"
name="%ToolChainName.Dbg"
targetTool="cdt.managedbuild.tool.xlc.c.linker.so.debug;cdt.managedbuild.tool.xlc.cpp.linker.so.debug">
<targetPlatform
@ -735,7 +735,7 @@
id="cdt.managedbuild.config.xlc.so.release">
<toolChain
id="cdt.managedbuild.toolchain.xlc.so.release"
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"
name="%ToolChainName.Rel"
targetTool="cdt.managedbuild.tool.xlc.c.linker.so.release;cdt.managedbuild.tool.xlc.cpp.linker.so.release">
<targetPlatform
@ -807,7 +807,7 @@
id="cdt.managedbuild.config.xlc.lib.debug">
<toolChain
id="cdt.managedbuild.toolchain.xlc.lib.debug"
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"
name="%ToolChainName.Dbg"
targetTool="cdt.managedbuild.tool.xlc.archiver.lib.debug">
<targetPlatform
@ -867,7 +867,7 @@
id="cdt.managedbuild.config.xlc.lib.release">
<toolChain
id="cdt.managedbuild.toolchain.xlc.lib.release"
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"
name="%ToolChainName.Rel"
targetTool="cdt.managedbuild.tool.xlc.archiver.lib.release">
<targetPlatform