1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-04 14:55:41 +02:00

ILanguageSettingsBroadcastingProvider introduced, some code maintenance

This commit is contained in:
Andrew Gvozdev 2011-11-26 19:16:28 -05:00
parent da8e44baef
commit 0962b1efbb
17 changed files with 279 additions and 224 deletions

View file

@ -15,7 +15,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.eclipse.cdt.core.AbstractExecutableExtensionBase; 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.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICFileDescription; import org.eclipse.cdt.core.settings.model.ICFileDescription;
import org.eclipse.cdt.core.settings.model.ICFolderDescription; 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.resources.IResource;
import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IPath;
//public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase implements ILanguageSettingsEditableProvider { public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase implements ILanguageSettingsBroadcastingProvider {
public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase implements ILanguageSettingsProvider {
@Override @Override
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) { public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) {
@ -92,6 +90,7 @@ public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase
return array; return array;
} }
@Override
public void setSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId, public void setSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId,
List<ICLanguageSettingEntry> entries) { List<ICLanguageSettingEntry> entries) {

View file

@ -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 * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -35,16 +35,19 @@ import org.eclipse.core.runtime.Path;
*/ */
public class LanguageSettingsExtensionsTests extends BaseTestCase { public class LanguageSettingsExtensionsTests extends BaseTestCase {
// These should match corresponding entries defined in plugin.xml // 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"; /*package*/ 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"; /*package*/ 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"; /*package*/ 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"; /*package*/ 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"; /*package*/ 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"; /*package*/ 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"; /*package*/ 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"; /*package*/ 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"; /*package*/ 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_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 // These are made up
private static final String PROVIDER_0 = "test.provider.0.id"; private static final String PROVIDER_0 = "test.provider.0.id";

View file

@ -32,20 +32,20 @@ import org.eclipse.core.resources.IProject;
* Test cases testing LanguageSettingsProvider functionality * Test cases testing LanguageSettingsProvider functionality
*/ */
public class LanguageSettingsListenersTests extends BaseTestCase { public class LanguageSettingsListenersTests extends BaseTestCase {
// Must match provider id defined as extension point // 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_REGISTERER_PROVIDER_ID = LanguageSettingsExtensionsTests.EXTENSION_REGISTERER_PROVIDER_ID;
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_ID = LanguageSettingsExtensionsTests.EXTENSION_EDITABLE_PROVIDER_ID;
private static final String PROVIDER_1 = "test.provider.1.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_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 = "test.provider.custom.global.id";
private static final String PROVIDER_CUSTOM_GLOBAL_NAME = "test.provider.custom.global.name"; 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 static final CMacroEntry SAMPLE_LSE = new CMacroEntry("MACRO", "value",0);
private class MockLanguageSettingsChangeListener implements ILanguageSettingsChangeListener { private class MockLanguageSettingsChangeListener implements ILanguageSettingsChangeListener {
private int count = 0; private int count = 0;
private ILanguageSettingsChangeEvent lastEvent = null; private ILanguageSettingsChangeEvent lastEvent = null;
@Override @Override
public void handleEvent(ILanguageSettingsChangeEvent event) { public void handleEvent(ILanguageSettingsChangeEvent event) {
count++; count++;
@ -55,12 +55,12 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
public int getCount() { public int getCount() {
return count; return count;
} }
public void resetCount() { public void resetCount() {
count = 0; count = 0;
lastEvent = null; lastEvent = null;
} }
public ILanguageSettingsChangeEvent getLastEvent() { public ILanguageSettingsChangeEvent getLastEvent() {
return lastEvent; return lastEvent;
} }
@ -114,7 +114,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
// global listeners providers get registered only lazily // global listeners providers get registered only lazily
assertEquals(0, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID)); assertEquals(0, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID));
} }
/** /**
*/ */
public void testListenerRegisterer_OneOwnedByCfg() throws Exception { 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.1",
"org.eclipse.cdt.core.tests.configuration.id.2", "org.eclipse.cdt.core.tests.configuration.id.2",
}); });
{ {
// get project descriptions // get project descriptions
ICProjectDescription writableProjDescription = CoreModel.getDefault().getProjectDescription(project); ICProjectDescription writableProjDescription = CoreModel.getDefault().getProjectDescription(project);
@ -173,7 +173,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertEquals(2, cfgDescriptions.length); assertEquals(2, cfgDescriptions.length);
ICConfigurationDescription cfgDescription1 = cfgDescriptions[0]; ICConfigurationDescription cfgDescription1 = cfgDescriptions[0];
ICConfigurationDescription cfgDescription2 = cfgDescriptions[1]; ICConfigurationDescription cfgDescription2 = cfgDescriptions[1];
{ {
// create a provider 1 // create a provider 1
ILanguageSettingsProvider mockProvider = new MockListenerRegisterer(PROVIDER_1, PROVIDER_NAME_1); ILanguageSettingsProvider mockProvider = new MockListenerRegisterer(PROVIDER_1, PROVIDER_NAME_1);
@ -192,7 +192,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
List<ILanguageSettingsProvider> storedProviders = cfgDescription2.getLanguageSettingProviders(); List<ILanguageSettingsProvider> storedProviders = cfgDescription2.getLanguageSettingProviders();
assertEquals(1, storedProviders.size()); assertEquals(1, storedProviders.size());
} }
// write to project description // write to project description
CoreModel.getDefault().setProjectDescription(project, writableProjDescription); CoreModel.getDefault().setProjectDescription(project, writableProjDescription);
assertEquals(2, MockListenerRegisterer.getCount(PROVIDER_1)); assertEquals(2, MockListenerRegisterer.getCount(PROVIDER_1));
@ -211,9 +211,9 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
project.delete(true, null); project.delete(true, null);
assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_1)); assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_1));
} }
} }
/** /**
*/ */
public void testListenerRegisterer_OneGlobal() throws Exception { public void testListenerRegisterer_OneGlobal() throws Exception {
@ -225,7 +225,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations(); ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations();
assertEquals(1, cfgDescriptions.length); assertEquals(1, cfgDescriptions.length);
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
// add global provider // add global provider
ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_REGISTERER_PROVIDER_ID); ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_REGISTERER_PROVIDER_ID);
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
@ -233,7 +233,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
cfgDescription.setLanguageSettingProviders(providers); cfgDescription.setLanguageSettingProviders(providers);
List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders(); List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders();
assertEquals(1, storedProviders.size()); assertEquals(1, storedProviders.size());
// write to project description // write to project description
CoreModel.getDefault().setProjectDescription(project, writableProjDescription); CoreModel.getDefault().setProjectDescription(project, writableProjDescription);
assertEquals(1, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID)); assertEquals(1, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID));
@ -252,9 +252,9 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
project.delete(true, null); project.delete(true, null);
assertEquals(0, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID)); assertEquals(0, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID));
} }
} }
/** /**
*/ */
public void testListenerRegisterer_TwoGlobal() throws Exception { 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.1",
"org.eclipse.cdt.core.tests.configuration.id.2", "org.eclipse.cdt.core.tests.configuration.id.2",
}); });
{ {
// retrieve global provider // retrieve global provider
ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_REGISTERER_PROVIDER_ID); ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_REGISTERER_PROVIDER_ID);
@ -273,7 +273,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertEquals(2, cfgDescriptions.length); assertEquals(2, cfgDescriptions.length);
ICConfigurationDescription cfgDescription1 = cfgDescriptions[0]; ICConfigurationDescription cfgDescription1 = cfgDescriptions[0];
ICConfigurationDescription cfgDescription2 = cfgDescriptions[1]; ICConfigurationDescription cfgDescription2 = cfgDescriptions[1];
{ {
// add global provider to configuration 1 // add global provider to configuration 1
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
@ -309,7 +309,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertEquals(0, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID)); assertEquals(0, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID));
} }
} }
/** /**
*/ */
public void testListenerRegisterer_TwoGlobalMinusOne() throws Exception { 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.1",
"org.eclipse.cdt.core.tests.configuration.id.2", "org.eclipse.cdt.core.tests.configuration.id.2",
}); });
{ {
// retrieve workspace provider // retrieve workspace provider
ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_REGISTERER_PROVIDER_ID); ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_REGISTERER_PROVIDER_ID);
@ -328,7 +328,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertEquals(2, cfgDescriptions.length); assertEquals(2, cfgDescriptions.length);
ICConfigurationDescription cfgDescription1 = cfgDescriptions[0]; ICConfigurationDescription cfgDescription1 = cfgDescriptions[0];
ICConfigurationDescription cfgDescription2 = cfgDescriptions[1]; ICConfigurationDescription cfgDescription2 = cfgDescriptions[1];
{ {
// add global provider to configuration 1 // add global provider to configuration 1
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
@ -359,7 +359,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertEquals(2, cfgDescriptions.length); assertEquals(2, cfgDescriptions.length);
ICConfigurationDescription cfgDescription1 = cfgDescriptions[0]; ICConfigurationDescription cfgDescription1 = cfgDescriptions[0];
ICConfigurationDescription cfgDescription2 = cfgDescriptions[1]; ICConfigurationDescription cfgDescription2 = cfgDescriptions[1];
{ {
// remove global provider from configuration 1 // remove global provider from configuration 1
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
@ -377,7 +377,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertEquals(0, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID)); assertEquals(0, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID));
} }
} }
/** /**
*/ */
public void testListenerRegisterer_GlobalProviderTwoProjects() throws Exception { public void testListenerRegisterer_GlobalProviderTwoProjects() throws Exception {
@ -390,7 +390,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations(); ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations();
assertEquals(1, cfgDescriptions.length); assertEquals(1, cfgDescriptions.length);
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
// add global provider // add global provider
ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_REGISTERER_PROVIDER_ID); ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_REGISTERER_PROVIDER_ID);
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
@ -398,7 +398,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
cfgDescription.setLanguageSettingProviders(providers); cfgDescription.setLanguageSettingProviders(providers);
List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders(); List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders();
assertEquals(1, storedProviders.size()); assertEquals(1, storedProviders.size());
// write to project description // write to project description
CoreModel.getDefault().setProjectDescription(project_1, writableProjDescription); CoreModel.getDefault().setProjectDescription(project_1, writableProjDescription);
assertEquals(1, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID)); assertEquals(1, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID));
@ -413,7 +413,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations(); ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations();
assertEquals(1, cfgDescriptions.length); assertEquals(1, cfgDescriptions.length);
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
// add global provider // add global provider
ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_REGISTERER_PROVIDER_ID); ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_REGISTERER_PROVIDER_ID);
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
@ -421,12 +421,12 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
cfgDescription.setLanguageSettingProviders(providers); cfgDescription.setLanguageSettingProviders(providers);
List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders(); List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders();
assertEquals(1, storedProviders.size()); assertEquals(1, storedProviders.size());
// write to project description // write to project description
CoreModel.getDefault().setProjectDescription(project_2, writableProjDescription); CoreModel.getDefault().setProjectDescription(project_2, writableProjDescription);
assertEquals(1, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID)); assertEquals(1, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID));
} }
{ {
// close project 1 // close project 1
project_1.close(null); project_1.close(null);
@ -437,7 +437,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
project_2.close(null); project_2.close(null);
assertEquals(0, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID)); assertEquals(0, MockListenerRegisterer.getCount(EXTENSION_REGISTERER_PROVIDER_ID));
} }
} }
/** /**
@ -466,17 +466,17 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_CUSTOM_GLOBAL)); assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_CUSTOM_GLOBAL));
} }
} }
/** /**
*/ */
public void testListenerRegisterer_GlobalProviderAddRemoveOutsideTheProject() throws Exception { public void testListenerRegisterer_GlobalProviderAddRemoveOutsideTheProject() throws Exception {
ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(PROVIDER_CUSTOM_GLOBAL); ILanguageSettingsProvider workspaceProvider = LanguageSettingsManager.getWorkspaceProvider(PROVIDER_CUSTOM_GLOBAL);
// the global custom provider has not been added yet // the global custom provider has not been added yet
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(workspaceProvider); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(workspaceProvider);
assertNull(rawProvider); assertNull(rawProvider);
assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_CUSTOM_GLOBAL)); assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_CUSTOM_GLOBAL));
// prepare project // prepare project
List<ILanguageSettingsProvider> workspaceProvidersOriginal = LanguageSettingsManager.getWorkspaceProviders(); List<ILanguageSettingsProvider> workspaceProvidersOriginal = LanguageSettingsManager.getWorkspaceProviders();
IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName()); IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName());
@ -487,14 +487,14 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations(); ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations();
assertEquals(1, cfgDescriptions.length); assertEquals(1, cfgDescriptions.length);
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
// add global provider // add global provider
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(workspaceProvider); providers.add(workspaceProvider);
cfgDescription.setLanguageSettingProviders(providers); cfgDescription.setLanguageSettingProviders(providers);
List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders(); List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders();
assertEquals(1, storedProviders.size()); assertEquals(1, storedProviders.size());
// write to project description // write to project description
CoreModel.getDefault().setProjectDescription(project, writableProjDescription); CoreModel.getDefault().setProjectDescription(project, writableProjDescription);
// the global custom provider has not been added yet // 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)); assertEquals(1, MockListenerRegisterer.getCount(PROVIDER_CUSTOM_GLOBAL));
} }
{ {
// remove global provider // remove global provider
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(workspaceProvidersOriginal); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(workspaceProvidersOriginal);
LanguageSettingsManager.setWorkspaceProviders(providers); LanguageSettingsManager.setWorkspaceProviders(providers);
assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_CUSTOM_GLOBAL)); assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_CUSTOM_GLOBAL));
} }
{ {
// close project // close project
project.close(null); project.close(null);
assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_CUSTOM_GLOBAL)); assertEquals(0, MockListenerRegisterer.getCount(PROVIDER_CUSTOM_GLOBAL));
} }
} }
/** /**
*/ */
public void testNotification_cfgProvider_AddEmptyProvider() throws Exception { public void testNotification_cfgProvider_AddEmptyProvider() throws Exception {
@ -545,12 +545,12 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
// write to project description // write to project description
CoreModel.getDefault().setProjectDescription(project, writableProjDescription); CoreModel.getDefault().setProjectDescription(project, writableProjDescription);
} }
// register mock listener to inspect the notifications // register mock listener to inspect the notifications
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener);
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
// Add empty provider // Add empty provider
{ {
// get project descriptions // get project descriptions
@ -559,7 +559,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations(); ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations();
assertEquals(1, cfgDescriptions.length); assertEquals(1, cfgDescriptions.length);
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
// create a provider and add to cfgDescription // create a provider and add to cfgDescription
ILanguageSettingsProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_1, PROVIDER_NAME_1); ILanguageSettingsProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_1, PROVIDER_NAME_1);
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
@ -567,16 +567,16 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
cfgDescription.setLanguageSettingProviders(providers); cfgDescription.setLanguageSettingProviders(providers);
List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders(); List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders();
assertEquals(1, storedProviders.size()); assertEquals(1, storedProviders.size());
// write to project description // write to project description
CoreModel.getDefault().setProjectDescription(project, writableProjDescription); CoreModel.getDefault().setProjectDescription(project, writableProjDescription);
} }
// No notifications expected // No notifications expected
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
} }
/** /**
*/ */
public void testNotification_cfgProvider_AddNonEmptyProvider() throws Exception { public void testNotification_cfgProvider_AddNonEmptyProvider() throws Exception {
@ -589,22 +589,22 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations(); ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations();
assertEquals(1, cfgDescriptions.length); assertEquals(1, cfgDescriptions.length);
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
// clear providers // clear providers
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
cfgDescription.setLanguageSettingProviders(providers); cfgDescription.setLanguageSettingProviders(providers);
List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders(); List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders();
assertEquals(0, storedProviders.size()); assertEquals(0, storedProviders.size());
// write to project description // write to project description
CoreModel.getDefault().setProjectDescription(project, writableProjDescription); CoreModel.getDefault().setProjectDescription(project, writableProjDescription);
} }
// register mock listener to inspect the notifications // register mock listener to inspect the notifications
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener);
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
// Add non-empty provider // Add non-empty provider
{ {
// get project descriptions // get project descriptions
@ -614,7 +614,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertEquals(1, cfgDescriptions.length); assertEquals(1, cfgDescriptions.length);
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
String cfgDescriptionId = cfgDescription.getId(); String cfgDescriptionId = cfgDescription.getId();
// create a provider and add entries // create a provider and add entries
MockLanguageSettingsEditableProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_1, PROVIDER_NAME_1); MockLanguageSettingsEditableProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_1, PROVIDER_NAME_1);
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
@ -625,7 +625,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
cfgDescription.setLanguageSettingProviders(providers); cfgDescription.setLanguageSettingProviders(providers);
List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders(); List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders();
assertEquals(1, storedProviders.size()); assertEquals(1, storedProviders.size());
// write to project description // write to project description
CoreModel.getDefault().setProjectDescription(project, writableProjDescription); CoreModel.getDefault().setProjectDescription(project, writableProjDescription);
@ -633,18 +633,18 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertEquals(1, mockLseListener.getCount()); assertEquals(1, mockLseListener.getCount());
ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent();
assertNotNull(event); assertNotNull(event);
assertEquals(project.getName(), event.getProjectName()); assertEquals(project.getName(), event.getProjectName());
assertEquals(1, event.getConfigurationDescriptionIds().length); assertEquals(1, event.getConfigurationDescriptionIds().length);
assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]); assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]);
} }
} }
/** /**
*/ */
public void testNotification_cfgProvider_SerializeEntries() throws Exception { public void testNotification_cfgProvider_SerializeEntries() throws Exception {
IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName()); IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName());
// add the mock provider // add the mock provider
{ {
// get project descriptions // get project descriptions
@ -653,18 +653,18 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations(); ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations();
assertEquals(1, cfgDescriptions.length); assertEquals(1, cfgDescriptions.length);
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
// create a provider and add to cfgDescription // create a provider and add to cfgDescription
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(new MockLanguageSettingsEditableProvider(PROVIDER_1, PROVIDER_NAME_1)); providers.add(new MockLanguageSettingsEditableProvider(PROVIDER_1, PROVIDER_NAME_1));
cfgDescription.setLanguageSettingProviders(providers); cfgDescription.setLanguageSettingProviders(providers);
List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders(); List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders();
assertEquals(1, storedProviders.size()); assertEquals(1, storedProviders.size());
// write to project description // write to project description
CoreModel.getDefault().setProjectDescription(project, writableProjDescription); CoreModel.getDefault().setProjectDescription(project, writableProjDescription);
} }
// register mock listener to inspect the notifications // register mock listener to inspect the notifications
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener);
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
@ -679,7 +679,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertEquals(1, cfgDescriptions.length); assertEquals(1, cfgDescriptions.length);
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
String cfgDescriptionId = cfgDescription.getId(); String cfgDescriptionId = cfgDescription.getId();
// Add entries // Add entries
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
entries.add(SAMPLE_LSE); entries.add(SAMPLE_LSE);
@ -690,25 +690,25 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
mockProvider.setSettingEntries(cfgDescription, project, null, entries); mockProvider.setSettingEntries(cfgDescription, project, null, entries);
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
// Serialize settings // Serialize settings
LanguageSettingsProvidersSerializer.serializeLanguageSettings(prjDescription); LanguageSettingsProvidersSerializer.serializeLanguageSettings(prjDescription);
// inspect event // inspect event
assertEquals(1, mockLseListener.getCount()); assertEquals(1, mockLseListener.getCount());
ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent();
assertNotNull(event); assertNotNull(event);
assertEquals(project.getName(), event.getProjectName()); assertEquals(project.getName(), event.getProjectName());
assertEquals(1, event.getConfigurationDescriptionIds().length); assertEquals(1, event.getConfigurationDescriptionIds().length);
assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]); assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]);
} }
} }
/** /**
*/ */
public void testNotification_cfgProvider_SerializeEntriesConcurrent() throws Exception { public void testNotification_cfgProvider_SerializeEntriesConcurrent() throws Exception {
IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName()); IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName());
// add the mock provider // add the mock provider
{ {
// get project descriptions // get project descriptions
@ -717,25 +717,25 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations(); ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations();
assertEquals(1, cfgDescriptions.length); assertEquals(1, cfgDescriptions.length);
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
// create a provider and add to cfgDescription // create a provider and add to cfgDescription
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(new MockLanguageSettingsEditableProvider(PROVIDER_1, PROVIDER_NAME_1)); providers.add(new MockLanguageSettingsEditableProvider(PROVIDER_1, PROVIDER_NAME_1));
cfgDescription.setLanguageSettingProviders(providers); cfgDescription.setLanguageSettingProviders(providers);
List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders(); List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders();
assertEquals(1, storedProviders.size()); assertEquals(1, storedProviders.size());
// write to project description // write to project description
CoreModel.getDefault().setProjectDescription(project, writableProjDescription); CoreModel.getDefault().setProjectDescription(project, writableProjDescription);
} }
// register mock listener to inspect the notifications // register mock listener to inspect the notifications
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener);
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
// Change the provider's entries concurrently // Change the provider's entries concurrently
// get project descriptions // get project descriptions
ICProjectDescription prjDescription_1 = CoreModel.getDefault().getProjectDescription(project, false); ICProjectDescription prjDescription_1 = CoreModel.getDefault().getProjectDescription(project, false);
assertNotNull(prjDescription_1); assertNotNull(prjDescription_1);
@ -746,7 +746,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertEquals(1, cfgDescriptions.length); assertEquals(1, cfgDescriptions.length);
ICConfigurationDescription cfgDescriptionWritable = cfgDescriptions[0]; ICConfigurationDescription cfgDescriptionWritable = cfgDescriptions[0];
String cfgDescriptionId = cfgDescriptionWritable.getId(); String cfgDescriptionId = cfgDescriptionWritable.getId();
// Add entries // Add entries
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
entries.add(SAMPLE_LSE); entries.add(SAMPLE_LSE);
@ -755,19 +755,19 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertTrue(providers.get(0) instanceof MockLanguageSettingsEditableProvider); assertTrue(providers.get(0) instanceof MockLanguageSettingsEditableProvider);
MockLanguageSettingsEditableProvider mockProvider = (MockLanguageSettingsEditableProvider) providers.get(0); MockLanguageSettingsEditableProvider mockProvider = (MockLanguageSettingsEditableProvider) providers.get(0);
mockProvider.setSettingEntries(cfgDescriptionWritable, project, null, entries); mockProvider.setSettingEntries(cfgDescriptionWritable, project, null, entries);
// reset count // reset count
mockLseListener.resetCount(); mockLseListener.resetCount();
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertNull(mockLseListener.getLastEvent()); assertNull(mockLseListener.getLastEvent());
// Serialize settings // Serialize settings
LanguageSettingsProvidersSerializer.serializeLanguageSettings(prjDescription_1); LanguageSettingsProvidersSerializer.serializeLanguageSettings(prjDescription_1);
// inspect event // inspect event
assertEquals(1, mockLseListener.getCount()); assertEquals(1, mockLseListener.getCount());
ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent();
assertNotNull(event); assertNotNull(event);
assertEquals(project.getName(), event.getProjectName()); assertEquals(project.getName(), event.getProjectName());
assertEquals(1, event.getConfigurationDescriptionIds().length); assertEquals(1, event.getConfigurationDescriptionIds().length);
assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]); assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]);
@ -777,7 +777,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertEquals(1, cfgDescriptions.length); assertEquals(1, cfgDescriptions.length);
ICConfigurationDescription cfgDescriptionWritable = cfgDescriptions[0]; ICConfigurationDescription cfgDescriptionWritable = cfgDescriptions[0];
String cfgDescriptionId = cfgDescriptionWritable.getId(); String cfgDescriptionId = cfgDescriptionWritable.getId();
// Add same entries // Add same entries
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
entries.add(SAMPLE_LSE); entries.add(SAMPLE_LSE);
@ -786,12 +786,12 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertTrue(providers.get(0) instanceof MockLanguageSettingsEditableProvider); assertTrue(providers.get(0) instanceof MockLanguageSettingsEditableProvider);
MockLanguageSettingsEditableProvider mockProvider = (MockLanguageSettingsEditableProvider) providers.get(0); MockLanguageSettingsEditableProvider mockProvider = (MockLanguageSettingsEditableProvider) providers.get(0);
mockProvider.setSettingEntries(cfgDescriptionWritable, project, null, entries); mockProvider.setSettingEntries(cfgDescriptionWritable, project, null, entries);
// reset count // reset count
mockLseListener.resetCount(); mockLseListener.resetCount();
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertNull(mockLseListener.getLastEvent()); assertNull(mockLseListener.getLastEvent());
// Serialize settings // Serialize settings
LanguageSettingsProvidersSerializer.serializeLanguageSettings(prjDescription_2); LanguageSettingsProvidersSerializer.serializeLanguageSettings(prjDescription_2);
// inspect event // inspect event
@ -800,7 +800,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertNull(event); assertNull(event);
} }
} }
/** /**
*/ */
public void testNotification_globalProvider_AddEmptyProvider() throws Exception { public void testNotification_globalProvider_AddEmptyProvider() throws Exception {
@ -823,12 +823,12 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
// write to project description // write to project description
CoreModel.getDefault().setProjectDescription(project, writableProjDescription); CoreModel.getDefault().setProjectDescription(project, writableProjDescription);
} }
// register mock listener to inspect the notifications // register mock listener to inspect the notifications
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener);
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
// Add empty global provider // Add empty global provider
{ {
// get project descriptions // get project descriptions
@ -837,7 +837,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations(); ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations();
assertEquals(1, cfgDescriptions.length); assertEquals(1, cfgDescriptions.length);
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
// retrieve a global provider // retrieve a global provider
ILanguageSettingsProvider wspProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID); ILanguageSettingsProvider wspProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID);
assertNotNull(wspProvider); assertNotNull(wspProvider);
@ -852,16 +852,16 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
cfgDescription.setLanguageSettingProviders(providers); cfgDescription.setLanguageSettingProviders(providers);
List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders(); List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders();
assertEquals(1, storedProviders.size()); assertEquals(1, storedProviders.size());
// write to project description // write to project description
CoreModel.getDefault().setProjectDescription(project, writableProjDescription); CoreModel.getDefault().setProjectDescription(project, writableProjDescription);
} }
// No notifications expected // No notifications expected
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
} }
/** /**
*/ */
public void testNotification_globalProvider_AddNonEmptyProvider() throws Exception { public void testNotification_globalProvider_AddNonEmptyProvider() throws Exception {
@ -874,22 +874,22 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations(); ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations();
assertEquals(1, cfgDescriptions.length); assertEquals(1, cfgDescriptions.length);
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
// clear providers // clear providers
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
cfgDescription.setLanguageSettingProviders(providers); cfgDescription.setLanguageSettingProviders(providers);
List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders(); List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders();
assertEquals(0, storedProviders.size()); assertEquals(0, storedProviders.size());
// write to project description // write to project description
CoreModel.getDefault().setProjectDescription(project, writableProjDescription); CoreModel.getDefault().setProjectDescription(project, writableProjDescription);
} }
// register mock listener to inspect the notifications // register mock listener to inspect the notifications
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener);
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
// Add non-empty provider // Add non-empty provider
{ {
// get project descriptions // get project descriptions
@ -899,7 +899,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertEquals(1, cfgDescriptions.length); assertEquals(1, cfgDescriptions.length);
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
String cfgDescriptionId = cfgDescription.getId(); String cfgDescriptionId = cfgDescription.getId();
// retrieve a global provider // retrieve a global provider
ILanguageSettingsProvider wspProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID); ILanguageSettingsProvider wspProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID);
assertNotNull(wspProvider); assertNotNull(wspProvider);
@ -925,21 +925,21 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertEquals(1, mockLseListener.getCount()); assertEquals(1, mockLseListener.getCount());
ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent();
assertNotNull(event); assertNotNull(event);
assertEquals(project.getName(), event.getProjectName()); assertEquals(project.getName(), event.getProjectName());
assertEquals(1, event.getConfigurationDescriptionIds().length); assertEquals(1, event.getConfigurationDescriptionIds().length);
assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]); assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]);
} }
} }
/** /**
*/ */
public void testNotification_globalProvider_SerializeEntries() throws Exception { public void testNotification_globalProvider_SerializeEntries() throws Exception {
IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName()); IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName());
// register mock listener to inspect the notifications // register mock listener to inspect the notifications
LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener); LanguageSettingsProvidersSerializer.registerLanguageSettingsChangeListener(mockLseListener);
// Add empty global provider // Add empty global provider
{ {
// get project descriptions // get project descriptions
@ -948,7 +948,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations(); ICConfigurationDescription[] cfgDescriptions = writableProjDescription.getConfigurations();
assertEquals(1, cfgDescriptions.length); assertEquals(1, cfgDescriptions.length);
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
// retrieve a global provider // retrieve a global provider
ILanguageSettingsProvider wspProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID); ILanguageSettingsProvider wspProvider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID);
assertNotNull(wspProvider); assertNotNull(wspProvider);
@ -963,7 +963,7 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
cfgDescription.setLanguageSettingProviders(providers); cfgDescription.setLanguageSettingProviders(providers);
List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders(); List<ILanguageSettingsProvider> storedProviders = cfgDescription.getLanguageSettingProviders();
assertEquals(1, storedProviders.size()); assertEquals(1, storedProviders.size());
// write to project description // write to project description
CoreModel.getDefault().setProjectDescription(project, writableProjDescription); CoreModel.getDefault().setProjectDescription(project, writableProjDescription);
} }
@ -981,12 +981,12 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
entries.add(SAMPLE_LSE); entries.add(SAMPLE_LSE);
((MockLanguageSettingsEditableProvider) rawProvider).setSettingEntries(null, project, null, entries); ((MockLanguageSettingsEditableProvider) rawProvider).setSettingEntries(null, project, null, entries);
assertEquals(SAMPLE_LSE, wspProvider.getSettingEntries(null, project, null).get(0)); assertEquals(SAMPLE_LSE, wspProvider.getSettingEntries(null, project, null).get(0));
// reset count // reset count
mockLseListener.resetCount(); mockLseListener.resetCount();
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
// Serialize settings // Serialize settings
LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace(); LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace();
@ -997,12 +997,12 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertEquals(1, cfgDescriptions.length); assertEquals(1, cfgDescriptions.length);
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
String cfgDescriptionId = cfgDescription.getId(); String cfgDescriptionId = cfgDescription.getId();
// inspect event // inspect event
assertEquals(1, mockLseListener.getCount()); assertEquals(1, mockLseListener.getCount());
ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent();
assertNotNull(event); assertNotNull(event);
assertEquals(project.getName(), event.getProjectName()); assertEquals(project.getName(), event.getProjectName());
assertEquals(1, event.getConfigurationDescriptionIds().length); assertEquals(1, event.getConfigurationDescriptionIds().length);
assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]); assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]);
@ -1016,15 +1016,15 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertTrue(rawProvider instanceof MockLanguageSettingsEditableProvider); assertTrue(rawProvider instanceof MockLanguageSettingsEditableProvider);
// clear the provider again // clear the provider again
((MockLanguageSettingsEditableProvider) rawProvider).clear(); ((MockLanguageSettingsEditableProvider) rawProvider).clear();
// reset count // reset count
mockLseListener.resetCount(); mockLseListener.resetCount();
assertEquals(0, mockLseListener.getCount()); assertEquals(0, mockLseListener.getCount());
assertEquals(null, mockLseListener.getLastEvent()); assertEquals(null, mockLseListener.getLastEvent());
// Serialize settings // Serialize settings
LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace(); LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace();
// get cfgDescriptionId // get cfgDescriptionId
ICProjectDescription prjDescription = CoreModel.getDefault().getProjectDescription(project, false); ICProjectDescription prjDescription = CoreModel.getDefault().getProjectDescription(project, false);
assertNotNull(prjDescription); assertNotNull(prjDescription);
@ -1032,12 +1032,12 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertEquals(1, cfgDescriptions.length); assertEquals(1, cfgDescriptions.length);
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
String cfgDescriptionId = cfgDescription.getId(); String cfgDescriptionId = cfgDescription.getId();
// inspect event // inspect event
assertEquals(1, mockLseListener.getCount()); assertEquals(1, mockLseListener.getCount());
ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent(); ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent();
assertNotNull(event); assertNotNull(event);
assertEquals(project.getName(), event.getProjectName()); assertEquals(project.getName(), event.getProjectName());
assertEquals(1, event.getConfigurationDescriptionIds().length); assertEquals(1, event.getConfigurationDescriptionIds().length);
assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]); assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]);

View file

@ -42,9 +42,10 @@ import org.eclipse.core.runtime.Path;
*/ */
public class LanguageSettingsManagerTests extends BaseTestCase { public class LanguageSettingsManagerTests extends BaseTestCase {
// Those should match ids of plugin extensions defined in plugin.xml // 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_BASE_PROVIDER_ID = LanguageSettingsExtensionsTests.EXTENSION_BASE_PROVIDER_ID;
private static final String EXTENSION_EDITABLE_PROVIDER_ID = "org.eclipse.cdt.core.tests.custom.editable.language.settings.provider"; private static final String EXTENSION_SERIALIZABLE_PROVIDER_ID = LanguageSettingsExtensionsTests.EXTENSION_SERIALIZABLE_PROVIDER_ID;
private static final String EXTENSION_EDITABLE_PROVIDER_NAME = "Test Plugin Mock Editable Language Settings Provider"; 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 IFile FILE_0 = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path("/project/path0"));
private static final String CFG_ID = "test.configuration.id"; private static final String CFG_ID = "test.configuration.id";
@ -688,14 +689,14 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
*/ */
public void testWorkspaceProvider_Basic() throws Exception { public void testWorkspaceProvider_Basic() throws Exception {
// get workspace provider // get workspace provider
ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID); ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID);
assertEquals(EXTENSION_EDITABLE_PROVIDER_ID, provider.getId()); assertEquals(EXTENSION_SERIALIZABLE_PROVIDER_ID, provider.getId());
assertEquals(EXTENSION_EDITABLE_PROVIDER_NAME, provider.getName()); assertEquals(EXTENSION_SERIALIZABLE_PROVIDER_NAME, provider.getName());
// get raw provider // get raw provider
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
assertEquals(EXTENSION_EDITABLE_PROVIDER_ID, rawProvider.getId()); assertEquals(EXTENSION_SERIALIZABLE_PROVIDER_ID, rawProvider.getId());
assertEquals(EXTENSION_EDITABLE_PROVIDER_NAME, rawProvider.getName()); assertEquals(EXTENSION_SERIALIZABLE_PROVIDER_NAME, rawProvider.getName());
assertTrue(rawProvider instanceof LanguageSettingsSerializableProvider); assertTrue(rawProvider instanceof LanguageSettingsSerializableProvider);
// assert they are not the same object // assert they are not the same object
assertNotSame(provider, rawProvider); assertNotSame(provider, rawProvider);
@ -726,8 +727,8 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
* Test workspace providers equality. * Test workspace providers equality.
*/ */
public void testWorkspaceProvider_Equals() throws Exception { public void testWorkspaceProvider_Equals() throws Exception {
ILanguageSettingsProvider providerA = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID); ILanguageSettingsProvider providerA = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID);
ILanguageSettingsProvider providerB = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID); ILanguageSettingsProvider providerB = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID);
assertEquals(providerA, providerB); assertEquals(providerA, providerB);
} }
@ -738,7 +739,7 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
// get sample workspace provider // get sample workspace provider
ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID); ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_EDITABLE_PROVIDER_ID);
{ {
// check on its entries // check on its entries (1 predefined entry via extension point)
List<ICLanguageSettingEntry> entries = provider.getSettingEntries(null, null, null); List<ICLanguageSettingEntry> entries = provider.getSettingEntries(null, null, null);
assertEquals(1, entries.size()); // defined in the extension assertEquals(1, entries.size()); // defined in the extension
} }
@ -771,7 +772,7 @@ public class LanguageSettingsManagerTests extends BaseTestCase {
*/ */
public void testWorkspaceProvider_ReplaceWithWorkspaceProvider() throws Exception { public void testWorkspaceProvider_ReplaceWithWorkspaceProvider() throws Exception {
// get sample workspace provider // 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); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
assertNotSame(provider, rawProvider); assertNotSame(provider, rawProvider);

View file

@ -40,12 +40,13 @@ import org.w3c.dom.Element;
* Test cases testing LanguageSettingsProvider functionality * Test cases testing LanguageSettingsProvider functionality
*/ */
public class LanguageSettingsPersistenceProjectTests extends BaseTestCase { 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_PROJECT_XML = ".settings/language.settings.xml";
private static final String LANGUAGE_SETTINGS_WORKSPACE_XML = "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 = "test.configuration.id.0";
private static final String CFG_ID_2 = "test.configuration.id.2"; 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. * Constructor.
* @param name - name of the test. * @param name - name of the test.
@ -200,7 +187,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
int originalSize = originalProviders.size(); int originalSize = originalProviders.size();
// create new provider list // create new provider list
LanguageSettingsSerializableProvider mockProvider = new MockEditableProvider(PROVIDER_0, PROVIDER_NAME_0); LanguageSettingsSerializableProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_0, PROVIDER_NAME_0);
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(originalProviders); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(originalProviders);
providers.add(mockProvider); providers.add(mockProvider);
assertTrue(originalSize != providers.size()); assertTrue(originalSize != providers.size());
@ -245,7 +232,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
ICConfigurationDescription cfgDescription = cfgDescriptions[0]; ICConfigurationDescription cfgDescription = cfgDescriptions[0];
// create a provider // 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.setStoringEntriesInProjectArea(true);
mockProvider.setSettingEntries(cfgDescription, null, null, entries); mockProvider.setSettingEntries(cfgDescription, null, null, entries);
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
@ -268,7 +255,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
List<ILanguageSettingsProvider> providers = cfgDescription.getLanguageSettingProviders(); List<ILanguageSettingsProvider> providers = cfgDescription.getLanguageSettingProviders();
assertEquals(1, providers.size()); assertEquals(1, providers.size());
ILanguageSettingsProvider loadedProvider = providers.get(0); ILanguageSettingsProvider loadedProvider = providers.get(0);
assertTrue(loadedProvider instanceof LanguageSettingsSerializableProvider); assertTrue(loadedProvider instanceof MockLanguageSettingsEditableProvider);
assertEquals(PROVIDER_0, loadedProvider.getId()); assertEquals(PROVIDER_0, loadedProvider.getId());
assertEquals(PROVIDER_NAME_0, loadedProvider.getName()); assertEquals(PROVIDER_NAME_0, loadedProvider.getName());
@ -287,7 +274,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
List<ILanguageSettingsProvider> providers = cfgDescription.getLanguageSettingProviders(); List<ILanguageSettingsProvider> providers = cfgDescription.getLanguageSettingProviders();
assertEquals(1, providers.size()); assertEquals(1, providers.size());
ILanguageSettingsProvider loadedProvider = providers.get(0); ILanguageSettingsProvider loadedProvider = providers.get(0);
assertTrue(loadedProvider instanceof LanguageSettingsSerializableProvider); assertTrue(loadedProvider instanceof MockLanguageSettingsEditableProvider);
assertEquals(PROVIDER_0, loadedProvider.getId()); assertEquals(PROVIDER_0, loadedProvider.getId());
assertEquals(PROVIDER_NAME_0, loadedProvider.getName()); assertEquals(PROVIDER_NAME_0, loadedProvider.getName());
@ -375,16 +362,16 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
public void testWorkspacePersistence_ShadowedExtensionProvider() throws Exception { public void testWorkspacePersistence_ShadowedExtensionProvider() throws Exception {
{ {
// get the raw extension provider // 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); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
// confirm its type and name // confirm its type and name
assertTrue(rawProvider instanceof LanguageSettingsBaseProvider); assertTrue(rawProvider instanceof LanguageSettingsBaseProvider);
assertEquals(EXTENSION_PROVIDER_ID, rawProvider.getId()); assertEquals(EXTENSION_BASE_PROVIDER_ID, rawProvider.getId());
assertEquals(EXTENSION_PROVIDER_NAME, rawProvider.getName()); assertEquals(EXTENSION_BASE_PROVIDER_NAME, rawProvider.getName());
} }
{ {
// replace extension provider // 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<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(provider); providers.add(provider);
// note that this will also serialize workspace providers // note that this will also serialize workspace providers
@ -392,10 +379,10 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
} }
{ {
// doublecheck it's in the list // 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); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
assertTrue(rawProvider instanceof MockLanguageSettingsSerializableProvider); assertTrue(rawProvider instanceof MockLanguageSettingsSerializableProvider);
assertEquals(EXTENSION_PROVIDER_ID, rawProvider.getId()); assertEquals(EXTENSION_BASE_PROVIDER_ID, rawProvider.getId());
assertEquals(PROVIDER_NAME_0, rawProvider.getName()); assertEquals(PROVIDER_NAME_0, rawProvider.getName());
} }
@ -403,10 +390,10 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
// re-load to check serialization // re-load to check serialization
LanguageSettingsProvidersSerializer.loadLanguageSettingsWorkspace(); LanguageSettingsProvidersSerializer.loadLanguageSettingsWorkspace();
ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_PROVIDER_ID); ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_BASE_PROVIDER_ID);
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
assertTrue(rawProvider instanceof MockLanguageSettingsSerializableProvider); assertTrue(rawProvider instanceof MockLanguageSettingsSerializableProvider);
assertEquals(EXTENSION_PROVIDER_ID, rawProvider.getId()); assertEquals(EXTENSION_BASE_PROVIDER_ID, rawProvider.getId());
assertEquals(PROVIDER_NAME_0, rawProvider.getName()); assertEquals(PROVIDER_NAME_0, rawProvider.getName());
} }
@ -416,21 +403,21 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
} }
{ {
// doublecheck original one is in the list // 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); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
assertTrue(rawProvider instanceof LanguageSettingsBaseProvider); assertTrue(rawProvider instanceof LanguageSettingsBaseProvider);
assertEquals(EXTENSION_PROVIDER_ID, rawProvider.getId()); assertEquals(EXTENSION_BASE_PROVIDER_ID, rawProvider.getId());
assertEquals(EXTENSION_PROVIDER_NAME, rawProvider.getName()); assertEquals(EXTENSION_BASE_PROVIDER_NAME, rawProvider.getName());
} }
{ {
// re-load to check serialization // re-load to check serialization
LanguageSettingsProvidersSerializer.loadLanguageSettingsWorkspace(); LanguageSettingsProvidersSerializer.loadLanguageSettingsWorkspace();
ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_PROVIDER_ID); ILanguageSettingsProvider provider = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_BASE_PROVIDER_ID);
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
assertTrue(rawProvider instanceof LanguageSettingsBaseProvider); assertTrue(rawProvider instanceof LanguageSettingsBaseProvider);
assertEquals(EXTENSION_PROVIDER_ID, rawProvider.getId()); assertEquals(EXTENSION_BASE_PROVIDER_ID, rawProvider.getId());
assertEquals(EXTENSION_PROVIDER_NAME, rawProvider.getName()); assertEquals(EXTENSION_BASE_PROVIDER_NAME, rawProvider.getName());
} }
} }
@ -674,7 +661,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
Element rootElement = null; Element rootElement = null;
// provider of other type (not LanguageSettingsSerializableProvider) defined as an extension // 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 // create cfg description
@ -721,7 +708,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
Element rootElement = null; Element rootElement = null;
// provider set on workspace level overriding an extension // provider set on workspace level overriding an extension
String idExt = EXTENSION_PROVIDER_ID; String idExt = EXTENSION_BASE_PROVIDER_ID;
ILanguageSettingsProvider providerExt = LanguageSettingsManager.getWorkspaceProvider(idExt); ILanguageSettingsProvider providerExt = LanguageSettingsManager.getWorkspaceProvider(idExt);
assertNotNull(providerExt); assertNotNull(providerExt);
{ {
@ -791,7 +778,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
assertNotNull(cfgDescription); assertNotNull(cfgDescription);
// 1. Provider reference to extension from plugin.xml // 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 // 2. TODO Provider reference to provider defined in the project

View file

@ -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<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId);
public void setSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId, List<ICLanguageSettingEntry> entries);
}

View file

@ -23,11 +23,15 @@ import org.eclipse.core.resources.IResource;
* their settings themselves and not providing such option to the user. * 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<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId);
@Override
public void setSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId, List<ICLanguageSettingEntry> entries); public void setSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId, List<ICLanguageSettingEntry> entries);
public boolean isEmpty();
public void clear();
public ILanguageSettingsEditableProvider cloneShallow() throws CloneNotSupportedException; public ILanguageSettingsEditableProvider cloneShallow() throws CloneNotSupportedException;
public ILanguageSettingsEditableProvider clone() throws CloneNotSupportedException; public ILanguageSettingsEditableProvider clone() throws CloneNotSupportedException;

View file

@ -29,8 +29,8 @@ import org.eclipse.core.resources.IResource;
* {@code org.eclipse.cdt.core.LanguageSettingsProvider} and implement this * {@code org.eclipse.cdt.core.LanguageSettingsProvider} and implement this
* interface. CDT provides a few general use implementations such as * interface. CDT provides a few general use implementations such as
* {@link LanguageSettingsBaseProvider} or {@link LanguageSettingsSerializableProvider} * {@link LanguageSettingsBaseProvider} or {@link LanguageSettingsSerializableProvider}
* which could be used out of the box or extended. See also extension point * or {@link LanguageSettingsGenericProvider} which could be used out of the box or
* schema description LanguageSettingsProvider.exsd. * extended. See also extension point schema description LanguageSettingsProvider.exsd.
* *
* @since 6.0 * @since 6.0
*/ */

View file

@ -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();
}
}

View file

@ -32,14 +32,13 @@ public class LanguageSettingsManager_TBD {
public static boolean isCustomizedResource(ICConfigurationDescription cfgDescription, IResource rc) { public static boolean isCustomizedResource(ICConfigurationDescription cfgDescription, IResource rc) {
if (rc instanceof IProject) if (rc instanceof IProject)
return false; return false;
for (ILanguageSettingsProvider provider: cfgDescription.getLanguageSettingProviders()) { for (ILanguageSettingsProvider provider: cfgDescription.getLanguageSettingProviders()) {
// FIXME if (provider instanceof ILanguageSettingsBroadcastingProvider) {
// if (!LanguageSettingsManager.isWorkspaceProvider(provider)) {
if (provider instanceof ILanguageSettingsEditableProvider || provider instanceof LanguageSettingsSerializableProvider) {
for (String languageId : LanguageSettingsManager.getLanguages(rc, cfgDescription)) { for (String languageId : LanguageSettingsManager.getLanguages(rc, cfgDescription)) {
List<ICLanguageSettingEntry> list = provider.getSettingEntries(cfgDescription, rc, languageId); List<ICLanguageSettingEntry> list = provider.getSettingEntries(cfgDescription, rc, languageId);
if (list!=null) { if (list!=null) {
// TODO - check default or check parent?
List<ICLanguageSettingEntry> listDefault = provider.getSettingEntries(null, null, languageId); List<ICLanguageSettingEntry> listDefault = provider.getSettingEntries(null, null, languageId);
// != is OK here due as the equal lists will have the same reference in WeakHashSet // != is OK here due as the equal lists will have the same reference in WeakHashSet
if (list != listDefault) if (list != listDefault)
@ -62,7 +61,7 @@ public class LanguageSettingsManager_TBD {
} }
return false; return false;
} }
public static boolean isEqualExtensionProvider(ILanguageSettingsProvider provider) { public static boolean isEqualExtensionProvider(ILanguageSettingsProvider provider) {
return LanguageSettingsExtensionManager.equalsExtensionProvider(provider); return LanguageSettingsExtensionManager.equalsExtensionProvider(provider);
} }

View file

@ -31,7 +31,7 @@ import org.w3c.dom.NodeList;
* TODO - more JavaDoc, info and hints about class hierarchy * 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$ public static final String ELEM_PROVIDER = "provider"; //$NON-NLS-1$
private static final String ATTR_ID = "id"; //$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()} * the language scope. See {@link #getLanguageScope()}
* @param entries - language settings entries to set. * @param entries - language settings entries to set.
*/ */
@Override
public void setSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId, List<ICLanguageSettingEntry> entries) { public void setSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId, List<ICLanguageSettingEntry> entries) {
String rcProjectPath = rc!=null ? rc.getProjectRelativePath().toString() : null; String rcProjectPath = rc!=null ? rc.getProjectRelativePath().toString() : null;
fStorage.setSettingEntries(rcProjectPath, languageId, entries); 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. * This is convenience method not intended to be overridden on purpose.
* Override {@link #serializeAttributes(Element)} or * Override {@link #serializeAttributes(Element)} or
* {@link #serializeEntries(Element)} instead. * {@link #serializeEntries(Element)} instead.
* *
* @param parentElement - element where to serialize. * @param parentElement - element where to serialize.
* @return - newly created <provider> element. That element will already be * @return - newly created <provider> element. That element will already be
* attached to the parent element. * 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. * This is convenience method not intended to be overridden on purpose.
* Override {@link #loadAttributes(Element)} or * Override {@link #loadAttributes(Element)} or
* {@link #loadEntries(Element)} instead. * {@link #loadEntries(Element)} instead.
* *
* @param providerNode - XML element <provider> to load provider from. * @param providerNode - XML element <provider> to load provider from.
*/ */
final public void load(Element providerNode) { final public void load(Element providerNode) {
@ -272,7 +273,7 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
} }
String id = XmlUtil.determineAttributeValue(parentNode, ATTR_ID); String id = XmlUtil.determineAttributeValue(parentNode, ATTR_ID);
languageScope.add(id); languageScope.add(id);
} }
/** /**
@ -310,7 +311,7 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
public void loadEntries(Element providerNode) { public void loadEntries(Element providerNode) {
fStorage.loadEntries(providerNode); fStorage.loadEntries(providerNode);
} }
/** /**
* See {@link #cloneShallow()}. This method is extracted * See {@link #cloneShallow()}. This method is extracted
* to avoid expressing {@link #clone()} via {@link #cloneShallow()}. * to avoid expressing {@link #clone()} via {@link #cloneShallow()}.
@ -408,7 +409,7 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
return false; return false;
return true; return true;
} }
/** /**
* @noreference This method is not intended to be referenced by clients. * @noreference This method is not intended to be referenced by clients.
*/ */

View file

@ -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.ILanguageSettingsEditableProvider;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider; 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.LanguageSettingsBaseProvider;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsGenericProvider;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsSerializableProvider; import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsSerializableProvider;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.core.settings.model.util.CDataUtil; import org.eclipse.cdt.core.settings.model.util.CDataUtil;
@ -260,6 +261,11 @@ public class LanguageSettingsExtensionManager {
return new LanguageSettingsSerializableProvider(); return new LanguageSettingsSerializableProvider();
} }
// TODO unit test case for this
if (className.equals(LanguageSettingsGenericProvider.class.getName())) {
return new LanguageSettingsGenericProvider();
}
ILanguageSettingsProvider provider = createProviderCarcass(className, Platform.getExtensionRegistry()); ILanguageSettingsProvider provider = createProviderCarcass(className, Platform.getExtensionRegistry());
if (provider==null) { if (provider==null) {
IStatus status = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, "Not able to load provider class=" + className); IStatus status = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, "Not able to load provider class=" + className);

View file

@ -337,7 +337,7 @@ public class LanguageSettingsProvidersSerializer {
rawGlobalWorkspaceProviders = rawWorkspaceProviders; rawGlobalWorkspaceProviders = rawWorkspaceProviders;
} }
private static List<LanguageSettingsChangeEvent> createLanguageLettingsChangeEvents(List<LanguageSettingsSerializableProvider> serializableProviders) { private static List<LanguageSettingsChangeEvent> createLanguageSettingsChangeEvents(List<LanguageSettingsSerializableProvider> serializableProviders) {
List<LanguageSettingsChangeEvent> events = new ArrayList<LanguageSettingsProvidersSerializer.LanguageSettingsChangeEvent>(); List<LanguageSettingsChangeEvent> events = new ArrayList<LanguageSettingsProvidersSerializer.LanguageSettingsChangeEvent>();
List<String> serializableIds = new ArrayList<String>(); List<String> serializableIds = new ArrayList<String>();
@ -379,11 +379,7 @@ projects:
List<LanguageSettingsSerializableProvider> serializableWorkspaceProviders = new ArrayList<LanguageSettingsSerializableProvider>(); List<LanguageSettingsSerializableProvider> serializableWorkspaceProviders = new ArrayList<LanguageSettingsSerializableProvider>();
for (ILanguageSettingsProvider provider : rawGlobalWorkspaceProviders.values()) { for (ILanguageSettingsProvider provider : rawGlobalWorkspaceProviders.values()) {
if (provider instanceof LanguageSettingsSerializableProvider) { if (provider instanceof LanguageSettingsSerializableProvider) {
// serialize all editable providers which are different from corresponding extension serializableWorkspaceProviders.add((LanguageSettingsSerializableProvider)provider);
// 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);
}
} }
} }
try { try {
@ -394,7 +390,7 @@ projects:
serializingLock.acquire(); serializingLock.acquire();
fileStoreWsp.delete(); fileStoreWsp.delete();
// manufacture events while inside the lock // manufacture events while inside the lock
events = createLanguageLettingsChangeEvents(serializableWorkspaceProviders); events = createLanguageSettingsChangeEvents(serializableWorkspaceProviders);
} finally { } finally {
serializingLock.release(); serializingLock.release();
} }
@ -411,7 +407,7 @@ projects:
serializingLock.acquire(); serializingLock.acquire();
XmlUtil.serializeXml(doc, uriStoreWsp); XmlUtil.serializeXml(doc, uriStoreWsp);
// manufacture events while inside the lock // manufacture events while inside the lock
events = createLanguageLettingsChangeEvents(serializableWorkspaceProviders); events = createLanguageSettingsChangeEvents(serializableWorkspaceProviders);
} finally { } finally {
serializingLock.release(); serializingLock.release();
} }

View file

@ -42,11 +42,11 @@ import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.swt.widgets.TreeItem; 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.ILanguageSettingsEditableProvider;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider; 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.LanguageSettingsBaseProvider;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager; 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.language.settings.providers.ScannerDiscoveryLegacySupport;
import org.eclipse.cdt.core.model.ILanguage; import org.eclipse.cdt.core.model.ILanguage;
import org.eclipse.cdt.core.model.LanguageManager; import org.eclipse.cdt.core.model.LanguageManager;
@ -122,7 +122,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
if (entriesParent != null /*&& entriesParent.size() > 0*/) { if (entriesParent != null /*&& entriesParent.size() > 0*/) {
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_PARENT; 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. // Assuming that the default entries for a resource are always null.
// Using that for performance reasons. See note in PerformDefaults(). // Using that for performance reasons. See note in PerformDefaults().
List<ICLanguageSettingEntry> entriesParent = provider.getSettingEntries(null, null, currentLanguageId); List<ICLanguageSettingEntry> entriesParent = provider.getSettingEntries(null, null, currentLanguageId);
@ -682,7 +682,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
} }
private void saveEntries(ILanguageSettingsProvider provider, List<ICLanguageSettingEntry> entries) { private void saveEntries(ILanguageSettingsProvider provider, List<ICLanguageSettingEntry> entries) {
if (provider instanceof LanguageSettingsSerializableProvider) { if (provider instanceof ILanguageSettingsEditableProvider) {
ICConfigurationDescription cfgDescription = getConfigurationDescription(); ICConfigurationDescription cfgDescription = getConfigurationDescription();
IResource rc = getResource(); IResource rc = getResource();
if (entries!=null && rc!=null) { if (entries!=null && rc!=null) {
@ -697,7 +697,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
entries = null; 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; boolean changed = false;
ICConfigurationDescription cfgDescription = getConfigurationDescription(); ICConfigurationDescription cfgDescription = getConfigurationDescription();
IResource rc = getResource(); IResource rc = getResource();
List<ILanguageSettingsProvider> providers = cfgDescription.getLanguageSettingProviders(); List<ILanguageSettingsProvider> oldProviders = cfgDescription.getLanguageSettingProviders();
List<ILanguageSettingsProvider> writableProviders = new ArrayList<ILanguageSettingsProvider>(providers.size()); List<ILanguageSettingsProvider> newProviders = new ArrayList<ILanguageSettingsProvider>(oldProviders.size());
providers: for (ILanguageSettingsProvider provider : providers) { providers: for (ILanguageSettingsProvider provider : oldProviders) {
ILanguageSettingsEditableProvider writableProvider = null; ILanguageSettingsEditableProvider providerCopy = null;
if (provider instanceof ILanguageSettingsEditableProvider) { if (provider instanceof ILanguageSettingsEditableProvider) {
for (TreeItem langItems : treeLanguages.getItems()) { for (TreeItem langItems : treeLanguages.getItems()) {
String langId = (String)langItems.getData(); String langId = (String)langItems.getData();
@ -973,10 +973,10 @@ providers: for (ILanguageSettingsProvider provider : providers) {
if (provider.getSettingEntries(cfgDescription, rc, langId)!=null) { if (provider.getSettingEntries(cfgDescription, rc, langId)!=null) {
try { try {
// clone providers to be able to "Cancel" in UI // clone providers to be able to "Cancel" in UI
if (writableProvider==null) { if (providerCopy==null) {
writableProvider = ((ILanguageSettingsEditableProvider) provider).clone(); providerCopy = ((ILanguageSettingsEditableProvider) provider).clone();
} }
writableProvider.setSettingEntries(cfgDescription, rc, langId, null); providerCopy.setSettingEntries(cfgDescription, rc, langId, null);
changed = true; changed = true;
} catch (CloneNotSupportedException e) { } catch (CloneNotSupportedException e) {
CUIPlugin.log("Internal Error: cannot clone provider "+provider.getId(), e); CUIPlugin.log("Internal Error: cannot clone provider "+provider.getId(), e);
@ -986,13 +986,13 @@ providers: for (ILanguageSettingsProvider provider : providers) {
} }
} }
} }
if (writableProvider!=null) if (providerCopy!=null)
writableProviders.add(writableProvider); newProviders.add(providerCopy);
else else
writableProviders.add(provider); newProviders.add(provider);
} }
if (changed) { if (changed) {
cfgDescription.setLanguageSettingProviders(writableProviders); cfgDescription.setLanguageSettingProviders(newProviders);
// updateTreeEntries(); // updateTreeEntries();
// updateData(getResDesc()); // updateData(getResDesc());
List<ILanguageSettingsProvider> tableItems = getProviders(currentLanguageId); List<ILanguageSettingsProvider> tableItems = getProviders(currentLanguageId);

View file

@ -150,14 +150,13 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
Assert.isTrue(rawProvider instanceof ILanguageSettingsEditableProvider); Assert.isTrue(rawProvider instanceof ILanguageSettingsEditableProvider);
ILanguageSettingsEditableProvider editableProvider = (ILanguageSettingsEditableProvider)rawProvider;
try { try {
ILanguageSettingsEditableProvider newProvider = editableProvider.clone(); ILanguageSettingsEditableProvider newProvider = ((ILanguageSettingsEditableProvider)rawProvider).clone();
replaceSelectedProvider(newProvider); replaceSelectedProvider(newProvider);
return newProvider; return newProvider;
} catch (CloneNotSupportedException e) { } catch (CloneNotSupportedException e) {
CUIPlugin.log("Error cloning provider " + editableProvider.getId(), e); CUIPlugin.log("Error cloning provider " + rawProvider.getId(), e);
// TODO warning dialog for user? // TODO warning dialog for user?
} }
@ -249,7 +248,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
if (page.isForPrefs()) { if (page.isForPrefs()) {
initButtons(BUTTON_LABELS_PREF); initButtons(BUTTON_LABELS_PREF);
} else { } else {
// "I want to try new scanner discovery" temporary checkbox // "I want to try new scanner discovery" temporary checkbox
enableProvidersCheckBox = setupCheck(usercomp, Messages.CDTMainWizardPage_TrySD90, 2, GridData.FILL_HORIZONTAL); enableProvidersCheckBox = setupCheck(usercomp, Messages.CDTMainWizardPage_TrySD90, 2, GridData.FILL_HORIZONTAL);
@ -545,7 +544,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
// renders better when using temporary // renders better when using temporary
presentedProviders = providers; presentedProviders = providers;
int pos = tableProviders.getSelectionIndex(); int pos = tableProviders.getSelectionIndex();
tableProvidersViewer.setInput(presentedProviders); tableProvidersViewer.setInput(presentedProviders);
tableProviders.setSelection(pos); tableProviders.setSelection(pos);
@ -744,8 +743,8 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
private void performClear(ILanguageSettingsProvider selectedProvider) { private void performClear(ILanguageSettingsProvider selectedProvider) {
if (isWorkingCopy(selectedProvider)) { if (isWorkingCopy(selectedProvider)) {
if (selectedProvider instanceof ILanguageSettingsEditableProvider) { if (selectedProvider instanceof LanguageSettingsSerializableProvider) {
ILanguageSettingsEditableProvider editableProvider = (ILanguageSettingsEditableProvider) selectedProvider; LanguageSettingsSerializableProvider editableProvider = (LanguageSettingsSerializableProvider) selectedProvider;
editableProvider.clear(); editableProvider.clear();
tableProvidersViewer.update(selectedProvider, null); tableProvidersViewer.update(selectedProvider, null);
} }
@ -892,7 +891,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
} }
// seems to render better when temporary is used // seems to render better when temporary is used
presentedProviders = providers; presentedProviders = providers;
int pos = tableProviders.getSelectionIndex(); int pos = tableProviders.getSelectionIndex();
tableProvidersViewer.setInput(presentedProviders); tableProvidersViewer.setInput(presentedProviders);
tableProviders.setSelection(pos); tableProviders.setSelection(pos);

View file

@ -49,7 +49,7 @@ class LanguageSettingsProvidersLabelProvider extends LabelProvider {
if (url!=null) { if (url!=null) {
imageKey = url.toString(); imageKey = url.toString();
} }
if (imageKey==null) { if (imageKey==null) {
if (id.matches(TEST_PLUGIN_ID_PATTERN)) { if (id.matches(TEST_PLUGIN_ID_PATTERN)) {
imageKey = CDTSharedImages.IMG_OBJS_CDT_TESTING; imageKey = CDTSharedImages.IMG_OBJS_CDT_TESTING;
@ -67,7 +67,7 @@ class LanguageSettingsProvidersLabelProvider extends LabelProvider {
String[] overlayKeys = new String[5]; String[] overlayKeys = new String[5];
{ // TODO temporary for debugging { // TODO temporary for debugging
// boolean isSpecial = provider.getId().equals(LegacySupport.MBS_LANGUAGE_SETTINGS_PROVIDER); // boolean isSpecial = provider.getId().equals(LegacySupport.MBS_LANGUAGE_SETTINGS_PROVIDER);
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
if (rawProvider instanceof LanguageSettingsSerializableProvider) { if (rawProvider instanceof LanguageSettingsSerializableProvider) {
if (((LanguageSettingsSerializableProvider)rawProvider).isEmpty()) { 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_CONFIGURATION;
// overlayKeys[IDecoration.TOP_LEFT] = CDTSharedImages.IMG_OVR_INDEXED; // overlayKeys[IDecoration.TOP_LEFT] = CDTSharedImages.IMG_OVR_INDEXED;
// overlayKeys[IDecoration.TOP_LEFT] = CDTSharedImages.IMG_OVR_CONTEXT; // overlayKeys[IDecoration.TOP_LEFT] = CDTSharedImages.IMG_OVR_CONTEXT;
// overlayKeys[IDecoration.TOP_LEFT] = CDTSharedImages.IMG_OVR_PROJECT; // overlayKeys[IDecoration.TOP_LEFT] = CDTSharedImages.IMG_OVR_PROJECT;
} }
} }
return overlayKeys; return overlayKeys;
} }
@Override @Override
public Image getImage(Object element) { public Image getImage(Object element) {
if (element instanceof ILanguageSettingsProvider) { if (element instanceof ILanguageSettingsProvider) {

View file

@ -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 * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html * http://www.eclipse.org/legal/epl-v10.html
* *
* Contributors: * Contributors:
* Andrew Gvozdev (Quoin Inc.) - initial API and implementation * Andrew Gvozdev - initial API and implementation
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.internal.ui.language.settings.providers; 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 { public class UserLanguageSettingsProvider extends LanguageSettingsSerializableProvider implements ILanguageSettingsEditableProvider {
@Override @Override
public int hashCode() { public int hashCode() {
return super.hashCode()*13 + 1; return super.hashCode()*13 + 1;
@ -43,5 +43,5 @@ public class UserLanguageSettingsProvider extends LanguageSettingsSerializablePr
public UserLanguageSettingsProvider clone() throws CloneNotSupportedException { public UserLanguageSettingsProvider clone() throws CloneNotSupportedException {
return (UserLanguageSettingsProvider)super.clone(); return (UserLanguageSettingsProvider)super.clone();
} }
} }