diff --git a/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/BuiltinSpecsDetectorTest.java b/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/BuiltinSpecsDetectorTest.java index 2985f1ff23b..b51a80e0042 100644 --- a/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/BuiltinSpecsDetectorTest.java +++ b/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/BuiltinSpecsDetectorTest.java @@ -48,7 +48,7 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase { private static final String LANGUAGE_ID = "language.test.id"; private static final String CUSTOM_PARAMETER = "customParameter"; private static final String ELEM_TEST = "test"; - + // those attributes must match that in AbstractBuiltinSpecsDetector private static final String ATTR_CONSOLE = "console"; //$NON-NLS-1$ @@ -88,7 +88,7 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase { return isExecuted; } } - + private class MockConsoleBuiltinSpecsDetector extends AbstractBuiltinSpecsDetector { @SuppressWarnings("nls") private final AbstractOptionParser[] optionParsers = { @@ -116,7 +116,7 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase { return optionParsers; } } - + @Override protected void setUp() throws Exception { super.setUp(); @@ -141,35 +141,41 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase { } public void testAbstractBuiltinSpecsDetector_GettersSetters() throws Exception { - // define mock detector - MockBuiltinSpecsDetectorExecutedFlag detector = new MockBuiltinSpecsDetectorExecutedFlag(); - - detector.configureProvider(PROVIDER_ID, PROVIDER_NAME, null, null, null); - assertEquals(PROVIDER_ID, detector.getId()); - assertEquals(PROVIDER_NAME, detector.getName()); - assertEquals(null, detector.getLanguageScope()); - assertEquals(null, detector.getSettingEntries(null, null, null)); - assertEquals(null, detector.getCustomParameter()); - assertEquals(false, detector.isExecuted()); + { + // provider configured with null parameters + MockBuiltinSpecsDetectorExecutedFlag detector = new MockBuiltinSpecsDetectorExecutedFlag(); + detector.configureProvider(PROVIDER_ID, PROVIDER_NAME, null, null, null); - List languages = new ArrayList(); - languages.add(LANGUAGE_ID); - List entries = new ArrayList(); - ICLanguageSettingEntry entry = new CMacroEntry("MACRO", "VALUE", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); - entries.add(entry); + assertEquals(PROVIDER_ID, detector.getId()); + assertEquals(PROVIDER_NAME, detector.getName()); + assertEquals(null, detector.getLanguageScope()); + assertEquals(null, detector.getSettingEntries(null, null, null)); + assertEquals(null, detector.getCustomParameter()); + assertEquals(false, detector.isExecuted()); + } - detector.configureProvider(PROVIDER_ID, PROVIDER_NAME, languages, entries, CUSTOM_PARAMETER); - assertEquals(PROVIDER_ID, detector.getId()); - assertEquals(PROVIDER_NAME, detector.getName()); - assertEquals(languages, detector.getLanguageScope()); - assertEquals(entries, detector.getSettingEntries(null, null, null)); - assertEquals(CUSTOM_PARAMETER, detector.getCustomParameter()); - assertEquals(false, detector.isExecuted()); - - detector.execute(); - assertEquals(true, detector.isExecuted()); + { + // provider configured with non-null parameters + MockBuiltinSpecsDetectorExecutedFlag detector = new MockBuiltinSpecsDetectorExecutedFlag(); + List languages = new ArrayList(); + languages.add(LANGUAGE_ID); + List entries = new ArrayList(); + ICLanguageSettingEntry entry = new CMacroEntry("MACRO", "VALUE", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); + entries.add(entry); + + detector.configureProvider(PROVIDER_ID, PROVIDER_NAME, languages, entries, CUSTOM_PARAMETER); + assertEquals(PROVIDER_ID, detector.getId()); + assertEquals(PROVIDER_NAME, detector.getName()); + assertEquals(languages, detector.getLanguageScope()); + assertEquals(entries, detector.getSettingEntries(null, null, null)); + assertEquals(CUSTOM_PARAMETER, detector.getCustomParameter()); + assertEquals(false, detector.isExecuted()); + + detector.execute(); + assertEquals(true, detector.isExecuted()); + } } - + public void testAbstractBuiltinSpecsDetector_CloneAndEquals() throws Exception { // define mock detector class MockDetectorCloneable extends MockBuiltinSpecsDetectorExecutedFlag implements Cloneable { @@ -182,10 +188,10 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase { return (MockDetectorCloneable) super.cloneShallow(); } } - + // create instance to compare to MockDetectorCloneable detector = new MockDetectorCloneable(); - + List languages = new ArrayList(); languages.add(LANGUAGE_ID); List entries = new ArrayList(); @@ -195,7 +201,7 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase { // check clone after initialization MockDetectorCloneable clone0 = detector.clone(); assertTrue(detector.equals(clone0)); - + // configure provider detector.configureProvider(PROVIDER_ID, PROVIDER_NAME, languages, entries, CUSTOM_PARAMETER); assertEquals(false, detector.isConsoleEnabled()); @@ -209,21 +215,21 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase { MockDetectorCloneable clone = detector.clone(); assertTrue(detector.equals(clone)); } - + // check custom parameter { MockDetectorCloneable clone = detector.clone(); clone.setCustomParameter("changed"); assertFalse(detector.equals(clone)); } - + // check language scope { MockDetectorCloneable clone = detector.clone(); clone.setLanguageScope(null); assertFalse(detector.equals(clone)); } - + // check console flag { MockDetectorCloneable clone = detector.clone(); @@ -231,7 +237,7 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase { clone.setConsoleEnabled( ! isConsoleEnabled ); assertFalse(detector.equals(clone)); } - + // check isExecuted flag { MockDetectorCloneable clone = detector.clone(); @@ -240,14 +246,14 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase { assertEquals(false, clone.isExecuted()); assertFalse(detector.equals(clone)); } - + // check entries { MockDetectorCloneable clone = detector.clone(); clone.setSettingEntries(null, null, null, null); assertFalse(detector.equals(clone)); } - + // check cloneShallow() { MockDetectorCloneable detector2 = detector.clone(); @@ -257,12 +263,12 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase { detector2.setSettingEntries(null, null, null, null); assertFalse(detector2.equals(clone)); - + clone.execute(); assertTrue(detector2.equals(clone)); } } - + /** */ public void testAbstractBuiltinSpecsDetector_Serialize() throws Exception { @@ -270,36 +276,36 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase { // create empty XML Document doc = XmlUtil.newDocument(); Element rootElement = XmlUtil.appendElement(doc, ELEM_TEST); - + // load it to new provider MockBuiltinSpecsDetectorExecutedFlag detector = new MockBuiltinSpecsDetectorExecutedFlag(); detector.load(rootElement); assertEquals(false, detector.isConsoleEnabled()); } - + Element elementProvider; { // define mock detector MockBuiltinSpecsDetectorExecutedFlag detector = new MockBuiltinSpecsDetectorExecutedFlag(); assertEquals(false, detector.isConsoleEnabled()); - + // redefine the settings detector.setConsoleEnabled(true); assertEquals(true, detector.isConsoleEnabled()); - + // serialize in XML Document doc = XmlUtil.newDocument(); Element rootElement = XmlUtil.appendElement(doc, ELEM_TEST); elementProvider = detector.serialize(rootElement); String xmlString = XmlUtil.toString(doc); - + assertTrue(xmlString.contains(ATTR_CONSOLE)); } { // create another instance of the provider MockBuiltinSpecsDetectorExecutedFlag detector = new MockBuiltinSpecsDetectorExecutedFlag(); assertEquals(false, detector.isConsoleEnabled()); - + // load element detector.load(elementProvider); assertEquals(true, detector.isConsoleEnabled()); @@ -329,16 +335,16 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase { IProject project = ResourceHelper.createCDTProjectWithConfig(projectName); ICConfigurationDescription[] cfgDescriptions = getConfigurationDescriptions(project); ICConfigurationDescription cfgDescription = cfgDescriptions[0]; - + MockConsoleBuiltinSpecsDetector detector = new MockConsoleBuiltinSpecsDetector(); detector.setLanguageScope(new ArrayList() {{add(LANGUAGE_ID);}}); - + detector.runForEachLanguage(cfgDescription, null, null, null); assertFalse(detector.isEmpty()); - + List noentries = detector.getSettingEntries(null, null, null); assertNull(noentries); - + List entries = detector.getSettingEntries(cfgDescription, null, LANGUAGE_ID); ICLanguageSettingEntry expected = new CMacroEntry("MACRO", "VALUE", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); assertEquals(expected, entries.get(0)); @@ -347,10 +353,10 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase { public void testAbstractBuiltinSpecsDetector_RunGlobal() throws Exception { MockConsoleBuiltinSpecsDetector detector = new MockConsoleBuiltinSpecsDetector(); detector.setLanguageScope(new ArrayList() {{add(LANGUAGE_ID);}}); - + detector.runForEachLanguage(null, null, null, null); assertFalse(detector.isEmpty()); - + List entries = detector.getSettingEntries(null, null, LANGUAGE_ID); ICLanguageSettingEntry expected = new CMacroEntry("MACRO", "VALUE", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); assertEquals(expected, entries.get(0)); @@ -370,7 +376,7 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase { final CLibraryPathEntry libraryPath_2 = new CLibraryPathEntry(new Path("/lib/path_2"), ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); final CLibraryFileEntry libraryFile_1 = new CLibraryFileEntry("lib_1.a", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); final CLibraryFileEntry libraryFile_2 = new CLibraryFileEntry("lib_2.a", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY); - + // Define mock detector adding unorganized entries MockBuiltinSpecsDetector detector = new MockBuiltinSpecsDetector() { @Override @@ -381,7 +387,7 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase { detectedSettingEntries.add(macro_1); detectedSettingEntries.add(includeFile_1); detectedSettingEntries.add(includePath_1); - + detectedSettingEntries.add(includePath_2); detectedSettingEntries.add(includeFile_2); detectedSettingEntries.add(macro_2); @@ -391,17 +397,17 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase { return true; } }; - + // run specs detector detector.startup(null); detector.startupForLanguage(null); detector.processLine("", null); detector.shutdownForLanguage(); detector.shutdown(); - + // compare benchmarks, expected well-sorted List entries = detector.getSettingEntries(null, null, null); - + int i=0; assertEquals(includePath_1, entries.get(i++)); assertEquals(includePath_2, entries.get(i++)); @@ -415,7 +421,7 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase { assertEquals(libraryPath_2, entries.get(i++)); assertEquals(libraryFile_1, entries.get(i++)); assertEquals(libraryFile_2, entries.get(i++)); - + assertEquals(12, entries.size()); } } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/MBSLanguageSettingsProvider.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/MBSLanguageSettingsProvider.java index 573eda88142..3e95c6ca3a3 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/MBSLanguageSettingsProvider.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/MBSLanguageSettingsProvider.java @@ -1,12 +1,12 @@ /******************************************************************************* - * Copyright (c) 2009, 2009 Andrew Gvozdev (Quoin Inc.) and others. + * Copyright (c) 2009, 2011 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 (Quoin Inc.) - initial API and implementation + * Andrew Gvozdev - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.managedbuilder.internal.scannerconfig; diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsExtensionsTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsExtensionsTests.java index df125a63059..58208dade1b 100644 --- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsExtensionsTests.java +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsExtensionsTests.java @@ -111,7 +111,7 @@ public class LanguageSettingsExtensionsTests extends BaseTestCase { // get test plugin extension provider ILanguageSettingsProvider providerExt = LanguageSettingsManager.getExtensionProviderCopy(EXTENSION_BASE_PROVIDER_ID); assertTrue(LanguageSettingsManager.isWorkspaceProvider(providerExt)); - + // get raw extension provider ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(providerExt); assertTrue(rawProvider instanceof LanguageSettingsBaseProvider); @@ -225,7 +225,26 @@ public class LanguageSettingsExtensionsTests extends BaseTestCase { assertEquals(languages.size(), actualLanguageIds.size()); } } - + + /** + * LanguageSettingsBaseProvider is not allowed to be configured twice. + */ + public void testBaseProviderCantReconfigure() throws Exception { + // create LanguageSettingsBaseProvider + LanguageSettingsBaseProvider provider = new LanguageSettingsBaseProvider(); + List entries = new ArrayList(); + entries.add(new CIncludePathEntry("/usr/include/", 0)); + // configure it + provider.configureProvider("id", "name", null, entries, null); + + try { + // attempt to configure it twice should fail + provider.configureProvider("id", "name", null, entries, null); + fail("LanguageSettingsBaseProvider is not allowed to be configured twice"); + } catch (UnsupportedOperationException e) { + } + } + /** * TODO */ @@ -238,10 +257,10 @@ public class LanguageSettingsExtensionsTests extends BaseTestCase { ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(providerExt); assertTrue(rawProvider instanceof LanguageSettingsSerializableProvider); LanguageSettingsSerializableProvider provider = (LanguageSettingsSerializableProvider) rawProvider; - + assertEquals(null, provider.getLanguageScope()); assertEquals("", provider.getCustomParameter()); - + List expected = new ArrayList(); expected.add(new CMacroEntry("MACRO", "value", 0)); assertEquals(expected, provider.getSettingEntries(null, null, null)); @@ -261,65 +280,45 @@ public class LanguageSettingsExtensionsTests extends BaseTestCase { ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(providerExt); assertTrue(rawProvider instanceof LanguageSettingsSerializableProvider); assertTrue(LanguageSettingsExtensionManager.equalsExtensionProvider(rawProvider)); - + // compare with workspace provider ILanguageSettingsProvider providerWsp = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID); ILanguageSettingsProvider providerWspRaw = LanguageSettingsManager.getRawProvider(providerWsp); assertSame(rawProvider, providerWspRaw); } - + // Editable providers are retrieved by copy { ILanguageSettingsProvider providerExt = LanguageSettingsManager.getExtensionProviderCopy(EXTENSION_EDITABLE_PROVIDER_ID); assertFalse(LanguageSettingsManager.isWorkspaceProvider(providerExt)); assertTrue(providerExt instanceof ILanguageSettingsEditableProvider); assertTrue(LanguageSettingsExtensionManager.equalsExtensionProvider(providerExt)); - + ILanguageSettingsProvider providerExt2 = LanguageSettingsManager.getExtensionProviderCopy(EXTENSION_EDITABLE_PROVIDER_ID); assertNotSame(providerExt, providerExt2); assertEquals(providerExt, providerExt2); - + ILanguageSettingsProvider providerWsp = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID); ILanguageSettingsProvider providerWspRaw = LanguageSettingsManager.getRawProvider(providerWsp); assertNotSame(providerExt, providerWspRaw); assertEquals(providerExt, providerWspRaw); assertTrue(LanguageSettingsExtensionManager.equalsExtensionProvider(providerWspRaw)); } - + // Test shallow copy { ILanguageSettingsProvider provider = LanguageSettingsManager.getExtensionProviderCopy(EXTENSION_EDITABLE_PROVIDER_ID); assertNotNull(provider); assertTrue(provider instanceof ILanguageSettingsEditableProvider); - + ILanguageSettingsProvider providerShallow = LanguageSettingsExtensionManager.getExtensionProviderShallow(EXTENSION_EDITABLE_PROVIDER_ID); assertNotNull(providerShallow); assertTrue(providerShallow instanceof ILanguageSettingsEditableProvider); assertFalse(provider.equals(providerShallow)); - + assertFalse(LanguageSettingsExtensionManager.equalsExtensionProvider(providerShallow)); assertTrue(LanguageSettingsExtensionManager.equalsExtensionProviderShallow((ILanguageSettingsEditableProvider) providerShallow)); - } } - -// /** -// * LanguageSettingsBaseProvider is not allowed to be configured twice. -// */ -// public void testBaseProviderConfigure() throws Exception { -// // create LanguageSettingsBaseProvider -// LanguageSettingsBaseProvider provider = new LanguageSettingsBaseProvider(); -// List entries = new ArrayList(); -// entries.add(new CIncludePathEntry("/usr/include/", 0)); -// // configure it -// provider.configureProvider("id", "name", null, entries, null); -// -// try { -// // attempt to configure it twice should fail -// provider.configureProvider("id", "name", null, entries, null); -// fail("LanguageSettingsBaseProvider is not allowed to be configured twice"); -// } catch (UnsupportedOperationException e) { -// } -// } } diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManagerTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManagerTests.java index 5fb13f11277..93012dd56c5 100644 --- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManagerTests.java +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManagerTests.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Andrew Gvozdev and others. + * Copyright (c) 2009, 2011 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 @@ -230,11 +230,11 @@ public class LanguageSettingsManagerTests extends BaseTestCase { assertNotNull(actual); assertEquals(0, actual.size()); } - + // use careless provider causing an exception { setExpectedNumberOfLoggedNonOKStatusObjects(1); - + ILanguageSettingsProvider providerNPE = new MockProvider(PROVIDER_1, PROVIDER_NAME_1, null) { @Override public List getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) { @@ -419,7 +419,7 @@ public class LanguageSettingsManagerTests extends BaseTestCase { assertEquals(0, actual.size()); } } - + /** */ public void testProvider_DefaultEntries() throws Exception { @@ -428,15 +428,15 @@ public class LanguageSettingsManagerTests extends BaseTestCase { IProject project = ResourceHelper.createCDTProjectWithConfig(projectName); ICProjectDescription prjDescription = CoreModel.getDefault().getProjectDescription(project); ICConfigurationDescription[] cfgDescriptions = prjDescription.getConfigurations(); - + ICConfigurationDescription cfgDescription = cfgDescriptions[0]; assertTrue(cfgDescription instanceof CConfigurationDescription); - + final IFolder parentFolder = ResourceHelper.createFolder(project, "/ParentFolder/"); assertNotNull(parentFolder); final IFile emptySettingsPath = ResourceHelper.createFile(project, "/ParentFolder/Subfolder/empty"); assertNotNull(emptySettingsPath); - + // store the entries as default entries final List entries = new ArrayList(); entries.add(new CIncludePathEntry("path0", 0)); @@ -449,11 +449,11 @@ public class LanguageSettingsManagerTests extends BaseTestCase { } return null; } - + }; providers.add(provider); cfgDescription.setLanguageSettingProviders(providers); - + { // retrieve entries for a resource IFile derived = ResourceHelper.createFile(project, "/ParentFolder/Subfolder/resource"); @@ -691,7 +691,7 @@ public class LanguageSettingsManagerTests extends BaseTestCase { ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID); assertEquals(EXTENSION_EDITABLE_PROVIDER_ID, provider.getId()); assertEquals(EXTENSION_EDITABLE_PROVIDER_NAME, provider.getName()); - + // get raw provider ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); assertEquals(EXTENSION_EDITABLE_PROVIDER_ID, rawProvider.getId()); @@ -699,7 +699,7 @@ public class LanguageSettingsManagerTests extends BaseTestCase { assertTrue(rawProvider instanceof LanguageSettingsSerializableProvider); // assert they are not the same object assertNotSame(provider, rawProvider); - + { // make sure entries are the same List entries = provider.getSettingEntries(null, null, null); @@ -707,14 +707,14 @@ public class LanguageSettingsManagerTests extends BaseTestCase { List rawEntries = rawProvider.getSettingEntries(null, null, null); assertEquals(entries, rawEntries); } - + { // set new entries to the raw provider List newEntries = new ArrayList(); newEntries.add(new CIncludePathEntry("path0", 0)); newEntries.add(new CIncludePathEntry("path1", 0)); ((LanguageSettingsSerializableProvider)rawProvider).setSettingEntries(null, null, null, newEntries); - + // check that the workspace provider gets them too List newRawEntries = rawProvider.getSettingEntries(null, null, null); assertEquals(newEntries, newRawEntries); @@ -742,13 +742,13 @@ public class LanguageSettingsManagerTests extends BaseTestCase { List entries = provider.getSettingEntries(null, null, null); assertEquals(1, entries.size()); // defined in the extension } - + // define new entries for the raw provider List newEntries = new ArrayList(); newEntries.add(new CIncludePathEntry("path0", 0)); newEntries.add(new CIncludePathEntry("path1", 0)); newEntries.add(new CIncludePathEntry("path2", 0)); - + { // replace raw provider List providers = new ArrayList(); @@ -757,7 +757,7 @@ public class LanguageSettingsManagerTests extends BaseTestCase { providers.add(newRawProvider); LanguageSettingsManager.setWorkspaceProviders(providers); } - + { // check that provider provides the new entries List entries = provider.getSettingEntries(null, null, null); @@ -765,7 +765,7 @@ public class LanguageSettingsManagerTests extends BaseTestCase { assertEquals(newEntries, entries); } } - + /** * Test ability to be called with workspace provider as well (NOOP). */ @@ -774,14 +774,14 @@ public class LanguageSettingsManagerTests extends BaseTestCase { ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); assertNotSame(provider, rawProvider); - + // attempt to "replace" with workspace provider (which is a wrapper around raw provider), should be NOOP List providers = new ArrayList(); providers.add(provider); LanguageSettingsManager.setWorkspaceProviders(providers); ILanguageSettingsProvider newRawProvider = LanguageSettingsManager.getRawProvider(provider); assertSame(rawProvider, newRawProvider); - + // check for no side effect assertSame(provider, providers.get(0)); } @@ -793,23 +793,23 @@ public class LanguageSettingsManagerTests extends BaseTestCase { CMacroEntry entry = new CMacroEntry("MACRO", null, 0); List entries = new ArrayList(); entries.add(entry); - + // create resources IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName()); IFile file = ResourceHelper.createFile(project, "file.cpp"); assertNotNull(file); - + // create a provider and set the entries LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); provider.setSettingEntries(null, file, null, entries); // build the hierarchy LanguageSettingsProvidersSerializer.buildResourceTree(provider, null, null, project); - + // check that entries go to highest possible level assertEquals(entries, LanguageSettingsManager.getSettingEntriesUpResourceTree(provider, null, file, null)); assertEquals(entries, LanguageSettingsManager.getSettingEntriesUpResourceTree(provider, null, project, null)); } - + /** */ public void testBuildResourceTree_FileInSubFolder() throws Exception { @@ -817,24 +817,24 @@ public class LanguageSettingsManagerTests extends BaseTestCase { CMacroEntry entry = new CMacroEntry("MACRO", null, 0); List entries = new ArrayList(); entries.add(entry); - + // create resources IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName()); IFolder folder = ResourceHelper.createFolder(project, "Folder"); IFile file = ResourceHelper.createFile(project, "Folder/file.cpp"); - + // create a provider and set the entries LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); provider.setSettingEntries(null, file, null, entries); // build the hierarchy LanguageSettingsManager.buildResourceTree(provider, null, null, project); - + // check that entries go to highest possible level assertEquals(entries, LanguageSettingsManager.getSettingEntriesUpResourceTree(provider, null, file, null)); assertEquals(entries, LanguageSettingsManager.getSettingEntriesUpResourceTree(provider, null, folder, null)); assertEquals(entries, LanguageSettingsManager.getSettingEntriesUpResourceTree(provider, null, project, null)); } - + /** */ public void testBuildResourceTree_TwoSubFolders() throws Exception { @@ -843,31 +843,31 @@ public class LanguageSettingsManagerTests extends BaseTestCase { entries1.add(new CMacroEntry("MACRO_1", null, 0)); List entries2 = new ArrayList(); entries2.add(new CMacroEntry("MACRO_2", null, 0)); - + // create resources IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName()); IFolder folder1 = ResourceHelper.createFolder(project, "Folder1"); IFolder folder2 = ResourceHelper.createFolder(project, "Folder2"); IFile file1 = ResourceHelper.createFile(project, "Folder1/file1.cpp"); IFile file2 = ResourceHelper.createFile(project, "Folder2/file2.cpp"); - + // create a provider and set the entries LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); provider.setSettingEntries(null, file1, null, entries1); provider.setSettingEntries(null, file2, null, entries2); // build the hierarchy LanguageSettingsManager.buildResourceTree(provider, null, null, project); - + // check that entries go to highest possible level assertEquals(entries1, LanguageSettingsManager.getSettingEntriesUpResourceTree(provider, null, file1, null)); assertEquals(entries1, LanguageSettingsManager.getSettingEntriesUpResourceTree(provider, null, folder1, null)); - + assertEquals(entries2, LanguageSettingsManager.getSettingEntriesUpResourceTree(provider, null, file2, null)); assertEquals(entries2, LanguageSettingsManager.getSettingEntriesUpResourceTree(provider, null, folder2, null)); assertEquals(0, LanguageSettingsManager.getSettingEntriesUpResourceTree(provider, null, project, null).size()); } - + /** */ public void testBuildResourceTree_FlippingSettings() throws Exception { @@ -876,16 +876,16 @@ public class LanguageSettingsManagerTests extends BaseTestCase { entries1.add(new CMacroEntry("MACRO_1", null, 0)); List entries2 = new ArrayList(); entries2.add(new CMacroEntry("MACRO_2", null, 0)); - + // create resources IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName()); IFile file1 = ResourceHelper.createFile(project, "file1.cpp"); IFile file2 = ResourceHelper.createFile(project, "file2.cpp"); IFile file3 = ResourceHelper.createFile(project, "file3.cpp"); - + // create a provider LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); - + // set the entries for the first 2 files provider.setSettingEntries(null, file1, null, entries1); provider.setSettingEntries(null, file2, null, entries1); @@ -895,7 +895,7 @@ public class LanguageSettingsManagerTests extends BaseTestCase { assertEquals(entries1, LanguageSettingsManager.getSettingEntriesUpResourceTree(provider, null, file1, null)); assertEquals(entries1, LanguageSettingsManager.getSettingEntriesUpResourceTree(provider, null, file2, null)); assertEquals(entries1, LanguageSettingsManager.getSettingEntriesUpResourceTree(provider, null, project, null)); - + // set the entries for the second+third files (second file flips the settings) provider.setSettingEntries(null, file2, null, entries2); provider.setSettingEntries(null, file3, null, entries2); @@ -915,22 +915,22 @@ public class LanguageSettingsManagerTests extends BaseTestCase { CMacroEntry entry = new CMacroEntry("MACRO", null, 0); List entries = new ArrayList(); entries.add(entry); - + // create resources IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName()); IFolder folder = ResourceHelper.createFolder(project, "Folder"); IFile file = ResourceHelper.createFile(project, "Folder/file.cpp"); - + // create a provider and set the entries LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); provider.setSettingEntries(null, file, LANG_CPP, entries); // build the hierarchy LanguageSettingsManager.buildResourceTree(provider, null, LANG_CPP, project); - + // check that entries go to highest possible level assertEquals(entries, LanguageSettingsManager.getSettingEntriesUpResourceTree(provider, null, file, LANG_CPP)); assertEquals(entries, LanguageSettingsManager.getSettingEntriesUpResourceTree(provider, null, folder, LANG_CPP)); assertEquals(entries, LanguageSettingsManager.getSettingEntriesUpResourceTree(provider, null, project, LANG_CPP)); } - + } diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsSerializableTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsSerializableTests.java index 14c8942d3f9..53e28a72e2d 100644 --- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsSerializableTests.java +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsSerializableTests.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009 Andrew Gvozdev and others. + * Copyright (c) 2009, 2011 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 @@ -1238,17 +1238,17 @@ public class LanguageSettingsSerializableTests extends BaseTestCase { sampleLanguages.add(LANG_ID); // create a model provider - class LanguageSettingsSerializableMock extends LanguageSettingsSerializableProvider implements Cloneable { - public LanguageSettingsSerializableMock(String id, String name) { + class MockSerializableProvider extends LanguageSettingsSerializableProvider implements Cloneable { + public MockSerializableProvider(String id, String name) { super(id, name); } @Override - public LanguageSettingsSerializableMock clone() throws CloneNotSupportedException { - return (LanguageSettingsSerializableMock) super.clone(); + public MockSerializableProvider clone() throws CloneNotSupportedException { + return (MockSerializableProvider) super.clone(); } } - LanguageSettingsSerializableMock provider1 = new LanguageSettingsSerializableMock(PROVIDER_1, PROVIDER_NAME_1); + MockSerializableProvider provider1 = new MockSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); provider1.setLanguageScope(sampleLanguages); provider1.setCustomParameter(CUSTOM_PARAMETER); assertEquals(false, provider1.isStoringEntriesInProjectArea()); @@ -1257,7 +1257,7 @@ public class LanguageSettingsSerializableTests extends BaseTestCase { provider1.setSettingEntries(null, null, LANG_ID, sampleEntries_2); // clone provider - LanguageSettingsSerializableMock providerClone = provider1.clone(); + MockSerializableProvider providerClone = provider1.clone(); assertNotSame(provider1, providerClone); assertTrue(provider1.equals(providerClone)); assertTrue(provider1.getClass()==providerClone.getClass()); @@ -1286,17 +1286,17 @@ public class LanguageSettingsSerializableTests extends BaseTestCase { sampleLanguages.add(LANG_ID); // create a model provider - class LanguageSettingsSerializableMock extends LanguageSettingsSerializableProvider implements Cloneable { - public LanguageSettingsSerializableMock(String id, String name) { + class MockSerializableProvider extends LanguageSettingsSerializableProvider implements Cloneable { + public MockSerializableProvider(String id, String name) { super(id, name); } @Override - public LanguageSettingsSerializableMock cloneShallow() throws CloneNotSupportedException { - return (LanguageSettingsSerializableMock) super.cloneShallow(); + public MockSerializableProvider cloneShallow() throws CloneNotSupportedException { + return (MockSerializableProvider) super.cloneShallow(); } } - LanguageSettingsSerializableMock provider1 = new LanguageSettingsSerializableMock(PROVIDER_1, PROVIDER_NAME_1); + MockSerializableProvider provider1 = new MockSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); provider1.setLanguageScope(sampleLanguages); provider1.setCustomParameter(CUSTOM_PARAMETER); assertEquals(false, provider1.isStoringEntriesInProjectArea()); @@ -1307,7 +1307,7 @@ public class LanguageSettingsSerializableTests extends BaseTestCase { provider1.setSettingEntries(null, null, null, entries); // clone provider - LanguageSettingsSerializableMock providerClone = provider1.cloneShallow(); + MockSerializableProvider providerClone = provider1.cloneShallow(); assertNotSame(provider1, providerClone); assertFalse(provider1.equals(providerClone)); assertTrue(provider1.getClass()==providerClone.getClass()); diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/MockLanguageSettingsProvider.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/MockLanguageSettingsProvider.java index 96024c7db45..5b6675f250c 100644 --- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/MockLanguageSettingsProvider.java +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/MockLanguageSettingsProvider.java @@ -1,12 +1,12 @@ /******************************************************************************* - * Copyright (c) 2009, 2009 Andrew Gvozdev (Quoin Inc.) and others. + * Copyright (c) 2009, 2011 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 (Quoin Inc.) - initial API and implementation + * Andrew Gvozdev - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.language.settings.providers; @@ -14,7 +14,6 @@ package org.eclipse.cdt.core.language.settings.providers; import java.util.List; import org.eclipse.cdt.core.AbstractExecutableExtensionBase; -import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.core.resources.IResource; @@ -22,6 +21,7 @@ import org.eclipse.core.resources.IResource; public class MockLanguageSettingsProvider extends AbstractExecutableExtensionBase implements ILanguageSettingsProvider { + @Override public List getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) { return null; } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsEditableProvider.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsEditableProvider.java index 3bb5d309dce..a65fda22cba 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsEditableProvider.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsEditableProvider.java @@ -1,12 +1,12 @@ /******************************************************************************* - * Copyright (c) 2009, 2009 Andrew Gvozdev (Quoin Inc.) and others. + * Copyright (c) 2009, 2011 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 (Quoin Inc.) - initial API and implementation + * Andrew Gvozdev - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.language.settings.providers; @@ -28,7 +28,7 @@ public interface ILanguageSettingsEditableProvider extends ILanguageSettingsProv public void setSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId, List entries); public boolean isEmpty(); public void clear(); - + public ILanguageSettingsEditableProvider cloneShallow() throws CloneNotSupportedException; public ILanguageSettingsEditableProvider clone() throws CloneNotSupportedException; } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsProvider.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsProvider.java index 05b1b657ed6..7273b9141aa 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsProvider.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsProvider.java @@ -24,7 +24,7 @@ import org.eclipse.core.resources.IResource; * This interface is used to deliver additions to compiler options such as * include paths (-I) or preprocessor defines (-D) and others (see * {@link ICSettingEntry#INCLUDE_PATH} and other kinds). - *
+ *

* To define a provider like that use extension point * {@code org.eclipse.cdt.core.LanguageSettingsProvider} and implement this * interface. CDT provides a few general use implementations such as diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsBaseProvider.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsBaseProvider.java index 03e049eeb95..d1709352b7a 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsBaseProvider.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsBaseProvider.java @@ -18,15 +18,17 @@ import java.util.List; import org.eclipse.cdt.core.AbstractExecutableExtensionBase; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; +import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsStorage; +import org.eclipse.cdt.internal.core.settings.model.SettingsModelMessages; import org.eclipse.core.resources.IResource; /** * {@code LanguageSettingsBaseProvider} is a basic implementation of {@link ILanguageSettingsProvider} - * defined in {@code org.eclipse.cdt.core.LanguageSettingsProvider} extension point. - * + * for the extensions defined by {@code org.eclipse.cdt.core.LanguageSettingsProvider} extension point. + * * This implementation supports "static" list of entries for languages specified in - * the extension point. - * + * the extension point. + * * @since 6.0 */ public class LanguageSettingsBaseProvider extends AbstractExecutableExtensionBase implements ILanguageSettingsProvider { @@ -43,11 +45,12 @@ public class LanguageSettingsBaseProvider extends AbstractExecutableExtensionBas * Default constructor. */ public LanguageSettingsBaseProvider() { + super(); } /** - * Constructor. Creates an "empty" provider. - * + * Constructor. Creates an "empty" non-configured provider. + * * @param id - id of the provider. * @param name - name of the provider to be presented to a user. */ @@ -57,7 +60,7 @@ public class LanguageSettingsBaseProvider extends AbstractExecutableExtensionBas /** * Constructor. - * + * * @param id - id of the provider. * @param name - name of the provider to be presented to a user. * @param languages - list of languages the {@code entries} provided for. @@ -66,15 +69,16 @@ public class LanguageSettingsBaseProvider extends AbstractExecutableExtensionBas * @param entries - the list of language settings entries this provider provides. * If {@code null} is passed, the provider creates an empty list. */ - public LanguageSettingsBaseProvider(String id, String name, List languages, List entries) { + public LanguageSettingsBaseProvider(String id, String name, List languages, + List entries) { super(id, name); this.languageScope = languages!=null ? new ArrayList(languages) : null; - this.entries = cloneList(entries); + this.entries = getPooledList(entries); } /** * Constructor. - * + * * @param id - id of the provider. * @param name - name of the provider to be presented to a user. * @param languages - list of languages the {@code entries} provided for. @@ -85,10 +89,11 @@ public class LanguageSettingsBaseProvider extends AbstractExecutableExtensionBas * @param customParameter - a custom parameter as the means to customize * providers extending this class. */ - public LanguageSettingsBaseProvider(String id, String name, List languages, List entries, String customParameter) { + public LanguageSettingsBaseProvider(String id, String name, List languages, + List entries, String customParameter) { super(id, name); this.languageScope = languages!=null ? new ArrayList(languages) : null; - this.entries = cloneList(entries); + this.entries = getPooledList(entries); this.customParameter = customParameter; } @@ -97,9 +102,9 @@ public class LanguageSettingsBaseProvider extends AbstractExecutableExtensionBas * the extension point is done in 2 steps. First, the class is created as * an executable extension using the default provider. Then this method is * used to configure the provider. - * - * FIXME It is not allowed to reconfigure the provider. - * + *

+ * It is not allowed to reconfigure the provider. + * * @param id - id of the provider. * @param name - name of the provider to be presented to a user. * @param languages - list of languages the {@code entries} provided for. @@ -109,46 +114,54 @@ public class LanguageSettingsBaseProvider extends AbstractExecutableExtensionBas * If {@code null} is passed, the provider creates an empty list. * @param customParameter - a custom parameter as the means to customize * providers extending this class from extension definition in {@code plugin.xml}. - * - * FIXME @throws UnsupportedOperationException if an attempt to reconfigure provider is made. + * + * @throws UnsupportedOperationException if an attempt to reconfigure provider is made. */ - public void configureProvider(String id, String name, List languages, List entries, String customParameter) { -// if (this.entries!=null) -// throw new UnsupportedOperationException(SettingsModelMessages.getString("LanguageSettingsBaseProvider.CanBeConfiguredOnlyOnce")); //$NON-NLS-1$ + public void configureProvider(String id, String name, List languages, + List entries, String customParameter) { + if (this.entries!=null) + throw new UnsupportedOperationException(SettingsModelMessages.getString("LanguageSettingsBaseProvider.CanBeConfiguredOnlyOnce")); //$NON-NLS-1$ setId(id); setName(name); this.languageScope = languages!=null ? new ArrayList(languages) : null; - this.entries = cloneList(entries); + this.entries = getPooledList(entries); this.customParameter = customParameter; } + private List getPooledList(List entries) { + if (entries != null) { + return LanguageSettingsStorage.getPooledList(entries); + } + return LanguageSettingsStorage.getPooledEmptyList(); + } + /** * {@inheritDoc} - * @param cfgDescription - configuration description. - * @param rc - resource such as file or folder. + * * @param languageId - language id. If {@code null}, then entries defined for * the language scope are returned. See {@link #getLanguageScope()} + * + * @return unmodifiable list of setting entries or {@code null} if no settings defined. + * the list is internally pooled and guaranteed to be the same object for equal + * lists. */ @Override - public List getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) { - if (languageScope==null) { - if (entries==null) - return null; - return Collections.unmodifiableList(entries); + public List getSettingEntries(ICConfigurationDescription cfgDescription, + IResource rc, String languageId) { + if (languageScope == null) { + return entries; } for (String lang : languageScope) { if (lang.equals(languageId)) { - if (entries==null) - return null; - return Collections.unmodifiableList(entries); + return entries; } } return null; } /** - * @return the list of languages this provider provides for. + * @return the unmodifiable list of languages this provider provides for. * If {@code null}, the provider provides for any language. */ public List getLanguageScope() { @@ -163,13 +176,4 @@ public class LanguageSettingsBaseProvider extends AbstractExecutableExtensionBas public String getCustomParameter() { return customParameter; } - - /** - * @param entries - * @return copy of the list of the entries. - */ - private List cloneList(List entries) { - return entries!=null ? new ArrayList(entries) : null; - } - } 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 df9429f4770..be5c8f611cc 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 @@ -26,7 +26,7 @@ import org.osgi.service.prefs.Preferences; /** * Collection of utilities for legacy support of older Scanner Discovery functionality. * This class is temporary and not intended to be used by clients. - * + * * @noextend This class is not intended to be subclassed by clients. * @noinstantiate This class is not intended to be instantiated by clients. */ @@ -99,7 +99,7 @@ public class ScannerDiscoveryLegacySupport { * Returns the values of scanner discovery profiles (scannerConfigDiscoveryProfileId) which were deprecated * and replaced with language settings providers in plugin.xml. * This (temporary) function serves as fail-safe switch during the transition. - * + * * @param id - can be id of either org.eclipse.cdt.managedbuilder.internal.core.InputType * or org.eclipse.cdt.managedbuilder.internal.core.ToolChain. * @return legacy scannerConfigDiscoveryProfileId. @@ -108,8 +108,9 @@ public class ScannerDiscoveryLegacySupport { public static String getDeprecatedLegacyProfiles(String id) { if (legacyProfiles == null) { legacyProfiles = new HashMap(); - + // InputTypes + // TODO -doublecheck // legacyProfiles.put(inputTypeId, scannerConfigDiscoveryProfileId); legacyProfiles.put("cdt.managedbuild.tool.gnu.c.compiler.input", "org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC|org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile"); legacyProfiles.put("cdt.managedbuild.tool.gnu.cpp.compiler.input", "org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP|org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile"); @@ -118,11 +119,12 @@ public class ScannerDiscoveryLegacySupport { legacyProfiles.put("cdt.managedbuild.tool.xlc.c.compiler.input", "org.eclipse.cdt.managedbuilder.xlc.core.XLCManagedMakePerProjectProfile"); legacyProfiles.put("cdt.managedbuild.tool.xlc.cpp.c.compiler.input", "org.eclipse.cdt.managedbuilder.xlc.core.XLCManagedMakePerProjectProfile"); legacyProfiles.put("cdt.managedbuild.tool.xlc.cpp.compiler.input", "org.eclipse.cdt.managedbuilder.xlc.core.XLCManagedMakePerProjectProfileCPP"); - + // Toolchains + // TODO -doublecheck // legacyProfiles.put(toolchainId, scannerConfigDiscoveryProfileId); } - + return legacyProfiles.get(id); } 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 5072a372952..f0ffa918ff1 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 @@ -71,7 +71,6 @@ public class LanguageSettingsExtensionManager { loadProviderExtensions(); } catch (Throwable e) { CCorePlugin.log("Error loading language settings providers extensions", e); //$NON-NLS-1$ - } finally { } } @@ -79,7 +78,7 @@ public class LanguageSettingsExtensionManager { * Load language settings providers contributed via the extension point. */ synchronized private static void loadProviderExtensions() { - // sort by name - for the providers taken from platform extensions + // sort by name - the providers defined via extensions are kept in separate list sorted Set sortedProviders = new TreeSet( new Comparator() { @Override @@ -111,7 +110,7 @@ public class LanguageSettingsExtensionManager { for (IExtension ext : extensions) { for (IConfigurationElement cfgEl : ext.getConfigurationElements()) { ILanguageSettingsProvider provider = null; - String id=null; + String id = null; try { if (cfgEl.getName().equals(ELEM_PROVIDER)) { id = determineAttributeValue(cfgEl, ATTR_ID); @@ -169,8 +168,8 @@ public class LanguageSettingsExtensionManager { for (IConfigurationElement ceLang : ce.getChildren(ELEM_LANGUAGE_SCOPE)) { String langId = determineAttributeValue(ceLang, ATTR_ID); - if (langId.trim().length()>0) { - if (languages==null) { + if (langId.length() > 0) { + if (languages == null) { languages = new ArrayList(); } languages.add(langId); @@ -192,8 +191,9 @@ public class LanguageSettingsExtensionManager { ICLanguageSettingEntry entry = (ICLanguageSettingEntry) CDataUtil.createEntry( entryKind, entryName, entryValue, null, flags); - if (entries == null) + if (entries == null) { entries = new ArrayList(); + } entries.add(entry); } catch (Exception e) { @@ -213,7 +213,7 @@ public class LanguageSettingsExtensionManager { * Creates empty non-configured provider from extension point definition. The method will * inspect extension registry for extension point "org.eclipse.cdt.core.LanguageSettingsProvider" * to determine bundle and instantiate the class. - * ID and name of provider are assigned from first extension point encountered. + * ID and name of provider are assigned from the first encountered extension point specifying the class. * * @param className - full qualified class name of provider. * @param registry - extension registry diff --git a/core/org.eclipse.cdt.core/schema/LanguageSettingsProvider.exsd b/core/org.eclipse.cdt.core/schema/LanguageSettingsProvider.exsd index a384595a320..a8348b44e73 100644 --- a/core/org.eclipse.cdt.core/schema/LanguageSettingsProvider.exsd +++ b/core/org.eclipse.cdt.core/schema/LanguageSettingsProvider.exsd @@ -65,7 +65,8 @@ A fully qualified name of the Java class that implements <samp>org.eclipse.cdt.core.settings.model.ILanguageSettingsProvider</samp> interface. If empty, <samp>org.eclipse.cdt.core.language.settings.providers.LanguageSettingsBaseProvider</samp> is used by default which provides basic functionality defined by this extension point. -If there is a need to configure a provider, attribute parameter could be used in a class extending <samp>LanguageSettingsBaseProvider</samp>. +If there is a need to configure a provider in more deliberate way, attribute <samp>parameter</samp> could be used in a class extending <samp>LanguageSettingsBaseProvider</samp>. +Default constructor (constructor without arguments) of this class must be public and the package be exported in order to be able to instantiate via extension point. @@ -89,7 +90,7 @@ If there is a need to configure a provider, attribute parameter could be used in - A custom parameter to initialize provider. Used to deliver command for GCCBuiltinSpecsDetector as an example. + A custom parameter to initialize provider. For example, used to deliver command for GCCBuiltinSpecsDetector. @@ -256,7 +257,7 @@ For those cases where contributed settings entries (representing the compiler op - Copyright (c) 2009, 2010 Andrew Gvozdev (Quoin Inc.) and others. + Copyright (c) 2009, 2011 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 diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/AbstractExecutableExtensionBase.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/AbstractExecutableExtensionBase.java index d56988056f6..f371e85d1d0 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/AbstractExecutableExtensionBase.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/AbstractExecutableExtensionBase.java @@ -1,12 +1,12 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Andrew Gvozdev (Quoin Inc.) and others. + * Copyright (c) 2009, 2011 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 (Quoin Inc.) - initial API and implementation + * Andrew Gvozdev - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core; @@ -19,7 +19,7 @@ package org.eclipse.cdt.core; public abstract class AbstractExecutableExtensionBase { private String fId; private String fName; - + /** * Default constructor will initialize with the name of the class * using reflection mechanism.