From 0962b1efbb299158dc95b4ad7bd4797818c30555 Mon Sep 17 00:00:00 2001 From: Andrew Gvozdev Date: Sat, 26 Nov 2011 19:16:28 -0500 Subject: [PATCH] ILanguageSettingsBroadcastingProvider introduced, some code maintenance --- .../MBSLanguageSettingsProvider.java | 7 +- .../LanguageSettingsExtensionsTests.java | 25 ++- .../LanguageSettingsListenersTests.java | 202 +++++++++--------- .../LanguageSettingsManagerTests.java | 25 +-- ...nguageSettingsPersistenceProjectTests.java | 65 +++--- ...ILanguageSettingsBroadcastingProvider.java | 32 +++ .../ILanguageSettingsEditableProvider.java | 12 +- .../providers/ILanguageSettingsProvider.java | 4 +- .../LanguageSettingsGenericProvider.java | 28 +++ .../LanguageSettingsManager_TBD.java | 9 +- .../LanguageSettingsSerializableProvider.java | 13 +- .../LanguageSettingsExtensionManager.java | 6 + .../LanguageSettingsProvidersSerializer.java | 12 +- .../providers/LanguageSettingsEntriesTab.java | 30 +-- .../LanguageSettingsProviderTab.java | 15 +- ...anguageSettingsProvidersLabelProvider.java | 10 +- .../UserLanguageSettingsProvider.java | 8 +- 17 files changed, 279 insertions(+), 224 deletions(-) create mode 100644 core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsBroadcastingProvider.java create mode 100644 core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsGenericProvider.java 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 3e95c6ca3a3..5f343e9382d 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 @@ -15,7 +15,7 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.cdt.core.AbstractExecutableExtensionBase; -import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider; +import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsBroadcastingProvider; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICFileDescription; import org.eclipse.cdt.core.settings.model.ICFolderDescription; @@ -27,9 +27,7 @@ import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IPath; -//public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase implements ILanguageSettingsEditableProvider { -public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase implements ILanguageSettingsProvider { - +public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase implements ILanguageSettingsBroadcastingProvider { @Override public List getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) { @@ -92,6 +90,7 @@ public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase return array; } + @Override public void setSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId, List entries) { 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 58208dade1b..2869db7d782 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 @@ -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 @@ -35,16 +35,19 @@ import org.eclipse.core.runtime.Path; */ public class LanguageSettingsExtensionsTests extends BaseTestCase { // These should match corresponding entries defined in plugin.xml - private static final String EXTENSION_BASE_PROVIDER_ID = "org.eclipse.cdt.core.tests.language.settings.base.provider"; - private static final String EXTENSION_BASE_PROVIDER_NAME = "Test Plugin Mock Language Settings Base Provider"; - private static final String EXTENSION_BASE_PROVIDER_LANG_ID = "org.eclipse.cdt.core.tests.language.id"; - private static final String EXTENSION_BASE_PROVIDER_PARAMETER = "custom parameter"; - private static final String EXTENSION_CUSTOM_PROVIDER_ID = "org.eclipse.cdt.core.tests.custom.language.settings.provider"; - private static final String EXTENSION_CUSTOM_PROVIDER_NAME = "Test Plugin Mock Language Settings Provider"; - private static final String EXTENSION_BASE_SUBCLASS_PROVIDER_ID = "org.eclipse.cdt.core.tests.language.settings.base.provider.subclass"; - private static final String EXTENSION_BASE_SUBCLASS_PROVIDER_PARAMETER = "custom parameter subclass"; - private static final String EXTENSION_SERIALIZABLE_PROVIDER_ID = "org.eclipse.cdt.core.tests.custom.serializable.language.settings.provider"; - private static final String EXTENSION_EDITABLE_PROVIDER_ID = "org.eclipse.cdt.core.tests.custom.editable.language.settings.provider"; + /*package*/ static final String EXTENSION_BASE_PROVIDER_ID = "org.eclipse.cdt.core.tests.language.settings.base.provider"; + /*package*/ static final String EXTENSION_BASE_PROVIDER_NAME = "Test Plugin Mock Language Settings Base Provider"; + /*package*/ static final String EXTENSION_BASE_PROVIDER_LANG_ID = "org.eclipse.cdt.core.tests.language.id"; + /*package*/ static final String EXTENSION_BASE_PROVIDER_PARAMETER = "custom parameter"; + /*package*/ static final String EXTENSION_CUSTOM_PROVIDER_ID = "org.eclipse.cdt.core.tests.custom.language.settings.provider"; + /*package*/ static final String EXTENSION_CUSTOM_PROVIDER_NAME = "Test Plugin Mock Language Settings Provider"; + /*package*/ static final String EXTENSION_BASE_SUBCLASS_PROVIDER_ID = "org.eclipse.cdt.core.tests.language.settings.base.provider.subclass"; + /*package*/ static final String EXTENSION_BASE_SUBCLASS_PROVIDER_PARAMETER = "custom parameter subclass"; + /*package*/ static final String EXTENSION_SERIALIZABLE_PROVIDER_ID = "org.eclipse.cdt.core.tests.custom.serializable.language.settings.provider"; + /*package*/ static final String EXTENSION_SERIALIZABLE_PROVIDER_NAME = "Test Plugin Mock Serializable Language Settings Provider"; + /*package*/ static final String EXTENSION_EDITABLE_PROVIDER_ID = "org.eclipse.cdt.core.tests.custom.editable.language.settings.provider"; + /*package*/ static final String EXTENSION_EDITABLE_PROVIDER_NAME = "Test Plugin Mock Editable Language Settings Provider"; + /*package*/ static final String EXTENSION_REGISTERER_PROVIDER_ID = "org.eclipse.cdt.core.tests.language.settings.listener.registerer.provider"; // These are made up private static final String PROVIDER_0 = "test.provider.0.id"; diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsListenersTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsListenersTests.java index bb2915a5359..199fc827abd 100644 --- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsListenersTests.java +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsListenersTests.java @@ -32,20 +32,20 @@ import org.eclipse.core.resources.IProject; * Test cases testing LanguageSettingsProvider functionality */ public class LanguageSettingsListenersTests extends BaseTestCase { - // Must match provider id defined as extension point - private static final String EXTENSION_REGISTERER_PROVIDER_ID = "org.eclipse.cdt.core.tests.language.settings.listener.registerer.provider"; - private static final String EXTENSION_EDITABLE_PROVIDER_ID = "org.eclipse.cdt.core.tests.custom.editable.language.settings.provider"; - + // Must match provider id defined as extension point + private static final String EXTENSION_REGISTERER_PROVIDER_ID = LanguageSettingsExtensionsTests.EXTENSION_REGISTERER_PROVIDER_ID; + private static final String EXTENSION_EDITABLE_PROVIDER_ID = LanguageSettingsExtensionsTests.EXTENSION_EDITABLE_PROVIDER_ID; + private static final String PROVIDER_1 = "test.provider.1.id"; private static final String PROVIDER_NAME_1 = "test.provider.1.name"; private static final String PROVIDER_CUSTOM_GLOBAL = "test.provider.custom.global.id"; private static final String PROVIDER_CUSTOM_GLOBAL_NAME = "test.provider.custom.global.name"; - + private static final CMacroEntry SAMPLE_LSE = new CMacroEntry("MACRO", "value",0); private class MockLanguageSettingsChangeListener implements ILanguageSettingsChangeListener { private int count = 0; private ILanguageSettingsChangeEvent lastEvent = null; - + @Override public void handleEvent(ILanguageSettingsChangeEvent event) { count++; @@ -55,12 +55,12 @@ public class LanguageSettingsListenersTests extends BaseTestCase { public int getCount() { return count; } - + public void resetCount() { count = 0; lastEvent = null; } - + public ILanguageSettingsChangeEvent getLastEvent() { return lastEvent; } @@ -114,7 +114,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { // global listeners providers get registered only lazily assertEquals(0, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID)); } - + /** */ public void testListenerRegisterer_OneOwnedByCfg() throws Exception { @@ -164,7 +164,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { "org.eclipse.cdt.core.tests.configuration.id.1", "org.eclipse.cdt.core.tests.configuration.id.2", }); - + { // get project descriptions ICProjectDescription writableProjDescription = CoreModel.getDefault().getProjectDescription(project); @@ -173,7 +173,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertEquals(2, cfgDescriptions.length); ICConfigurationDescription cfgDescription1 = cfgDescriptions[0]; ICConfigurationDescription cfgDescription2 = cfgDescriptions[1]; - + { // create a provider 1 ILanguageSettingsProvider mockProvider = new MockListenerRegisterer(PROVIDER_1, PROVIDER_NAME_1); @@ -192,7 +192,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { List storedProviders = cfgDescription2.getLanguageSettingProviders(); assertEquals(1, storedProviders.size()); } - + // write to project description CoreModel.getDefault().setProjectDescription(project, writableProjDescription); assertEquals(2, MockListenerRegisterer.getCount(PROVIDER_1)); @@ -211,9 +211,9 @@ public class LanguageSettingsListenersTests extends BaseTestCase { project.delete(true, null); assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_1)); } - + } - + /** */ public void testListenerRegisterer_OneGlobal() throws Exception { @@ -225,7 +225,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations(); assertEquals(1, cfgDescriptions.length); ICConfigurationDescription cfgDescription = cfgDescriptions[0]; - + // add global provider ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_REGISTERER_PROVIDER_ID); List providers = new ArrayList(); @@ -233,7 +233,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { cfgDescription.setLanguageSettingProviders(providers); List storedProviders = cfgDescription.getLanguageSettingProviders(); assertEquals(1, storedProviders.size()); - + // write to project description CoreModel.getDefault().setProjectDescription(project, writableProjDescription); assertEquals(1, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID)); @@ -252,9 +252,9 @@ public class LanguageSettingsListenersTests extends BaseTestCase { project.delete(true, null); assertEquals(0, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID)); } - + } - + /** */ public void testListenerRegisterer_TwoGlobal() throws Exception { @@ -262,7 +262,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { "org.eclipse.cdt.core.tests.configuration.id.1", "org.eclipse.cdt.core.tests.configuration.id.2", }); - + { // retrieve global provider ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_REGISTERER_PROVIDER_ID); @@ -273,7 +273,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertEquals(2, cfgDescriptions.length); ICConfigurationDescription cfgDescription1 = cfgDescriptions[0]; ICConfigurationDescription cfgDescription2 = cfgDescriptions[1]; - + { // add global provider to configuration 1 List providers = new ArrayList(); @@ -309,7 +309,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertEquals(0, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID)); } } - + /** */ public void testListenerRegisterer_TwoGlobalMinusOne() throws Exception { @@ -317,7 +317,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { "org.eclipse.cdt.core.tests.configuration.id.1", "org.eclipse.cdt.core.tests.configuration.id.2", }); - + { // retrieve workspace provider ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_REGISTERER_PROVIDER_ID); @@ -328,7 +328,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertEquals(2, cfgDescriptions.length); ICConfigurationDescription cfgDescription1 = cfgDescriptions[0]; ICConfigurationDescription cfgDescription2 = cfgDescriptions[1]; - + { // add global provider to configuration 1 List providers = new ArrayList(); @@ -359,7 +359,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertEquals(2, cfgDescriptions.length); ICConfigurationDescription cfgDescription1 = cfgDescriptions[0]; ICConfigurationDescription cfgDescription2 = cfgDescriptions[1]; - + { // remove global provider from configuration 1 List providers = new ArrayList(); @@ -377,7 +377,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertEquals(0, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID)); } } - + /** */ public void testListenerRegisterer_GlobalProviderTwoProjects() throws Exception { @@ -390,7 +390,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations(); assertEquals(1, cfgDescriptions.length); ICConfigurationDescription cfgDescription = cfgDescriptions[0]; - + // add global provider ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_REGISTERER_PROVIDER_ID); List providers = new ArrayList(); @@ -398,7 +398,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { cfgDescription.setLanguageSettingProviders(providers); List storedProviders = cfgDescription.getLanguageSettingProviders(); assertEquals(1, storedProviders.size()); - + // write to project description CoreModel.getDefault().setProjectDescription(project_1, writableProjDescription); assertEquals(1, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID)); @@ -413,7 +413,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations(); assertEquals(1, cfgDescriptions.length); ICConfigurationDescription cfgDescription = cfgDescriptions[0]; - + // add global provider ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_REGISTERER_PROVIDER_ID); List providers = new ArrayList(); @@ -421,12 +421,12 @@ public class LanguageSettingsListenersTests extends BaseTestCase { cfgDescription.setLanguageSettingProviders(providers); List storedProviders = cfgDescription.getLanguageSettingProviders(); assertEquals(1, storedProviders.size()); - + // write to project description CoreModel.getDefault().setProjectDescription(project_2, writableProjDescription); assertEquals(1, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID)); } - + { // close project 1 project_1.close(null); @@ -437,7 +437,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { project_2.close(null); assertEquals(0, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID)); } - + } /** @@ -466,17 +466,17 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_CUSTOM_GLOBAL)); } } - + /** */ public void testListenerRegisterer_GlobalProviderAddRemoveOutsideTheProject() throws Exception { ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(PROVIDER_CUSTOM_GLOBAL); - + // the global custom provider has not been added yet ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(workspaceProvider); assertNull(rawProvider); assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_CUSTOM_GLOBAL)); - + // prepare project List workspaceProvidersOriginal = LanguageSettingsManager.getWorkspaceProviders(); IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName()); @@ -487,14 +487,14 @@ public class LanguageSettingsListenersTests extends BaseTestCase { ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations(); assertEquals(1, cfgDescriptions.length); ICConfigurationDescription cfgDescription = cfgDescriptions[0]; - + // add global provider List providers = new ArrayList(); providers.add(workspaceProvider); cfgDescription.setLanguageSettingProviders(providers); List storedProviders = cfgDescription.getLanguageSettingProviders(); assertEquals(1, storedProviders.size()); - + // write to project description CoreModel.getDefault().setProjectDescription(project, writableProjDescription); // the global custom provider has not been added yet @@ -510,19 +510,19 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertEquals(1, MockListenerRegisterer.getCount(PROVIDER_CUSTOM_GLOBAL)); } { - // remove global provider + // remove global provider List providers = new ArrayList(workspaceProvidersOriginal); LanguageSettingsManager.setWorkspaceProviders(providers); assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_CUSTOM_GLOBAL)); } - + { // close project project.close(null); assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_CUSTOM_GLOBAL)); } } - + /** */ public void testNotification_cfgProvider_AddEmptyProvider() throws Exception { @@ -545,12 +545,12 @@ public class LanguageSettingsListenersTests extends BaseTestCase { // write to project description CoreModel.getDefault().setProjectDescription(project, writableProjDescription); } - + // register mock listener to inspect the notifications LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); assertEquals(0, mockLseListener.getCount()); assertEquals(null, mockLseListener.getLastEvent()); - + // Add empty provider { // get project descriptions @@ -559,7 +559,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations(); assertEquals(1, cfgDescriptions.length); ICConfigurationDescription cfgDescription = cfgDescriptions[0]; - + // create a provider and add to cfgDescription ILanguageSettingsProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_1, PROVIDER_NAME_1); List providers = new ArrayList(); @@ -567,16 +567,16 @@ public class LanguageSettingsListenersTests extends BaseTestCase { cfgDescription.setLanguageSettingProviders(providers); List storedProviders = cfgDescription.getLanguageSettingProviders(); assertEquals(1, storedProviders.size()); - + // write to project description CoreModel.getDefault().setProjectDescription(project, writableProjDescription); } - + // No notifications expected assertEquals(0, mockLseListener.getCount()); assertEquals(null, mockLseListener.getLastEvent()); } - + /** */ public void testNotification_cfgProvider_AddNonEmptyProvider() throws Exception { @@ -589,22 +589,22 @@ public class LanguageSettingsListenersTests extends BaseTestCase { ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations(); assertEquals(1, cfgDescriptions.length); ICConfigurationDescription cfgDescription = cfgDescriptions[0]; - + // clear providers List providers = new ArrayList(); cfgDescription.setLanguageSettingProviders(providers); List storedProviders = cfgDescription.getLanguageSettingProviders(); assertEquals(0, storedProviders.size()); - + // write to project description CoreModel.getDefault().setProjectDescription(project, writableProjDescription); } - + // register mock listener to inspect the notifications LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); assertEquals(0, mockLseListener.getCount()); assertEquals(null, mockLseListener.getLastEvent()); - + // Add non-empty provider { // get project descriptions @@ -614,7 +614,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertEquals(1, cfgDescriptions.length); ICConfigurationDescription cfgDescription = cfgDescriptions[0]; String cfgDescriptionId = cfgDescription.getId(); - + // create a provider and add entries MockLanguageSettingsEditableProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_1, PROVIDER_NAME_1); List entries = new ArrayList(); @@ -625,7 +625,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { cfgDescription.setLanguageSettingProviders(providers); List storedProviders = cfgDescription.getLanguageSettingProviders(); assertEquals(1, storedProviders.size()); - + // write to project description CoreModel.getDefault().setProjectDescription(project, writableProjDescription); @@ -633,18 +633,18 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertEquals(1, mockLseListener.getCount()); ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); assertNotNull(event); - + assertEquals(project.getName(), event.getProjectName()); assertEquals(1, event.getConfigurationDescriptionIds().length); assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]); } } - + /** */ public void testNotification_cfgProvider_SerializeEntries() throws Exception { IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName()); - + // add the mock provider { // get project descriptions @@ -653,18 +653,18 @@ public class LanguageSettingsListenersTests extends BaseTestCase { ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations(); assertEquals(1, cfgDescriptions.length); ICConfigurationDescription cfgDescription = cfgDescriptions[0]; - + // create a provider and add to cfgDescription List providers = new ArrayList(); providers.add(new MockLanguageSettingsEditableProvider(PROVIDER_1, PROVIDER_NAME_1)); cfgDescription.setLanguageSettingProviders(providers); List storedProviders = cfgDescription.getLanguageSettingProviders(); assertEquals(1, storedProviders.size()); - + // write to project description CoreModel.getDefault().setProjectDescription(project, writableProjDescription); } - + // register mock listener to inspect the notifications LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); assertEquals(0, mockLseListener.getCount()); @@ -679,7 +679,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertEquals(1, cfgDescriptions.length); ICConfigurationDescription cfgDescription = cfgDescriptions[0]; String cfgDescriptionId = cfgDescription.getId(); - + // Add entries List entries = new ArrayList(); entries.add(SAMPLE_LSE); @@ -690,25 +690,25 @@ public class LanguageSettingsListenersTests extends BaseTestCase { mockProvider.setSettingEntries(cfgDescription, project, null, entries); assertEquals(0, mockLseListener.getCount()); assertEquals(null, mockLseListener.getLastEvent()); - + // Serialize settings LanguageSettingsProvidersSerializer.serializeLanguageSettings(prjDescription); // inspect event assertEquals(1, mockLseListener.getCount()); ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); assertNotNull(event); - + assertEquals(project.getName(), event.getProjectName()); assertEquals(1, event.getConfigurationDescriptionIds().length); assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]); } } - + /** */ public void testNotification_cfgProvider_SerializeEntriesConcurrent() throws Exception { IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName()); - + // add the mock provider { // get project descriptions @@ -717,25 +717,25 @@ public class LanguageSettingsListenersTests extends BaseTestCase { ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations(); assertEquals(1, cfgDescriptions.length); ICConfigurationDescription cfgDescription = cfgDescriptions[0]; - + // create a provider and add to cfgDescription List providers = new ArrayList(); providers.add(new MockLanguageSettingsEditableProvider(PROVIDER_1, PROVIDER_NAME_1)); cfgDescription.setLanguageSettingProviders(providers); List storedProviders = cfgDescription.getLanguageSettingProviders(); assertEquals(1, storedProviders.size()); - + // write to project description CoreModel.getDefault().setProjectDescription(project, writableProjDescription); } - + // register mock listener to inspect the notifications LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); assertEquals(0, mockLseListener.getCount()); assertEquals(null, mockLseListener.getLastEvent()); - + // Change the provider's entries concurrently - + // get project descriptions ICProjectDescription prjDescription_1 = CoreModel.getDefault().getProjectDescription(project, false); assertNotNull(prjDescription_1); @@ -746,7 +746,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertEquals(1, cfgDescriptions.length); ICConfigurationDescription cfgDescriptionWritable = cfgDescriptions[0]; String cfgDescriptionId = cfgDescriptionWritable.getId(); - + // Add entries List entries = new ArrayList(); entries.add(SAMPLE_LSE); @@ -755,19 +755,19 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertTrue(providers.get(0) instanceof MockLanguageSettingsEditableProvider); MockLanguageSettingsEditableProvider mockProvider = (MockLanguageSettingsEditableProvider) providers.get(0); mockProvider.setSettingEntries(cfgDescriptionWritable, project, null, entries); - + // reset count mockLseListener.resetCount(); assertEquals(0, mockLseListener.getCount()); assertNull(mockLseListener.getLastEvent()); - + // Serialize settings LanguageSettingsProvidersSerializer.serializeLanguageSettings(prjDescription_1); // inspect event assertEquals(1, mockLseListener.getCount()); ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); assertNotNull(event); - + assertEquals(project.getName(), event.getProjectName()); assertEquals(1, event.getConfigurationDescriptionIds().length); assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]); @@ -777,7 +777,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertEquals(1, cfgDescriptions.length); ICConfigurationDescription cfgDescriptionWritable = cfgDescriptions[0]; String cfgDescriptionId = cfgDescriptionWritable.getId(); - + // Add same entries List entries = new ArrayList(); entries.add(SAMPLE_LSE); @@ -786,12 +786,12 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertTrue(providers.get(0) instanceof MockLanguageSettingsEditableProvider); MockLanguageSettingsEditableProvider mockProvider = (MockLanguageSettingsEditableProvider) providers.get(0); mockProvider.setSettingEntries(cfgDescriptionWritable, project, null, entries); - + // reset count mockLseListener.resetCount(); assertEquals(0, mockLseListener.getCount()); assertNull(mockLseListener.getLastEvent()); - + // Serialize settings LanguageSettingsProvidersSerializer.serializeLanguageSettings(prjDescription_2); // inspect event @@ -800,7 +800,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertNull(event); } } - + /** */ public void testNotification_globalProvider_AddEmptyProvider() throws Exception { @@ -823,12 +823,12 @@ public class LanguageSettingsListenersTests extends BaseTestCase { // write to project description CoreModel.getDefault().setProjectDescription(project, writableProjDescription); } - + // register mock listener to inspect the notifications LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); assertEquals(0, mockLseListener.getCount()); assertEquals(null, mockLseListener.getLastEvent()); - + // Add empty global provider { // get project descriptions @@ -837,7 +837,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations(); assertEquals(1, cfgDescriptions.length); ICConfigurationDescription cfgDescription = cfgDescriptions[0]; - + // retrieve a global provider ILanguageSettingsProvider wspProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID); assertNotNull(wspProvider); @@ -852,16 +852,16 @@ public class LanguageSettingsListenersTests extends BaseTestCase { cfgDescription.setLanguageSettingProviders(providers); List storedProviders = cfgDescription.getLanguageSettingProviders(); assertEquals(1, storedProviders.size()); - + // write to project description CoreModel.getDefault().setProjectDescription(project, writableProjDescription); } - + // No notifications expected assertEquals(0, mockLseListener.getCount()); assertEquals(null, mockLseListener.getLastEvent()); } - + /** */ public void testNotification_globalProvider_AddNonEmptyProvider() throws Exception { @@ -874,22 +874,22 @@ public class LanguageSettingsListenersTests extends BaseTestCase { ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations(); assertEquals(1, cfgDescriptions.length); ICConfigurationDescription cfgDescription = cfgDescriptions[0]; - + // clear providers List providers = new ArrayList(); cfgDescription.setLanguageSettingProviders(providers); List storedProviders = cfgDescription.getLanguageSettingProviders(); assertEquals(0, storedProviders.size()); - + // write to project description CoreModel.getDefault().setProjectDescription(project, writableProjDescription); } - + // register mock listener to inspect the notifications LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); assertEquals(0, mockLseListener.getCount()); assertEquals(null, mockLseListener.getLastEvent()); - + // Add non-empty provider { // get project descriptions @@ -899,7 +899,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertEquals(1, cfgDescriptions.length); ICConfigurationDescription cfgDescription = cfgDescriptions[0]; String cfgDescriptionId = cfgDescription.getId(); - + // retrieve a global provider ILanguageSettingsProvider wspProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID); assertNotNull(wspProvider); @@ -925,21 +925,21 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertEquals(1, mockLseListener.getCount()); ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); assertNotNull(event); - + assertEquals(project.getName(), event.getProjectName()); assertEquals(1, event.getConfigurationDescriptionIds().length); assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]); } } - + /** */ public void testNotification_globalProvider_SerializeEntries() throws Exception { IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName()); - + // register mock listener to inspect the notifications LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); - + // Add empty global provider { // get project descriptions @@ -948,7 +948,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations(); assertEquals(1, cfgDescriptions.length); ICConfigurationDescription cfgDescription = cfgDescriptions[0]; - + // retrieve a global provider ILanguageSettingsProvider wspProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID); assertNotNull(wspProvider); @@ -963,7 +963,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase { cfgDescription.setLanguageSettingProviders(providers); List storedProviders = cfgDescription.getLanguageSettingProviders(); assertEquals(1, storedProviders.size()); - + // write to project description CoreModel.getDefault().setProjectDescription(project, writableProjDescription); } @@ -981,12 +981,12 @@ public class LanguageSettingsListenersTests extends BaseTestCase { entries.add(SAMPLE_LSE); ((MockLanguageSettingsEditableProvider) rawProvider).setSettingEntries(null, project, null, entries); assertEquals(SAMPLE_LSE, wspProvider.getSettingEntries(null, project, null).get(0)); - + // reset count mockLseListener.resetCount(); assertEquals(0, mockLseListener.getCount()); assertEquals(null, mockLseListener.getLastEvent()); - + // Serialize settings LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace(); @@ -997,12 +997,12 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertEquals(1, cfgDescriptions.length); ICConfigurationDescription cfgDescription = cfgDescriptions[0]; String cfgDescriptionId = cfgDescription.getId(); - + // inspect event assertEquals(1, mockLseListener.getCount()); ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); assertNotNull(event); - + assertEquals(project.getName(), event.getProjectName()); assertEquals(1, event.getConfigurationDescriptionIds().length); assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]); @@ -1016,15 +1016,15 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertTrue(rawProvider instanceof MockLanguageSettingsEditableProvider); // clear the provider again ((MockLanguageSettingsEditableProvider) rawProvider).clear(); - + // reset count mockLseListener.resetCount(); assertEquals(0, mockLseListener.getCount()); assertEquals(null, mockLseListener.getLastEvent()); - + // Serialize settings LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace(); - + // get cfgDescriptionId ICProjectDescription prjDescription = CoreModel.getDefault().getProjectDescription(project, false); assertNotNull(prjDescription); @@ -1032,12 +1032,12 @@ public class LanguageSettingsListenersTests extends BaseTestCase { assertEquals(1, cfgDescriptions.length); ICConfigurationDescription cfgDescription = cfgDescriptions[0]; String cfgDescriptionId = cfgDescription.getId(); - + // inspect event assertEquals(1, mockLseListener.getCount()); ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); assertNotNull(event); - + assertEquals(project.getName(), event.getProjectName()); assertEquals(1, event.getConfigurationDescriptionIds().length); assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]); 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 93012dd56c5..cde365d0471 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 @@ -42,9 +42,10 @@ import org.eclipse.core.runtime.Path; */ public class LanguageSettingsManagerTests extends BaseTestCase { // Those should match ids of plugin extensions defined in plugin.xml - private static final String EXTENSION_BASE_PROVIDER_ID = "org.eclipse.cdt.core.tests.language.settings.base.provider"; - private static final String EXTENSION_EDITABLE_PROVIDER_ID = "org.eclipse.cdt.core.tests.custom.editable.language.settings.provider"; - private static final String EXTENSION_EDITABLE_PROVIDER_NAME = "Test Plugin Mock Editable Language Settings Provider"; + private static final String EXTENSION_BASE_PROVIDER_ID = LanguageSettingsExtensionsTests.EXTENSION_BASE_PROVIDER_ID; + private static final String EXTENSION_SERIALIZABLE_PROVIDER_ID = LanguageSettingsExtensionsTests.EXTENSION_SERIALIZABLE_PROVIDER_ID; + private static final String EXTENSION_SERIALIZABLE_PROVIDER_NAME = LanguageSettingsExtensionsTests.EXTENSION_SERIALIZABLE_PROVIDER_NAME; + private static final String EXTENSION_EDITABLE_PROVIDER_ID = LanguageSettingsExtensionsTests.EXTENSION_EDITABLE_PROVIDER_ID; private static final IFile FILE_0 = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path("/project/path0")); private static final String CFG_ID = "test.configuration.id"; @@ -688,14 +689,14 @@ public class LanguageSettingsManagerTests extends BaseTestCase { */ public void testWorkspaceProvider_Basic() throws Exception { // get workspace provider - ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID); - assertEquals(EXTENSION_EDITABLE_PROVIDER_ID, provider.getId()); - assertEquals(EXTENSION_EDITABLE_PROVIDER_NAME, provider.getName()); + ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID); + assertEquals(EXTENSION_SERIALIZABLE_PROVIDER_ID, provider.getId()); + assertEquals(EXTENSION_SERIALIZABLE_PROVIDER_NAME, provider.getName()); // get raw provider ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); - assertEquals(EXTENSION_EDITABLE_PROVIDER_ID, rawProvider.getId()); - assertEquals(EXTENSION_EDITABLE_PROVIDER_NAME, rawProvider.getName()); + assertEquals(EXTENSION_SERIALIZABLE_PROVIDER_ID, rawProvider.getId()); + assertEquals(EXTENSION_SERIALIZABLE_PROVIDER_NAME, rawProvider.getName()); assertTrue(rawProvider instanceof LanguageSettingsSerializableProvider); // assert they are not the same object assertNotSame(provider, rawProvider); @@ -726,8 +727,8 @@ public class LanguageSettingsManagerTests extends BaseTestCase { * Test workspace providers equality. */ public void testWorkspaceProvider_Equals() throws Exception { - ILanguageSettingsProvider providerA = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID); - ILanguageSettingsProvider providerB = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID); + ILanguageSettingsProvider providerA = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID); + ILanguageSettingsProvider providerB = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID); assertEquals(providerA, providerB); } @@ -738,7 +739,7 @@ public class LanguageSettingsManagerTests extends BaseTestCase { // get sample workspace provider ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID); { - // check on its entries + // check on its entries (1 predefined entry via extension point) List entries = provider.getSettingEntries(null, null, null); assertEquals(1, entries.size()); // defined in the extension } @@ -771,7 +772,7 @@ public class LanguageSettingsManagerTests extends BaseTestCase { */ public void testWorkspaceProvider_ReplaceWithWorkspaceProvider() throws Exception { // get sample workspace provider - ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID); + ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); assertNotSame(provider, rawProvider); diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsPersistenceProjectTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsPersistenceProjectTests.java index 1d4b51c7438..d50ce050a5f 100644 --- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsPersistenceProjectTests.java +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsPersistenceProjectTests.java @@ -40,12 +40,13 @@ import org.w3c.dom.Element; * Test cases testing LanguageSettingsProvider functionality */ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase { + // These should match extension points defined in plugin.xml + private static final String EXTENSION_BASE_PROVIDER_ID = LanguageSettingsExtensionsTests.EXTENSION_BASE_PROVIDER_ID; + private static final String EXTENSION_BASE_PROVIDER_NAME = LanguageSettingsExtensionsTests.EXTENSION_BASE_PROVIDER_NAME; + private static final String EXTENSION_SERIALIZABLE_PROVIDER_ID = LanguageSettingsExtensionsTests.EXTENSION_SERIALIZABLE_PROVIDER_ID; + private static final String LANGUAGE_SETTINGS_PROJECT_XML = ".settings/language.settings.xml"; private static final String LANGUAGE_SETTINGS_WORKSPACE_XML = "language.settings.xml"; - // Should match extension points defined in plugin.xml - private static final String EXTENSION_PROVIDER_ID = "org.eclipse.cdt.core.tests.language.settings.base.provider.subclass"; - private static final String EXTENSION_PROVIDER_NAME = "Test Plugin Mock Base Provider Subclass"; - private static final String EXTENSION_SERIALIZABLE_PROVIDER_ID = "org.eclipse.cdt.core.tests.custom.serializable.language.settings.provider"; private static final String CFG_ID = "test.configuration.id.0"; private static final String CFG_ID_2 = "test.configuration.id.2"; @@ -103,20 +104,6 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase { } } - private class MockEditableProvider extends LanguageSettingsSerializableProvider implements ILanguageSettingsEditableProvider { - public MockEditableProvider(String id, String name) { - super(id, name); - } - @Override - public MockEditableProvider cloneShallow() throws CloneNotSupportedException { - return (MockEditableProvider) super.cloneShallow(); - } - @Override - public MockEditableProvider clone() throws CloneNotSupportedException { - return (MockEditableProvider) super.clone(); - } - } - /** * Constructor. * @param name - name of the test. @@ -200,7 +187,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase { int originalSize = originalProviders.size(); // create new provider list - LanguageSettingsSerializableProvider mockProvider = new MockEditableProvider(PROVIDER_0, PROVIDER_NAME_0); + LanguageSettingsSerializableProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_0, PROVIDER_NAME_0); List providers = new ArrayList(originalProviders); providers.add(mockProvider); assertTrue(originalSize != providers.size()); @@ -245,7 +232,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase { ICConfigurationDescription cfgDescription = cfgDescriptions[0]; // create a provider - LanguageSettingsSerializableProvider mockProvider = new MockEditableProvider(PROVIDER_0, PROVIDER_NAME_0); + LanguageSettingsSerializableProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_0, PROVIDER_NAME_0); mockProvider.setStoringEntriesInProjectArea(true); mockProvider.setSettingEntries(cfgDescription, null, null, entries); List providers = new ArrayList(); @@ -268,7 +255,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase { List providers = cfgDescription.getLanguageSettingProviders(); assertEquals(1, providers.size()); ILanguageSettingsProvider loadedProvider = providers.get(0); - assertTrue(loadedProvider instanceof LanguageSettingsSerializableProvider); + assertTrue(loadedProvider instanceof MockLanguageSettingsEditableProvider); assertEquals(PROVIDER_0, loadedProvider.getId()); assertEquals(PROVIDER_NAME_0, loadedProvider.getName()); @@ -287,7 +274,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase { List providers = cfgDescription.getLanguageSettingProviders(); assertEquals(1, providers.size()); ILanguageSettingsProvider loadedProvider = providers.get(0); - assertTrue(loadedProvider instanceof LanguageSettingsSerializableProvider); + assertTrue(loadedProvider instanceof MockLanguageSettingsEditableProvider); assertEquals(PROVIDER_0, loadedProvider.getId()); assertEquals(PROVIDER_NAME_0, loadedProvider.getName()); @@ -375,16 +362,16 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase { public void testWorkspacePersistence_ShadowedExtensionProvider() throws Exception { { // get the raw extension provider - ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_PROVIDER_ID); + ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_BASE_PROVIDER_ID); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); // confirm its type and name assertTrue(rawProvider instanceof LanguageSettingsBaseProvider); - assertEquals(EXTENSION_PROVIDER_ID, rawProvider.getId()); - assertEquals(EXTENSION_PROVIDER_NAME, rawProvider.getName()); + assertEquals(EXTENSION_BASE_PROVIDER_ID, rawProvider.getId()); + assertEquals(EXTENSION_BASE_PROVIDER_NAME, rawProvider.getName()); } { // replace extension provider - ILanguageSettingsProvider provider = new MockLanguageSettingsSerializableProvider(EXTENSION_PROVIDER_ID, PROVIDER_NAME_0); + ILanguageSettingsProvider provider = new MockLanguageSettingsSerializableProvider(EXTENSION_BASE_PROVIDER_ID, PROVIDER_NAME_0); List providers = new ArrayList(); providers.add(provider); // note that this will also serialize workspace providers @@ -392,10 +379,10 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase { } { // doublecheck it's in the list - ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_PROVIDER_ID); + ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_BASE_PROVIDER_ID); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); assertTrue(rawProvider instanceof MockLanguageSettingsSerializableProvider); - assertEquals(EXTENSION_PROVIDER_ID, rawProvider.getId()); + assertEquals(EXTENSION_BASE_PROVIDER_ID, rawProvider.getId()); assertEquals(PROVIDER_NAME_0, rawProvider.getName()); } @@ -403,10 +390,10 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase { // re-load to check serialization LanguageSettingsProvidersSerializer.loadLanguageSettingsWorkspace(); - ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_PROVIDER_ID); + ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_BASE_PROVIDER_ID); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); assertTrue(rawProvider instanceof MockLanguageSettingsSerializableProvider); - assertEquals(EXTENSION_PROVIDER_ID, rawProvider.getId()); + assertEquals(EXTENSION_BASE_PROVIDER_ID, rawProvider.getId()); assertEquals(PROVIDER_NAME_0, rawProvider.getName()); } @@ -416,21 +403,21 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase { } { // doublecheck original one is in the list - ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_PROVIDER_ID); + ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_BASE_PROVIDER_ID); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); assertTrue(rawProvider instanceof LanguageSettingsBaseProvider); - assertEquals(EXTENSION_PROVIDER_ID, rawProvider.getId()); - assertEquals(EXTENSION_PROVIDER_NAME, rawProvider.getName()); + assertEquals(EXTENSION_BASE_PROVIDER_ID, rawProvider.getId()); + assertEquals(EXTENSION_BASE_PROVIDER_NAME, rawProvider.getName()); } { // re-load to check serialization LanguageSettingsProvidersSerializer.loadLanguageSettingsWorkspace(); - ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_PROVIDER_ID); + ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_BASE_PROVIDER_ID); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); assertTrue(rawProvider instanceof LanguageSettingsBaseProvider); - assertEquals(EXTENSION_PROVIDER_ID, rawProvider.getId()); - assertEquals(EXTENSION_PROVIDER_NAME, rawProvider.getName()); + assertEquals(EXTENSION_BASE_PROVIDER_ID, rawProvider.getId()); + assertEquals(EXTENSION_BASE_PROVIDER_NAME, rawProvider.getName()); } } @@ -674,7 +661,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase { Element rootElement = null; // provider of other type (not LanguageSettingsSerializableProvider) defined as an extension - ILanguageSettingsProvider providerExt = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_PROVIDER_ID); + ILanguageSettingsProvider providerExt = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_BASE_PROVIDER_ID); { // create cfg description @@ -721,7 +708,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase { Element rootElement = null; // provider set on workspace level overriding an extension - String idExt = EXTENSION_PROVIDER_ID; + String idExt = EXTENSION_BASE_PROVIDER_ID; ILanguageSettingsProvider providerExt = LanguageSettingsManager.getWorkspaceProvider(idExt); assertNotNull(providerExt); { @@ -791,7 +778,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase { assertNotNull(cfgDescription); // 1. Provider reference to extension from plugin.xml - providerExt = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_PROVIDER_ID); + providerExt = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_BASE_PROVIDER_ID); // 2. TODO Provider reference to provider defined in the project diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsBroadcastingProvider.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsBroadcastingProvider.java new file mode 100644 index 00000000000..8987647ad60 --- /dev/null +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsBroadcastingProvider.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2011, 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 - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.core.language.settings.providers; + +import java.util.List; + +import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; +import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; +import org.eclipse.core.resources.IResource; + +/** + * TODO + */ +public interface ILanguageSettingsBroadcastingProvider extends ILanguageSettingsProvider { + @Override + public String getId(); + @Override + public String getName(); + @Override + public List getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId); + + public void setSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId, List entries); +} 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 a65fda22cba..dc8c20c7657 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 @@ -23,11 +23,15 @@ import org.eclipse.core.resources.IResource; * their settings themselves and not providing such option to the user. * */ -public interface ILanguageSettingsEditableProvider extends ILanguageSettingsProvider, Cloneable { - +public interface ILanguageSettingsEditableProvider extends ILanguageSettingsBroadcastingProvider, Cloneable { + @Override + public String getId(); + @Override + public String getName(); + @Override + public List getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId); + @Override 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 7273b9141aa..7fb46ce045b 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 @@ -29,8 +29,8 @@ import org.eclipse.core.resources.IResource; * {@code org.eclipse.cdt.core.LanguageSettingsProvider} and implement this * interface. CDT provides a few general use implementations such as * {@link LanguageSettingsBaseProvider} or {@link LanguageSettingsSerializableProvider} - * which could be used out of the box or extended. See also extension point - * schema description LanguageSettingsProvider.exsd. + * or {@link LanguageSettingsGenericProvider} which could be used out of the box or + * extended. See also extension point schema description LanguageSettingsProvider.exsd. * * @since 6.0 */ diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsGenericProvider.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsGenericProvider.java new file mode 100644 index 00000000000..0439cf26051 --- /dev/null +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsGenericProvider.java @@ -0,0 +1,28 @@ +/******************************************************************************* + * 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 - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.core.language.settings.providers; + +/** + * TODO + */ +final public class LanguageSettingsGenericProvider extends LanguageSettingsSerializableProvider implements ILanguageSettingsEditableProvider { + @Override + public LanguageSettingsGenericProvider clone() throws CloneNotSupportedException { + return (LanguageSettingsGenericProvider) super.clone(); + } + + @Override + public LanguageSettingsGenericProvider cloneShallow() throws CloneNotSupportedException { + return (LanguageSettingsGenericProvider) super.cloneShallow(); + } + +} diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManager_TBD.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManager_TBD.java index 92785fb3645..bb62b5c17d8 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManager_TBD.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManager_TBD.java @@ -32,14 +32,13 @@ public class LanguageSettingsManager_TBD { public static boolean isCustomizedResource(ICConfigurationDescription cfgDescription, IResource rc) { if (rc instanceof IProject) return false; - + for (ILanguageSettingsProvider provider: cfgDescription.getLanguageSettingProviders()) { - // FIXME -// if (!LanguageSettingsManager.isWorkspaceProvider(provider)) { - if (provider instanceof ILanguageSettingsEditableProvider || provider instanceof LanguageSettingsSerializableProvider) { + if (provider instanceof ILanguageSettingsBroadcastingProvider) { for (String languageId : LanguageSettingsManager.getLanguages(rc, cfgDescription)) { List list = provider.getSettingEntries(cfgDescription, rc, languageId); if (list!=null) { + // TODO - check default or check parent? List listDefault = provider.getSettingEntries(null, null, languageId); // != is OK here due as the equal lists will have the same reference in WeakHashSet if (list != listDefault) @@ -62,7 +61,7 @@ public class LanguageSettingsManager_TBD { } return false; } - + public static boolean isEqualExtensionProvider(ILanguageSettingsProvider provider) { return LanguageSettingsExtensionManager.equalsExtensionProvider(provider); } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsSerializableProvider.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsSerializableProvider.java index 74b42440d6c..bb5376ff49d 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsSerializableProvider.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsSerializableProvider.java @@ -31,7 +31,7 @@ import org.w3c.dom.NodeList; * TODO - more JavaDoc, info and hints about class hierarchy * */ -public class LanguageSettingsSerializableProvider extends LanguageSettingsBaseProvider { +public class LanguageSettingsSerializableProvider extends LanguageSettingsBaseProvider implements ILanguageSettingsBroadcastingProvider { public static final String ELEM_PROVIDER = "provider"; //$NON-NLS-1$ private static final String ATTR_ID = "id"; //$NON-NLS-1$ @@ -158,6 +158,7 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr * the language scope. See {@link #getLanguageScope()} * @param entries - language settings entries to set. */ + @Override public void setSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId, List entries) { String rcProjectPath = rc!=null ? rc.getProjectRelativePath().toString() : null; fStorage.setSettingEntries(rcProjectPath, languageId, entries); @@ -190,7 +191,7 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr * This is convenience method not intended to be overridden on purpose. * Override {@link #serializeAttributes(Element)} or * {@link #serializeEntries(Element)} instead. - * + * * @param parentElement - element where to serialize. * @return - newly created element. That element will already be * attached to the parent element. @@ -249,7 +250,7 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr * This is convenience method not intended to be overridden on purpose. * Override {@link #loadAttributes(Element)} or * {@link #loadEntries(Element)} instead. - * + * * @param providerNode - XML element to load provider from. */ final public void load(Element providerNode) { @@ -272,7 +273,7 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr } String id = XmlUtil.determineAttributeValue(parentNode, ATTR_ID); languageScope.add(id); - + } /** @@ -310,7 +311,7 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr public void loadEntries(Element providerNode) { fStorage.loadEntries(providerNode); } - + /** * See {@link #cloneShallow()}. This method is extracted * to avoid expressing {@link #clone()} via {@link #cloneShallow()}. @@ -408,7 +409,7 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr return false; return true; } - + /** * @noreference This method is not intended to be referenced by clients. */ 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 f0ffa918ff1..4a0e688b4ce 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 @@ -23,6 +23,7 @@ import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsEditableProvider; import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider; import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsBaseProvider; +import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsGenericProvider; import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsSerializableProvider; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.util.CDataUtil; @@ -260,6 +261,11 @@ public class LanguageSettingsExtensionManager { return new LanguageSettingsSerializableProvider(); } + // TODO unit test case for this + if (className.equals(LanguageSettingsGenericProvider.class.getName())) { + return new LanguageSettingsGenericProvider(); + } + ILanguageSettingsProvider provider = createProviderCarcass(className, Platform.getExtensionRegistry()); if (provider==null) { IStatus status = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, "Not able to load provider class=" + className); diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java index 91cd8051398..83ecd49a078 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java @@ -337,7 +337,7 @@ public class LanguageSettingsProvidersSerializer { rawGlobalWorkspaceProviders = rawWorkspaceProviders; } - private static List createLanguageLettingsChangeEvents(List serializableProviders) { + private static List createLanguageSettingsChangeEvents(List serializableProviders) { List events = new ArrayList(); List serializableIds = new ArrayList(); @@ -379,11 +379,7 @@ projects: List serializableWorkspaceProviders = new ArrayList(); for (ILanguageSettingsProvider provider : rawGlobalWorkspaceProviders.values()) { if (provider instanceof LanguageSettingsSerializableProvider) { - // serialize all editable providers which are different from corresponding extension - // and serialize all serializable ones that are not editable (those are singletons and we don't know whether they changed) - if (!(provider instanceof ILanguageSettingsEditableProvider) || !LanguageSettingsExtensionManager.equalsExtensionProvider(provider)) { - serializableWorkspaceProviders.add((LanguageSettingsSerializableProvider)provider); - } + serializableWorkspaceProviders.add((LanguageSettingsSerializableProvider)provider); } } try { @@ -394,7 +390,7 @@ projects: serializingLock.acquire(); fileStoreWsp.delete(); // manufacture events while inside the lock - events = createLanguageLettingsChangeEvents(serializableWorkspaceProviders); + events = createLanguageSettingsChangeEvents(serializableWorkspaceProviders); } finally { serializingLock.release(); } @@ -411,7 +407,7 @@ projects: serializingLock.acquire(); XmlUtil.serializeXml(doc, uriStoreWsp); // manufacture events while inside the lock - events = createLanguageLettingsChangeEvents(serializableWorkspaceProviders); + events = createLanguageSettingsChangeEvents(serializableWorkspaceProviders); } finally { serializingLock.release(); } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsEntriesTab.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsEntriesTab.java index 33ef8263fb7..36048bed7fa 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsEntriesTab.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsEntriesTab.java @@ -42,11 +42,11 @@ import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.swt.widgets.TreeItem; +import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsBroadcastingProvider; import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsEditableProvider; import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider; 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.LanguageSettingsSerializableProvider; import org.eclipse.cdt.core.language.settings.providers.ScannerDiscoveryLegacySupport; import org.eclipse.cdt.core.model.ILanguage; import org.eclipse.cdt.core.model.LanguageManager; @@ -122,7 +122,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab { if (entriesParent != null /*&& entriesParent.size() > 0*/) { overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_PARENT; } - } else if (provider instanceof ILanguageSettingsEditableProvider && (page.isForFile() || page.isForFolder())) { + } else if (provider instanceof ILanguageSettingsBroadcastingProvider && (page.isForFile() || page.isForFolder())) { // Assuming that the default entries for a resource are always null. // Using that for performance reasons. See note in PerformDefaults(). List entriesParent = provider.getSettingEntries(null, null, currentLanguageId); @@ -682,7 +682,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab { } private void saveEntries(ILanguageSettingsProvider provider, List entries) { - if (provider instanceof LanguageSettingsSerializableProvider) { + if (provider instanceof ILanguageSettingsEditableProvider) { ICConfigurationDescription cfgDescription = getConfigurationDescription(); IResource rc = getResource(); if (entries!=null && rc!=null) { @@ -697,7 +697,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab { entries = null; } } - ((LanguageSettingsSerializableProvider)provider).setSettingEntries(cfgDescription, rc, currentLanguageId, entries); + ((ILanguageSettingsEditableProvider)provider).setSettingEntries(cfgDescription, rc, currentLanguageId, entries); } } @@ -961,11 +961,11 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab { boolean changed = false; ICConfigurationDescription cfgDescription = getConfigurationDescription(); IResource rc = getResource(); - List providers = cfgDescription.getLanguageSettingProviders(); - List writableProviders = new ArrayList(providers.size()); + List oldProviders = cfgDescription.getLanguageSettingProviders(); + List newProviders = new ArrayList(oldProviders.size()); -providers: for (ILanguageSettingsProvider provider : providers) { - ILanguageSettingsEditableProvider writableProvider = null; +providers: for (ILanguageSettingsProvider provider : oldProviders) { + ILanguageSettingsEditableProvider providerCopy = null; if (provider instanceof ILanguageSettingsEditableProvider) { for (TreeItem langItems : treeLanguages.getItems()) { String langId = (String)langItems.getData(); @@ -973,10 +973,10 @@ providers: for (ILanguageSettingsProvider provider : providers) { if (provider.getSettingEntries(cfgDescription, rc, langId)!=null) { try { // clone providers to be able to "Cancel" in UI - if (writableProvider==null) { - writableProvider = ((ILanguageSettingsEditableProvider) provider).clone(); + if (providerCopy==null) { + providerCopy = ((ILanguageSettingsEditableProvider) provider).clone(); } - writableProvider.setSettingEntries(cfgDescription, rc, langId, null); + providerCopy.setSettingEntries(cfgDescription, rc, langId, null); changed = true; } catch (CloneNotSupportedException e) { CUIPlugin.log("Internal Error: cannot clone provider "+provider.getId(), e); @@ -986,13 +986,13 @@ providers: for (ILanguageSettingsProvider provider : providers) { } } } - if (writableProvider!=null) - writableProviders.add(writableProvider); + if (providerCopy!=null) + newProviders.add(providerCopy); else - writableProviders.add(provider); + newProviders.add(provider); } if (changed) { - cfgDescription.setLanguageSettingProviders(writableProviders); + cfgDescription.setLanguageSettingProviders(newProviders); // updateTreeEntries(); // updateData(getResDesc()); List tableItems = getProviders(currentLanguageId); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderTab.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderTab.java index 81567fc0185..99f0614f3b5 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderTab.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderTab.java @@ -150,14 +150,13 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); Assert.isTrue(rawProvider instanceof ILanguageSettingsEditableProvider); - ILanguageSettingsEditableProvider editableProvider = (ILanguageSettingsEditableProvider)rawProvider; try { - ILanguageSettingsEditableProvider newProvider = editableProvider.clone(); + ILanguageSettingsEditableProvider newProvider = ((ILanguageSettingsEditableProvider)rawProvider).clone(); replaceSelectedProvider(newProvider); return newProvider; } catch (CloneNotSupportedException e) { - CUIPlugin.log("Error cloning provider " + editableProvider.getId(), e); + CUIPlugin.log("Error cloning provider " + rawProvider.getId(), e); // TODO warning dialog for user? } @@ -249,7 +248,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { if (page.isForPrefs()) { initButtons(BUTTON_LABELS_PREF); - + } else { // "I want to try new scanner discovery" temporary checkbox enableProvidersCheckBox = setupCheck(usercomp, Messages.CDTMainWizardPage_TrySD90, 2, GridData.FILL_HORIZONTAL); @@ -545,7 +544,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { // renders better when using temporary presentedProviders = providers; - + int pos = tableProviders.getSelectionIndex(); tableProvidersViewer.setInput(presentedProviders); tableProviders.setSelection(pos); @@ -744,8 +743,8 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { private void performClear(ILanguageSettingsProvider selectedProvider) { if (isWorkingCopy(selectedProvider)) { - if (selectedProvider instanceof ILanguageSettingsEditableProvider) { - ILanguageSettingsEditableProvider editableProvider = (ILanguageSettingsEditableProvider) selectedProvider; + if (selectedProvider instanceof LanguageSettingsSerializableProvider) { + LanguageSettingsSerializableProvider editableProvider = (LanguageSettingsSerializableProvider) selectedProvider; editableProvider.clear(); tableProvidersViewer.update(selectedProvider, null); } @@ -892,7 +891,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { } // seems to render better when temporary is used presentedProviders = providers; - + int pos = tableProviders.getSelectionIndex(); tableProvidersViewer.setInput(presentedProviders); tableProviders.setSelection(pos); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProvidersLabelProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProvidersLabelProvider.java index aa8a4db4db9..a64766e8811 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProvidersLabelProvider.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProvidersLabelProvider.java @@ -49,7 +49,7 @@ class LanguageSettingsProvidersLabelProvider extends LabelProvider { if (url!=null) { imageKey = url.toString(); } - + if (imageKey==null) { if (id.matches(TEST_PLUGIN_ID_PATTERN)) { imageKey = CDTSharedImages.IMG_OBJS_CDT_TESTING; @@ -67,7 +67,7 @@ class LanguageSettingsProvidersLabelProvider extends LabelProvider { String[] overlayKeys = new String[5]; { // TODO temporary for debugging // boolean isSpecial = provider.getId().equals(LegacySupport.MBS_LANGUAGE_SETTINGS_PROVIDER); - + ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); if (rawProvider instanceof LanguageSettingsSerializableProvider) { if (((LanguageSettingsSerializableProvider)rawProvider).isEmpty()) { @@ -84,14 +84,14 @@ class LanguageSettingsProvidersLabelProvider extends LabelProvider { // overlayKeys[IDecoration.TOP_LEFT] = CDTSharedImages.IMG_OVR_CONFIGURATION; // overlayKeys[IDecoration.TOP_LEFT] = CDTSharedImages.IMG_OVR_INDEXED; // overlayKeys[IDecoration.TOP_LEFT] = CDTSharedImages.IMG_OVR_CONTEXT; - + // overlayKeys[IDecoration.TOP_LEFT] = CDTSharedImages.IMG_OVR_PROJECT; } - + } return overlayKeys; } - + @Override public Image getImage(Object element) { if (element instanceof ILanguageSettingsProvider) { diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/UserLanguageSettingsProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/UserLanguageSettingsProvider.java index 0ade1ec3990..cdc60c747e1 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/UserLanguageSettingsProvider.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/UserLanguageSettingsProvider.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.internal.ui.language.settings.providers; @@ -20,7 +20,7 @@ import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsSerializ * */ public class UserLanguageSettingsProvider extends LanguageSettingsSerializableProvider implements ILanguageSettingsEditableProvider { - + @Override public int hashCode() { return super.hashCode()*13 + 1; @@ -43,5 +43,5 @@ public class UserLanguageSettingsProvider extends LanguageSettingsSerializablePr public UserLanguageSettingsProvider clone() throws CloneNotSupportedException { return (UserLanguageSettingsProvider)super.clone(); } - + }