From 6856d55b68a7b7f82ab1b9e56a7b7462029b748f Mon Sep 17 00:00:00 2001 From: Andrew Gvozdev Date: Sat, 7 Sep 2013 06:14:09 -0400 Subject: [PATCH] bug 416628: "Export" of entries of language settings providers to referencing projects - added provider to do that --- .../org.eclipse.cdt.autotools.core/plugin.xml | 2 +- .../LanguageSettingsProvidersMBSTest.java | 24 +- .../plugin.xml | 4 +- .../MBSLanguageSettingsProvider.java | 3 + .../plugin.xml | 10 +- ...AllLanguageSettingsProvidersCoreTests.java | 1 + .../LanguageSettingsManagerTests.java | 6 +- ...ttingsProviderReferencedProjectsTests.java | 210 ++++++++++++++++++ .../ScannerDiscoveryLegacySupport.java | 3 +- .../LanguageSettingsExtensionManager.java | 27 +-- ...encedProjectsLanguageSettingsProvider.java | 60 +++++ core/org.eclipse.cdt.core/plugin.properties | 1 + core/org.eclipse.cdt.core/plugin.xml | 5 + core/org.eclipse.cdt.ui/plugin.xml | 6 + .../plugin.xml | 14 +- .../plugin.xml | 12 +- 16 files changed, 349 insertions(+), 39 deletions(-) create mode 100644 core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsProviderReferencedProjectsTests.java create mode 100644 core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/ReferencedProjectsLanguageSettingsProvider.java diff --git a/build/org.eclipse.cdt.autotools.core/plugin.xml b/build/org.eclipse.cdt.autotools.core/plugin.xml index 7f81a791031..4b55f8a215f 100644 --- a/build/org.eclipse.cdt.autotools.core/plugin.xml +++ b/build/org.eclipse.cdt.autotools.core/plugin.xml @@ -392,7 +392,7 @@ cleanCommand="rm -rf" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser" id="org.eclipse.linuxtools.cdt.autotools.core.configuration.build" - languageSettingsProviders="org.eclipse.cdt.ui.UserLanguageSettingsProvider;org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider;${Toolchain}" + languageSettingsProviders="org.eclipse.cdt.ui.UserLanguageSettingsProvider;org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider;org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider;${Toolchain}" name="%Configuration.build.name"> entries = provider.getSettingEntries(null, null, null); + assertEquals(null, entries); + } + /** * Test new GNU Executable project. */ @@ -74,18 +87,25 @@ public class LanguageSettingsProvidersMBSTest extends BaseTestCase { { ILanguageSettingsProvider provider = providers.get(1); String id = provider.getId(); - assertEquals(MBS_LANGUAGE_SETTINGS_PROVIDER_ID, id); + assertEquals(REFERENCED_PROJECTS_PROVIDER_ID, id); assertEquals(true, LanguageSettingsManager.isPreferShared(id)); assertEquals(true, LanguageSettingsManager.isWorkspaceProvider(provider)); } { ILanguageSettingsProvider provider = providers.get(2); String id = provider.getId(); + assertEquals(MBS_LANGUAGE_SETTINGS_PROVIDER_ID, id); + assertEquals(true, LanguageSettingsManager.isPreferShared(id)); + assertEquals(true, LanguageSettingsManager.isWorkspaceProvider(provider)); + } + { + ILanguageSettingsProvider provider = providers.get(3); + String id = provider.getId(); assertEquals(GCC_SPECS_DETECTOR_ID, id); assertEquals(true, LanguageSettingsManager.isPreferShared(id)); assertEquals(true, LanguageSettingsManager.isWorkspaceProvider(provider)); } - assertEquals(3, providers.size()); + assertEquals(4, providers.size()); } } diff --git a/build/org.eclipse.cdt.managedbuilder.core/plugin.xml b/build/org.eclipse.cdt.managedbuilder.core/plugin.xml index 54cbe1d6e54..63665251f2a 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/plugin.xml +++ b/build/org.eclipse.cdt.managedbuilder.core/plugin.xml @@ -308,13 +308,13 @@ getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) { + if (cfgDescription == null || rc == null) { + return null; + } IPath projectPath = rc.getProjectRelativePath(); ICLanguageSetting[] languageSettings = null; diff --git a/build/org.eclipse.cdt.managedbuilder.gnu.ui/plugin.xml b/build/org.eclipse.cdt.managedbuilder.gnu.ui/plugin.xml index 02808dff5f4..52513e7cc2b 100644 --- a/build/org.eclipse.cdt.managedbuilder.gnu.ui/plugin.xml +++ b/build/org.eclipse.cdt.managedbuilder.gnu.ui/plugin.xml @@ -2168,7 +2168,7 @@ + languageSettingsProviders="org.eclipse.cdt.ui.UserLanguageSettingsProvider;org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider;org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider;${Toolchain};-org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"> + languageSettingsProviders="org.eclipse.cdt.ui.UserLanguageSettingsProvider;org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider;org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider;${Toolchain};-org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"> + languageSettingsProviders="org.eclipse.cdt.ui.UserLanguageSettingsProvider;org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider;org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider;${Toolchain};-org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"> + languageSettingsProviders="org.eclipse.cdt.ui.UserLanguageSettingsProvider;org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider;org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider;${Toolchain};-org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"> + languageSettingsProviders="org.eclipse.cdt.ui.UserLanguageSettingsProvider;org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider;org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider;${Toolchain};-org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders(); assertEquals(ScannerDiscoveryLegacySupport.USER_LANGUAGE_SETTINGS_PROVIDER_ID, providers.get(0).getId()); - assertEquals(ScannerDiscoveryLegacySupport.MBS_LANGUAGE_SETTINGS_PROVIDER_ID, providers.get(1).getId()); - assertEquals(2, providers.size()); + assertEquals(ReferencedProjectsLanguageSettingsProvider.ID, providers.get(1).getId()); + assertEquals(ScannerDiscoveryLegacySupport.MBS_LANGUAGE_SETTINGS_PROVIDER_ID, providers.get(2).getId()); + assertEquals(3, providers.size()); } { // set test provider diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsProviderReferencedProjectsTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsProviderReferencedProjectsTests.java new file mode 100644 index 00000000000..35fdc7a1eae --- /dev/null +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsProviderReferencedProjectsTests.java @@ -0,0 +1,210 @@ +/******************************************************************************* + * Copyright (c) 2013 Andrew Gvozdev 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: + * Andrew Gvozdev - Initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.core.language.settings.providers; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.model.CoreModel; +import org.eclipse.cdt.core.settings.model.CIncludePathEntry; +import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; +import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; +import org.eclipse.cdt.core.settings.model.ICProjectDescription; +import org.eclipse.cdt.core.settings.model.ICProjectDescriptionManager; +import org.eclipse.cdt.core.settings.model.ICSettingEntry; +import org.eclipse.cdt.core.settings.model.util.CDataUtil; +import org.eclipse.cdt.core.testplugin.ResourceHelper; +import org.eclipse.cdt.core.testplugin.util.BaseTestCase; +import org.eclipse.cdt.internal.core.language.settings.providers.ReferencedProjectsLanguageSettingsProvider; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.CoreException; + +/** + * Test cases testing ReferencedProjectsLanguageSettingsProvider functionality + */ +public class LanguageSettingsProviderReferencedProjectsTests extends BaseTestCase { + /** + * Constructor. + * @param name - name of the test. + */ + public LanguageSettingsProviderReferencedProjectsTests(String name) { + super(name); + + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + } + + @Override + protected void tearDown() throws Exception { + super.tearDown(); // includes ResourceHelper cleanup + } + + /** + * @return - new TestSuite. + */ + public static TestSuite suite() { + return new TestSuite(LanguageSettingsProviderReferencedProjectsTests.class); + } + + /** + * main function of the class. + * + * @param args - arguments + */ + public static void main(String[] args) { + junit.textui.TestRunner.run(suite()); + } + + /** + * Helper method to fetch configuration descriptions. + */ + private ICConfigurationDescription[] getConfigurationDescriptions(IProject project) { + CoreModel coreModel = CoreModel.getDefault(); + ICProjectDescriptionManager mngr = coreModel.getProjectDescriptionManager(); + // project description + ICProjectDescription projectDescription = mngr.getProjectDescription(project, false); + assertNotNull(projectDescription); + assertEquals(1, projectDescription.getConfigurations().length); + // configuration description + ICConfigurationDescription[] cfgDescriptions = projectDescription.getConfigurations(); + return cfgDescriptions; + } + + /** + * Helper method to set reference project. + */ + private void setReference(IProject project, final IProject projectReferenced) throws CoreException { + { + CoreModel coreModel = CoreModel.getDefault(); + ICProjectDescriptionManager mngr = coreModel.getProjectDescriptionManager(); + // project description + ICProjectDescription projectDescription = mngr.getProjectDescription(project); + assertNotNull(projectDescription); + assertEquals(1, projectDescription.getConfigurations().length); + // configuration description + ICConfigurationDescription[] cfgDescriptions = projectDescription.getConfigurations(); + ICConfigurationDescription cfgDescription = cfgDescriptions[0]; + + final ICConfigurationDescription cfgDescriptionReferenced = getConfigurationDescriptions(projectReferenced)[0]; + cfgDescription.setReferenceInfo(new HashMap() {{ put(projectReferenced.getName(), cfgDescriptionReferenced.getId()); }}); + coreModel.setProjectDescription(project, projectDescription); + } + + { + // doublecheck that it's set as expected + ICConfigurationDescription[] cfgDescriptions = getConfigurationDescriptions(project); + ICConfigurationDescription cfgDescription = cfgDescriptions[0]; + Map refs = cfgDescription.getReferenceInfo(); + assertEquals(1, refs.size()); + Set referencedProjectsNames = new LinkedHashSet(refs.keySet()); + assertEquals(projectReferenced.getName(), referencedProjectsNames.toArray()[0]); + } + + } + + /** + * Test that null arguments don't crash the provider. + */ + public void testNulls() throws Exception { + ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(ReferencedProjectsLanguageSettingsProvider.ID); + assertNotNull(provider); + List entries = provider.getSettingEntries(null, null, null); + assertEquals(null, entries); + } + + /** + * Test main functionality of ReferencedProjectsLanguageSettingsProvider. + */ + public void testReferencedProjectProvider() throws Exception { + // Create model project and accompanied descriptions + String projectName = getName(); + IProject project = ResourceHelper.createCDTProjectWithConfig(projectName); + IProject nonReferencedProject = ResourceHelper.createCDTProjectWithConfig(projectName+"-non-referenced"); + IProject referencedProject = ResourceHelper.createCDTProjectWithConfig(projectName+"-referenced"); + setReference(project, referencedProject); + + // get cfgDescription and language to work with + ICConfigurationDescription[] cfgDescriptions = getConfigurationDescriptions(project); + ICConfigurationDescription cfgDescription = cfgDescriptions[0]; + + { + // doublecheck that provider for referenced projects is set in the configuration + ILanguageSettingsProvider refProjectsProvider = LanguageSettingsManager.getWorkspaceProvider(ReferencedProjectsLanguageSettingsProvider.ID); + assertNotNull(refProjectsProvider); + List providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders(); + assertTrue(providers.contains(refProjectsProvider)); + } + + // Check that no setting entries are set initially + { + List entries = LanguageSettingsManager.getSettingEntriesByKind(cfgDescription, project, null, ICSettingEntry.ALL); + assertEquals(0, entries.size()); + } + + // Add an entry into a non-referenced project + CIncludePathEntry nonRefEntry = CDataUtil.createCIncludePathEntry("non-referenced-exported", ICSettingEntry.EXPORTED); + { + ICConfigurationDescription[] nonRefCfgDescriptions = getConfigurationDescriptions(nonReferencedProject); + ICConfigurationDescription nonRefCfgDescription = nonRefCfgDescriptions[0]; + List providersNonRef = ((ILanguageSettingsProvidersKeeper) nonRefCfgDescription).getLanguageSettingProviders(); + // get user provider which is the first one + ILanguageSettingsProvider userProviderNonRef = providersNonRef.get(0); + assertEquals(ScannerDiscoveryLegacySupport.USER_LANGUAGE_SETTINGS_PROVIDER_ID, userProviderNonRef.getId()); + assertTrue(userProviderNonRef instanceof LanguageSettingsGenericProvider); + // add sample entries + ArrayList entries = new ArrayList(); + entries.add(nonRefEntry); + ((LanguageSettingsGenericProvider) userProviderNonRef).setSettingEntries(null, null, null, entries); + } + // Confirm that that does not add entries to the main project + { + List entries = LanguageSettingsManager.getSettingEntriesByKind(cfgDescription, project, null, ICSettingEntry.ALL); + assertEquals(0, entries.size()); + } + + CIncludePathEntry refEntry = CDataUtil.createCIncludePathEntry("referenced-exported", ICSettingEntry.EXPORTED); + // Add entries into a referenced project + { + ICConfigurationDescription[] refCfgDescriptions = getConfigurationDescriptions(referencedProject); + ICConfigurationDescription refCfgDescription = refCfgDescriptions[0]; + List providersRef = ((ILanguageSettingsProvidersKeeper) refCfgDescription).getLanguageSettingProviders(); + // get user provider which is the first one + ILanguageSettingsProvider userProviderRef = providersRef.get(0); + assertEquals(ScannerDiscoveryLegacySupport.USER_LANGUAGE_SETTINGS_PROVIDER_ID, userProviderRef.getId()); + assertTrue(userProviderRef instanceof LanguageSettingsGenericProvider); + // add sample entries + ArrayList entries = new ArrayList(); + CIncludePathEntry refEntryNotExported = CDataUtil.createCIncludePathEntry("referenced-not-exported", 0); + entries.add(refEntry); + entries.add(refEntryNotExported); + ((LanguageSettingsGenericProvider) userProviderRef).setSettingEntries(null, null, null, entries); + List entriesActual = LanguageSettingsManager.getSettingEntriesByKind(refCfgDescription, project, null, ICSettingEntry.ALL); + assertEquals(entries, entriesActual); + } + // Check that the new entries from referenced project made it to the main project + { + List entries = LanguageSettingsManager.getSettingEntriesByKind(cfgDescription, project, null, ICSettingEntry.ALL); + assertEquals(CDataUtil.createCIncludePathEntry(refEntry.getName(), 0), entries.get(0)); + assertEquals(1, entries.size()); + } + } + +} diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ScannerDiscoveryLegacySupport.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ScannerDiscoveryLegacySupport.java index 0372ba62cac..ab7b58ea514 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ScannerDiscoveryLegacySupport.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ScannerDiscoveryLegacySupport.java @@ -21,6 +21,7 @@ import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.internal.core.LocalProjectScope; +import org.eclipse.cdt.internal.core.language.settings.providers.ReferencedProjectsLanguageSettingsProvider; import org.eclipse.cdt.internal.core.language.settings.providers.ScannerInfoExtensionLanguageSettingsProvider; import org.eclipse.cdt.internal.core.model.PathEntryManager; import org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager; @@ -212,7 +213,7 @@ public class ScannerDiscoveryLegacySupport { legacyProviderId = PATH_ENTRY_MANAGER_LANGUAGE_SETTINGS_PROVIDER_ID; } - return new String[] {USER_LANGUAGE_SETTINGS_PROVIDER_ID, legacyProviderId}; + return new String[] {USER_LANGUAGE_SETTINGS_PROVIDER_ID, ReferencedProjectsLanguageSettingsProvider.ID, legacyProviderId}; } /** diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsExtensionManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsExtensionManager.java index 9fda16c0ca5..ce81bd4acb7 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsExtensionManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsExtensionManager.java @@ -12,13 +12,14 @@ package org.eclipse.cdt.internal.core.language.settings.providers; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.TreeSet; import org.eclipse.cdt.core.AbstractExecutableExtensionBase; import org.eclipse.cdt.core.CCorePlugin; @@ -81,20 +82,20 @@ public class LanguageSettingsExtensionManager { * Load language settings providers contributed via the extension point. */ synchronized private static void loadProviderExtensions() { - // sort by name - the providers defined via extensions are kept in separate list sorted by name - Set sortedProviders = new TreeSet( - new Comparator() { - @Override - public int compare(ILanguageSettingsProvider pr1, ILanguageSettingsProvider pr2) { - return pr1.getName().compareTo(pr2.getName()); - } - } - ); + List providers = new ArrayList(); + loadProviderExtensions(Platform.getExtensionRegistry(), providers); - loadProviderExtensions(Platform.getExtensionRegistry(), sortedProviders); + // sort by name - the providers defined via extensions are kept in separate list sorted by name + Collections.sort(providers, new Comparator() { + @Override + public int compare(ILanguageSettingsProvider pr1, ILanguageSettingsProvider pr2) { + return pr1.getName().compareTo(pr2.getName()); + } + } +); fExtensionProviders.clear(); - for (ILanguageSettingsProvider provider : sortedProviders) { + for (ILanguageSettingsProvider provider : providers) { fExtensionProviders.put(provider.getId(), provider); } } @@ -105,7 +106,7 @@ public class LanguageSettingsExtensionManager { * @param registry - extension registry * @param providers - resulting set of providers */ - private static void loadProviderExtensions(IExtensionRegistry registry, Set providers) { + private static void loadProviderExtensions(IExtensionRegistry registry, Collection providers) { providers.clear(); IExtensionPoint extension = registry.getExtensionPoint(CCorePlugin.PLUGIN_ID, PROVIDER_EXTENSION_SIMPLE_ID); if (extension != null) { diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/ReferencedProjectsLanguageSettingsProvider.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/ReferencedProjectsLanguageSettingsProvider.java new file mode 100644 index 00000000000..5c333332350 --- /dev/null +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/ReferencedProjectsLanguageSettingsProvider.java @@ -0,0 +1,60 @@ +/******************************************************************************* + * Copyright (c) 2013, 2013 Andrew Gvozdev 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: + * Andrew Gvozdev - Initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.internal.core.language.settings.providers; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsBaseProvider; +import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager; +import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsStorage; +import org.eclipse.cdt.core.model.CoreModelUtil; +import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; +import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; +import org.eclipse.cdt.core.settings.model.ICProjectDescription; +import org.eclipse.cdt.core.settings.model.ICSettingEntry; +import org.eclipse.cdt.core.settings.model.util.CDataUtil; +import org.eclipse.core.resources.IResource; + +/** + * Language settings provider to provide entries exported from referenced projects. + */ +public class ReferencedProjectsLanguageSettingsProvider extends LanguageSettingsBaseProvider { + /** ID of the provider used in extension point from plugin.xml */ + public static final String ID = "org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider"; //$NON-NLS-1$ + + @Override + public List getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) { + if (cfgDescription == null) { + return null; + } + ICProjectDescription prjDescription = cfgDescription.getProjectDescription(); + if (prjDescription == null) { + return null; + } + + List entries = new ArrayList(); + ICConfigurationDescription[] refCfgDescriptions = CoreModelUtil.getReferencedConfigurationDescriptions(cfgDescription, false); + for (ICConfigurationDescription refCfgDescription : refCfgDescriptions) { + List refEntries = LanguageSettingsManager.getSettingEntriesByKind(refCfgDescription, rc, languageId, ICSettingEntry.ALL); + for (ICLanguageSettingEntry refEntry : refEntries) { + int flags = refEntry.getFlags(); + if ((flags & ICSettingEntry.EXPORTED) == ICSettingEntry.EXPORTED) { + // create a new entry with EXPORTED flag cleared + ICLanguageSettingEntry entry = CDataUtil.createEntry(refEntry, flags & ~ICSettingEntry.EXPORTED); + entries.add(entry); + } + } + } + + return LanguageSettingsStorage.getPooledList(new ArrayList(entries)); + } +} diff --git a/core/org.eclipse.cdt.core/plugin.properties b/core/org.eclipse.cdt.core/plugin.properties index 09556e83b07..32cb31f009c 100755 --- a/core/org.eclipse.cdt.core/plugin.properties +++ b/core/org.eclipse.cdt.core/plugin.properties @@ -136,3 +136,4 @@ refreshExclusionFactory.name = Refresh Exclusion Factory uncPathConverter.name = UNC Path Converter ScannerInfoExtensionLanguageSettingsProvider.name=Contributed ScannerInfo Entries PathEntryScannerInfoLanguageSettingsProvider.name=Contributed PathEntry Containers +ReferencedProjectsLanguageSettingsProvider.name=Exported Entries from Referenced Projects diff --git a/core/org.eclipse.cdt.core/plugin.xml b/core/org.eclipse.cdt.core/plugin.xml index 872a72d7108..235bd075aca 100644 --- a/core/org.eclipse.cdt.core/plugin.xml +++ b/core/org.eclipse.cdt.core/plugin.xml @@ -819,6 +819,11 @@ id="org.eclipse.cdt.core.PathEntryScannerInfoLanguageSettingsProvider" name="%PathEntryScannerInfoLanguageSettingsProvider.name"> + + diff --git a/core/org.eclipse.cdt.ui/plugin.xml b/core/org.eclipse.cdt.ui/plugin.xml index 59fb20ab78a..71fd0811149 100644 --- a/core/org.eclipse.cdt.ui/plugin.xml +++ b/core/org.eclipse.cdt.ui/plugin.xml @@ -4482,6 +4482,12 @@ ui-clear-entries="true" ui-edit-entries="true"> + + + languageSettingsProviders="org.eclipse.cdt.ui.UserLanguageSettingsProvider;org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider;org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider;${Toolchain};-org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"> + languageSettingsProviders="org.eclipse.cdt.ui.UserLanguageSettingsProvider;org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider;org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider;${Toolchain};-org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"> + languageSettingsProviders="org.eclipse.cdt.ui.UserLanguageSettingsProvider;org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider;org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider;${Toolchain};-org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"> + languageSettingsProviders="org.eclipse.cdt.ui.UserLanguageSettingsProvider;org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider;org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider;${Toolchain};-org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"> + languageSettingsProviders="org.eclipse.cdt.ui.UserLanguageSettingsProvider;org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider;org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider;${Toolchain};-org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"> + languageSettingsProviders="org.eclipse.cdt.ui.UserLanguageSettingsProvider;org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider;org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider;${Toolchain};-org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"> + languageSettingsProviders="org.eclipse.cdt.ui.UserLanguageSettingsProvider;org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider;org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider;${Toolchain};-org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser">