1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-09 18:56:02 +02:00

Generalize properties for LanguageSettingsSerializableProvider, keep

storeEntriesInProjectArea attribute in there
This commit is contained in:
Andrew Gvozdev 2011-12-05 14:13:16 -05:00
parent b04a172c1a
commit 9a66dd7b79
6 changed files with 158 additions and 77 deletions

View file

@ -239,7 +239,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
// create a provider // create a provider
LanguageSettingsSerializableProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_0, PROVIDER_NAME_0); LanguageSettingsSerializableProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_0, PROVIDER_NAME_0);
mockProvider.setStoringEntriesInProjectArea(true); LanguageSettingsManager.setStoringEntriesInProjectArea(mockProvider, 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>();
providers.add(mockProvider); providers.add(mockProvider);
@ -450,7 +450,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
LanguageSettingsSerializableProvider serializableProvider = new LanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0); LanguageSettingsSerializableProvider serializableProvider = new LanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0);
serializableProvider.setSettingEntries(null, null, null, entries); serializableProvider.setSettingEntries(null, null, null, entries);
serializableProvider.setStoringEntriesInProjectArea(true); LanguageSettingsManager.setStoringEntriesInProjectArea(serializableProvider, true);
ArrayList<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); ArrayList<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(serializableProvider); providers.add(serializableProvider);
@ -516,7 +516,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
assertEquals(CFG_ID, cfgDescription1.getId()); assertEquals(CFG_ID, cfgDescription1.getId());
LanguageSettingsSerializableProvider provider1 = new LanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0); LanguageSettingsSerializableProvider provider1 = new LanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0);
provider1.setStoringEntriesInProjectArea(true); LanguageSettingsManager.setStoringEntriesInProjectArea(provider1, true);
provider1.setSettingEntries(null, null, null, entries); provider1.setSettingEntries(null, null, null, entries);
ArrayList<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); ArrayList<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(provider1); providers.add(provider1);
@ -530,7 +530,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
assertEquals(CFG_ID_2, cfgDescription2.getId()); assertEquals(CFG_ID_2, cfgDescription2.getId());
LanguageSettingsSerializableProvider provider2 = new LanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0); LanguageSettingsSerializableProvider provider2 = new LanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0);
provider2.setStoringEntriesInProjectArea(true); LanguageSettingsManager.setStoringEntriesInProjectArea(provider2, true);
provider2.setSettingEntries(null, null, null, entries2); provider2.setSettingEntries(null, null, null, entries2);
ArrayList<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); ArrayList<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(provider2); providers.add(provider2);
@ -646,7 +646,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
LanguageSettingsSerializableProvider serializableProvider = new MockLanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0); LanguageSettingsSerializableProvider serializableProvider = new MockLanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0);
serializableProvider.setSettingEntries(null, null, null, entries); serializableProvider.setSettingEntries(null, null, null, entries);
serializableProvider.setStoringEntriesInProjectArea(true); LanguageSettingsManager.setStoringEntriesInProjectArea(serializableProvider, true);
ArrayList<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); ArrayList<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(serializableProvider); providers.add(serializableProvider);
@ -750,7 +750,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
// populate with provider overriding the extension (must be SerializableLanguageSettingsProvider or a class from another extension) // populate with provider overriding the extension (must be SerializableLanguageSettingsProvider or a class from another extension)
MockLanguageSettingsSerializableProvider providerOverride = new MockLanguageSettingsSerializableProvider(idExt, PROVIDER_NAME_0); MockLanguageSettingsSerializableProvider providerOverride = new MockLanguageSettingsSerializableProvider(idExt, PROVIDER_NAME_0);
providerOverride.setStoringEntriesInProjectArea(true); LanguageSettingsManager.setStoringEntriesInProjectArea(providerOverride, true);
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(providerOverride); providers.add(providerOverride);
((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers); ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers);
@ -817,11 +817,11 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
// 3. Providers defined in a configuration // 3. Providers defined in a configuration
// 3.1 // 3.1
LanguageSettingsSerializableProvider mockProvider1 = new LanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0); LanguageSettingsSerializableProvider mockProvider1 = new LanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0);
mockProvider1.setStoringEntriesInProjectArea(true); LanguageSettingsManager.setStoringEntriesInProjectArea(mockProvider1, true);
mockProvider1.setSettingEntries(null, null, null, entries_31); mockProvider1.setSettingEntries(null, null, null, entries_31);
// 3.2 // 3.2
LanguageSettingsSerializableProvider mockProvider2 = new MockLanguageSettingsSerializableProvider(PROVIDER_2, PROVIDER_NAME_2); LanguageSettingsSerializableProvider mockProvider2 = new MockLanguageSettingsSerializableProvider(PROVIDER_2, PROVIDER_NAME_2);
mockProvider2.setStoringEntriesInProjectArea(true); LanguageSettingsManager.setStoringEntriesInProjectArea(mockProvider2, true);
mockProvider2.setSettingEntries(null, null, null, entries_32); mockProvider2.setSettingEntries(null, null, null, entries_32);
ArrayList<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); ArrayList<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
@ -901,7 +901,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
// create a provider // create a provider
LanguageSettingsSerializableProvider mockProvider = new LanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0); LanguageSettingsSerializableProvider mockProvider = new LanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0);
mockProvider.setStoringEntriesInProjectArea(true); LanguageSettingsManager.setStoringEntriesInProjectArea(mockProvider, 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>();
providers.add(mockProvider); providers.add(mockProvider);
@ -1042,7 +1042,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
LanguageSettingsSerializableProvider serializableProvider = new LanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0); LanguageSettingsSerializableProvider serializableProvider = new LanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0);
serializableProvider.setSettingEntries(null, null, null, entries); serializableProvider.setSettingEntries(null, null, null, entries);
// do not store entries inside project // do not store entries inside project
serializableProvider.setStoringEntriesInProjectArea(false); LanguageSettingsManager.setStoringEntriesInProjectArea(serializableProvider, false);
ArrayList<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); ArrayList<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(serializableProvider); providers.add(serializableProvider);
@ -1115,7 +1115,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
// create a provider // create a provider
LanguageSettingsSerializableProvider mockProvider = new LanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0); LanguageSettingsSerializableProvider mockProvider = new LanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0);
mockProvider.setStoringEntriesInProjectArea(false); LanguageSettingsManager.setStoringEntriesInProjectArea(mockProvider, false);
mockProvider.setSettingEntries(cfgDescription, null, null, entries); mockProvider.setSettingEntries(cfgDescription, null, null, entries);
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(); List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(mockProvider); providers.add(mockProvider);

View file

@ -116,9 +116,11 @@ public class LanguageSettingsSerializableTests extends BaseTestCase {
mockProvider.setCustomParameter(CUSTOM_PARAMETER); mockProvider.setCustomParameter(CUSTOM_PARAMETER);
assertEquals(CUSTOM_PARAMETER, mockProvider.getCustomParameter()); assertEquals(CUSTOM_PARAMETER, mockProvider.getCustomParameter());
assertEquals(false, mockProvider.isStoringEntriesInProjectArea()); assertEquals(false, LanguageSettingsManager.isStoringEntriesInProjectArea(mockProvider));
mockProvider.setStoringEntriesInProjectArea(true); LanguageSettingsManager.setStoringEntriesInProjectArea(mockProvider, true);
assertEquals(true, mockProvider.isStoringEntriesInProjectArea()); assertEquals(true, LanguageSettingsManager.isStoringEntriesInProjectArea(mockProvider));
LanguageSettingsManager.setStoringEntriesInProjectArea(mockProvider, false);
assertEquals(false, LanguageSettingsManager.isStoringEntriesInProjectArea(mockProvider));
mockProvider.setLanguageScope(languages); mockProvider.setLanguageScope(languages);
assertEquals(languages, mockProvider.getLanguageScope()); assertEquals(languages, mockProvider.getLanguageScope());
@ -143,7 +145,7 @@ public class LanguageSettingsSerializableTests extends BaseTestCase {
{ {
// create customized provider // create customized provider
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1);
provider.setStoringEntriesInProjectArea(true); LanguageSettingsManager.setStoringEntriesInProjectArea(provider, true);
provider.setCustomParameter(CUSTOM_PARAMETER); provider.setCustomParameter(CUSTOM_PARAMETER);
List<String> languageScope = new ArrayList<String>(); List<String> languageScope = new ArrayList<String>();
@ -170,7 +172,7 @@ public class LanguageSettingsSerializableTests extends BaseTestCase {
// re-load and check language settings of the newly loaded provider // re-load and check language settings of the newly loaded provider
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(elementProvider); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(elementProvider);
assertEquals(PROVIDER_1, provider.getId()); assertEquals(PROVIDER_1, provider.getId());
assertEquals(true, provider.isStoringEntriesInProjectArea()); assertEquals(true, LanguageSettingsManager.isStoringEntriesInProjectArea(provider));
assertEquals(CUSTOM_PARAMETER, provider.getCustomParameter()); assertEquals(CUSTOM_PARAMETER, provider.getCustomParameter());
assertNotNull(provider.getLanguageScope()); assertNotNull(provider.getLanguageScope());
assertTrue(provider.getLanguageScope().size()>0); assertTrue(provider.getLanguageScope().size()>0);
@ -190,7 +192,7 @@ public class LanguageSettingsSerializableTests extends BaseTestCase {
{ {
// create customized provider // create customized provider
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1);
provider.setStoringEntriesInProjectArea(true); LanguageSettingsManager.setStoringEntriesInProjectArea(provider, true);
provider.setCustomParameter(CUSTOM_PARAMETER); provider.setCustomParameter(CUSTOM_PARAMETER);
List<String> languageScope = new ArrayList<String>(); List<String> languageScope = new ArrayList<String>();
@ -219,7 +221,7 @@ public class LanguageSettingsSerializableTests extends BaseTestCase {
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider();
provider.loadAttributes(elementProvider); provider.loadAttributes(elementProvider);
assertEquals(PROVIDER_1, provider.getId()); assertEquals(PROVIDER_1, provider.getId());
assertEquals(true, provider.isStoringEntriesInProjectArea()); assertEquals(true, LanguageSettingsManager.isStoringEntriesInProjectArea(provider));
assertEquals(CUSTOM_PARAMETER, provider.getCustomParameter()); assertEquals(CUSTOM_PARAMETER, provider.getCustomParameter());
assertNotNull(provider.getLanguageScope()); assertNotNull(provider.getLanguageScope());
assertTrue(provider.getLanguageScope().size()>0); assertTrue(provider.getLanguageScope().size()>0);
@ -237,7 +239,7 @@ public class LanguageSettingsSerializableTests extends BaseTestCase {
{ {
// create customized provider // create customized provider
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1);
provider.setStoringEntriesInProjectArea(true); LanguageSettingsManager.setStoringEntriesInProjectArea(provider, true);
provider.setCustomParameter(CUSTOM_PARAMETER); provider.setCustomParameter(CUSTOM_PARAMETER);
List<String> languageScope = new ArrayList<String>(); List<String> languageScope = new ArrayList<String>();
@ -271,7 +273,7 @@ public class LanguageSettingsSerializableTests extends BaseTestCase {
// no attributes should be loaded // no attributes should be loaded
assertFalse(PROVIDER_1.equals(provider.getId())); assertFalse(PROVIDER_1.equals(provider.getId()));
assertFalse(PROVIDER_NAME_1.equals(provider.getName())); assertFalse(PROVIDER_NAME_1.equals(provider.getName()));
assertFalse(true==provider.isStoringEntriesInProjectArea()); assertFalse(true==LanguageSettingsManager.isStoringEntriesInProjectArea(provider));
assertFalse(CUSTOM_PARAMETER.equals(provider.getCustomParameter())); assertFalse(CUSTOM_PARAMETER.equals(provider.getCustomParameter()));
assertNull(provider.getLanguageScope()); assertNull(provider.getLanguageScope());
// entries should be loaded // entries should be loaded
@ -337,11 +339,11 @@ public class LanguageSettingsSerializableTests extends BaseTestCase {
public void testStoreEntriesWithProjectDOM() throws Exception { public void testStoreEntriesWithProjectDOM() throws Exception {
Element elementProvider; Element elementProvider;
{ {
// create provider with custom parameter // create provider storing entries in project area
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1);
assertEquals(false, provider.isStoringEntriesInProjectArea()); assertEquals(false, LanguageSettingsManager.isStoringEntriesInProjectArea(provider));
provider.setStoringEntriesInProjectArea(true); LanguageSettingsManager.setStoringEntriesInProjectArea(provider, true);
assertEquals(true, provider.isStoringEntriesInProjectArea()); assertEquals(true, LanguageSettingsManager.isStoringEntriesInProjectArea(provider));
Document doc = XmlUtil.newDocument(); Document doc = XmlUtil.newDocument();
Element rootElement = XmlUtil.appendElement(doc, ELEM_TEST); Element rootElement = XmlUtil.appendElement(doc, ELEM_TEST);
@ -351,9 +353,9 @@ public class LanguageSettingsSerializableTests extends BaseTestCase {
assertTrue(xmlString.contains(VALUE_PROJECT)); assertTrue(xmlString.contains(VALUE_PROJECT));
} }
{ {
// re-load and check custom parameter of the newly loaded provider // re-load and check storing mode of the newly loaded provider
LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(elementProvider); LanguageSettingsSerializableProvider provider = new LanguageSettingsSerializableProvider(elementProvider);
assertEquals(true, provider.isStoringEntriesInProjectArea()); assertEquals(true, LanguageSettingsManager.isStoringEntriesInProjectArea(provider));
} }
} }
@ -1174,8 +1176,8 @@ public class LanguageSettingsSerializableTests extends BaseTestCase {
LanguageSettingsSerializableProvider provider1 = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); LanguageSettingsSerializableProvider provider1 = new LanguageSettingsSerializableProvider(PROVIDER_1, PROVIDER_NAME_1);
provider1.setLanguageScope(sampleLanguages); provider1.setLanguageScope(sampleLanguages);
provider1.setCustomParameter(CUSTOM_PARAMETER); provider1.setCustomParameter(CUSTOM_PARAMETER);
assertEquals(false, provider1.isStoringEntriesInProjectArea()); assertEquals(false, LanguageSettingsManager.isStoringEntriesInProjectArea(provider1));
provider1.setStoringEntriesInProjectArea(true); LanguageSettingsManager.setStoringEntriesInProjectArea(provider1, true);
provider1.setSettingEntries(MOCK_CFG, MOCK_RC, LANG_ID, sampleEntries_1); provider1.setSettingEntries(MOCK_CFG, MOCK_RC, LANG_ID, sampleEntries_1);
provider1.setSettingEntries(null, null, LANG_ID, sampleEntries_2); provider1.setSettingEntries(null, null, LANG_ID, sampleEntries_2);
@ -1201,7 +1203,7 @@ public class LanguageSettingsSerializableTests extends BaseTestCase {
assertFalse(provider1.equals(provider2)); assertFalse(provider1.equals(provider2));
assertFalse(provider1.hashCode()==provider2.hashCode()); assertFalse(provider1.hashCode()==provider2.hashCode());
provider2.setStoringEntriesInProjectArea(true); LanguageSettingsManager.setStoringEntriesInProjectArea(provider2, true);
// All set now, so they should be equal // All set now, so they should be equal
assertTrue(provider1.equals(provider2)); assertTrue(provider1.equals(provider2));
@ -1251,8 +1253,8 @@ public class LanguageSettingsSerializableTests extends BaseTestCase {
MockSerializableProvider provider1 = new MockSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); MockSerializableProvider provider1 = new MockSerializableProvider(PROVIDER_1, PROVIDER_NAME_1);
provider1.setLanguageScope(sampleLanguages); provider1.setLanguageScope(sampleLanguages);
provider1.setCustomParameter(CUSTOM_PARAMETER); provider1.setCustomParameter(CUSTOM_PARAMETER);
assertEquals(false, provider1.isStoringEntriesInProjectArea()); assertEquals(false, LanguageSettingsManager.isStoringEntriesInProjectArea(provider1));
provider1.setStoringEntriesInProjectArea(true); LanguageSettingsManager.setStoringEntriesInProjectArea(provider1, true);
provider1.setSettingEntries(MOCK_CFG, MOCK_RC, LANG_ID, sampleEntries_1); provider1.setSettingEntries(MOCK_CFG, MOCK_RC, LANG_ID, sampleEntries_1);
provider1.setSettingEntries(null, null, LANG_ID, sampleEntries_2); provider1.setSettingEntries(null, null, LANG_ID, sampleEntries_2);
@ -1261,8 +1263,17 @@ public class LanguageSettingsSerializableTests extends BaseTestCase {
assertNotSame(provider1, providerClone); assertNotSame(provider1, providerClone);
assertTrue(provider1.equals(providerClone)); assertTrue(provider1.equals(providerClone));
assertTrue(provider1.getClass()==providerClone.getClass()); assertTrue(provider1.getClass()==providerClone.getClass());
assertEquals(provider1.getCustomParameter(), providerClone.getCustomParameter()); assertEquals(provider1.getCustomParameter(), providerClone.getCustomParameter());
assertEquals(provider1.isStoringEntriesInProjectArea(), providerClone.isStoringEntriesInProjectArea()); // ensure we did not clone reference
provider1.setCustomParameter("");
assertFalse(provider1.getCustomParameter().equals(providerClone.getCustomParameter()));
assertEquals(LanguageSettingsManager.isStoringEntriesInProjectArea(provider1), LanguageSettingsManager.isStoringEntriesInProjectArea(providerClone));
// ensure we did not clone reference
LanguageSettingsManager.setStoringEntriesInProjectArea(provider1, !LanguageSettingsManager.isStoringEntriesInProjectArea(providerClone));
assertFalse(LanguageSettingsManager.isStoringEntriesInProjectArea(provider1) == LanguageSettingsManager.isStoringEntriesInProjectArea(providerClone));
assertEquals(provider1.getLanguageScope().get(0), providerClone.getLanguageScope().get(0)); assertEquals(provider1.getLanguageScope().get(0), providerClone.getLanguageScope().get(0));
List<ICLanguageSettingEntry> actual1 = providerClone.getSettingEntries(MOCK_CFG, MOCK_RC, LANG_ID); List<ICLanguageSettingEntry> actual1 = providerClone.getSettingEntries(MOCK_CFG, MOCK_RC, LANG_ID);
@ -1299,8 +1310,8 @@ public class LanguageSettingsSerializableTests extends BaseTestCase {
MockSerializableProvider provider1 = new MockSerializableProvider(PROVIDER_1, PROVIDER_NAME_1); MockSerializableProvider provider1 = new MockSerializableProvider(PROVIDER_1, PROVIDER_NAME_1);
provider1.setLanguageScope(sampleLanguages); provider1.setLanguageScope(sampleLanguages);
provider1.setCustomParameter(CUSTOM_PARAMETER); provider1.setCustomParameter(CUSTOM_PARAMETER);
assertEquals(false, provider1.isStoringEntriesInProjectArea()); assertEquals(false, LanguageSettingsManager.isStoringEntriesInProjectArea(provider1));
provider1.setStoringEntriesInProjectArea(true); LanguageSettingsManager.setStoringEntriesInProjectArea(provider1, true);
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>(); List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
entries.add(new CIncludePathEntry("path", 1)); entries.add(new CIncludePathEntry("path", 1));
@ -1312,7 +1323,7 @@ public class LanguageSettingsSerializableTests extends BaseTestCase {
assertFalse(provider1.equals(providerClone)); assertFalse(provider1.equals(providerClone));
assertTrue(provider1.getClass()==providerClone.getClass()); assertTrue(provider1.getClass()==providerClone.getClass());
assertEquals(provider1.getCustomParameter(), providerClone.getCustomParameter()); assertEquals(provider1.getCustomParameter(), providerClone.getCustomParameter());
assertEquals(provider1.isStoringEntriesInProjectArea(), providerClone.isStoringEntriesInProjectArea()); assertEquals(LanguageSettingsManager.isStoringEntriesInProjectArea(provider1), LanguageSettingsManager.isStoringEntriesInProjectArea(providerClone));
assertEquals(provider1.getLanguageScope().get(0), providerClone.getLanguageScope().get(0)); assertEquals(provider1.getLanguageScope().get(0), providerClone.getLanguageScope().get(0));
List<ICLanguageSettingEntry> actual = providerClone.getSettingEntries(null, null, null); List<ICLanguageSettingEntry> actual = providerClone.getSettingEntries(null, null, null);

View file

@ -274,6 +274,29 @@ public class LanguageSettingsManager {
LanguageSettingsProvidersSerializer.unregisterLanguageSettingsChangeListener(listener); LanguageSettingsProvidersSerializer.unregisterLanguageSettingsChangeListener(listener);
} }
/**
* Tells if language settings entries of the provider are persisted with the project
* (under .settings/ folder) or in workspace area. Persistence in the project area lets
* the entries migrate with the project.
*
* @param provider - provider to check the persistence mode.
* @return {@code true} if LSE persisted with the project or {@code false} if in the workspace.
*/
public static boolean isStoringEntriesInProjectArea(LanguageSettingsSerializableProvider provider) {
return LanguageSettingsProvidersSerializer.isStoringEntriesInProjectArea(provider);
}
/**
* Define where language settings are persisted for the provider.
*
* @param provider - provider to set the persistence mode.
* @param storeEntriesWithProject - {@code true} if with the project,
* {@code false} if in workspace area.
*/
public static void setStoringEntriesInProjectArea(LanguageSettingsSerializableProvider provider, boolean storeEntriesWithProject) {
LanguageSettingsProvidersSerializer.setStoringEntriesInProjectArea(provider, storeEntriesWithProject);
}
/** /**
* Save language settings providers of a project to persistent storage. * Save language settings providers of a project to persistent storage.
* *

View file

@ -11,7 +11,10 @@
package org.eclipse.cdt.core.language.settings.providers; package org.eclipse.cdt.core.language.settings.providers;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
@ -21,6 +24,7 @@ import org.eclipse.cdt.internal.core.XmlUtil;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsSerializableStorage; import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsSerializableStorage;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node; import org.w3c.dom.Node;
import org.w3c.dom.NodeList; import org.w3c.dom.NodeList;
@ -41,13 +45,8 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
private static final String ATTR_NAME = "name"; //$NON-NLS-1$ private static final String ATTR_NAME = "name"; //$NON-NLS-1$
private static final String ATTR_CLASS = "class"; //$NON-NLS-1$ private static final String ATTR_CLASS = "class"; //$NON-NLS-1$
private static final String ATTR_PARAMETER = "parameter"; //$NON-NLS-1$ private static final String ATTR_PARAMETER = "parameter"; //$NON-NLS-1$
private static final String ATTR_STORE_ENTRIES = "store-entries"; //$NON-NLS-1$
private static final String VALUE_WORKSPACE = "workspace"; //$NON-NLS-1$
private static final String VALUE_PROJECT = "project"; //$NON-NLS-1$
/** Tells if language settings entries are persisted with the project or in workspace area while serializing. */
private boolean storeEntriesInProjectArea = false;
private Map<String, String> properties = new HashMap<String, String>();
private LanguageSettingsSerializableStorage fStorage = new LanguageSettingsSerializableStorage(); private LanguageSettingsSerializableStorage fStorage = new LanguageSettingsSerializableStorage();
/** /**
@ -124,26 +123,6 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
this.customParameter = customParameter; this.customParameter = customParameter;
} }
/**
* Tells if language settings entries are persisted with the project (under .settings folder)
* or in workspace area. Persistence in the project area lets the entries migrate with the
* project.
*
* @return {@code true} if LSE persisted with the project or {@code false} if in the workspace.
*/
public boolean isStoringEntriesInProjectArea() {
return storeEntriesInProjectArea;
}
/**
* Setter to define where language settings are persisted.
* @param storeEntriesWithProject - {@code true} if with the project,
* {@code false} if in workspace area.
*/
public void setStoringEntriesInProjectArea(boolean storeEntriesWithProject) {
this.storeEntriesInProjectArea = storeEntriesWithProject;
}
/** /**
* Clear all the entries for all configurations, all resources and all languages. * Clear all the entries for all configurations, all resources and all languages.
*/ */
@ -230,13 +209,23 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
* attached to the parent element. * attached to the parent element.
*/ */
public Element serializeAttributes(Element parentElement) { public Element serializeAttributes(Element parentElement) {
Element elementProvider = XmlUtil.appendElement(parentElement, ELEM_PROVIDER, new String[] { // Keeps pairs: key, value. See JavaDoc XmlUtil.appendElement(Node, String, String[]).
ATTR_ID, getId(), List<String> attributes = new ArrayList<String>();
ATTR_NAME, getName(),
ATTR_CLASS, getClass().getCanonicalName(), attributes.add(ATTR_ID);
ATTR_PARAMETER, getCustomParameter(), attributes.add(getId());
ATTR_STORE_ENTRIES, isStoringEntriesInProjectArea() ? VALUE_PROJECT : VALUE_WORKSPACE, attributes.add(ATTR_NAME);
}); attributes.add(getName());
attributes.add(ATTR_CLASS);
attributes.add(getClass().getCanonicalName());
attributes.add(ATTR_PARAMETER);
attributes.add(getCustomParameter());
for (Entry<String, String> entry : properties.entrySet()) {
attributes.add(entry.getKey());
attributes.add(entry.getValue());
}
Element elementProvider = XmlUtil.appendElement(parentElement, ELEM_PROVIDER, attributes.toArray(new String[0]));
if (languageScope!=null) { if (languageScope!=null) {
for (String langId : languageScope) { for (String langId : languageScope) {
@ -293,12 +282,23 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
String providerId = XmlUtil.determineAttributeValue(providerNode, ATTR_ID); String providerId = XmlUtil.determineAttributeValue(providerNode, ATTR_ID);
String providerName = XmlUtil.determineAttributeValue(providerNode, ATTR_NAME); String providerName = XmlUtil.determineAttributeValue(providerNode, ATTR_NAME);
String providerParameter = XmlUtil.determineAttributeValue(providerNode, ATTR_PARAMETER); String providerParameter = XmlUtil.determineAttributeValue(providerNode, ATTR_PARAMETER);
String providerStoreEntries = XmlUtil.determineAttributeValue(providerNode, ATTR_STORE_ENTRIES);
properties.clear();
NamedNodeMap attrs = providerNode.getAttributes();
for (int i=0; i<attrs.getLength(); i++) {
Node attr = attrs.item(i);
if (attr.getNodeType()==Node.ATTRIBUTE_NODE) {
String key = attr.getNodeName();
if (!key.equals(ATTR_ID) && !key.equals(ATTR_NAME) && !key.equals(ATTR_CLASS)) {
String value = attr.getNodeValue();
properties.put(key, value);
}
}
}
this.setId(providerId); this.setId(providerId);
this.setName(providerName); this.setName(providerName);
this.setCustomParameter(providerParameter); this.setCustomParameter(providerParameter);
this.setStoringEntriesInProjectArea(VALUE_PROJECT.equals(providerStoreEntries));
NodeList nodes = providerNode.getChildNodes(); NodeList nodes = providerNode.getChildNodes();
for (int i=0;i<nodes.getLength();i++) { for (int i=0;i<nodes.getLength();i++) {
@ -321,6 +321,20 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
fStorage.loadEntries(providerNode); fStorage.loadEntries(providerNode);
} }
/**
* TODO
*/
public String getProperty(String key) {
return properties.get(key);
}
/**
* TODO
*/
public void setProperty(String key, String value) {
properties.put(key, value);
}
/** /**
* See {@link #cloneShallow()}. This method is extracted to avoid expressing * See {@link #cloneShallow()}. This method is extracted to avoid expressing
* {@link #clone()} via {@link #cloneShallow()}. Do not inline to "optimize"! * {@link #clone()} via {@link #cloneShallow()}. Do not inline to "optimize"!
@ -329,6 +343,7 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
LanguageSettingsSerializableProvider clone = (LanguageSettingsSerializableProvider)super.clone(); LanguageSettingsSerializableProvider clone = (LanguageSettingsSerializableProvider)super.clone();
if (languageScope!=null) if (languageScope!=null)
clone.languageScope = new ArrayList<String>(languageScope); clone.languageScope = new ArrayList<String>(languageScope);
clone.properties = new HashMap<String, String>(properties);
clone.fStorage = new LanguageSettingsSerializableStorage(); clone.fStorage = new LanguageSettingsSerializableStorage();
return clone; return clone;
@ -360,7 +375,7 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
result = prime * result + ((getName() == null) ? 0 : getName().hashCode()); result = prime * result + ((getName() == null) ? 0 : getName().hashCode());
result = prime * result + ((languageScope == null) ? 0 : languageScope.hashCode()); result = prime * result + ((languageScope == null) ? 0 : languageScope.hashCode());
result = prime * result + ((customParameter == null) ? 0 : customParameter.hashCode()); result = prime * result + ((customParameter == null) ? 0 : customParameter.hashCode());
result = prime * result + (storeEntriesInProjectArea ? 0 : 1); result = prime * result + ((properties == null) ? 0 : properties.hashCode());
result = prime * result + ((fStorage == null) ? 0 : fStorage.hashCode()); result = prime * result + ((fStorage == null) ? 0 : fStorage.hashCode());
result = prime * result + getClass().hashCode(); result = prime * result + getClass().hashCode();
return result; return result;
@ -408,7 +423,10 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
} else if (!customParameter.equals(other.customParameter)) } else if (!customParameter.equals(other.customParameter))
return false; return false;
if (storeEntriesInProjectArea!=other.storeEntriesInProjectArea) if (properties == null) {
if (other.properties != null)
return false;
} else if (!properties.equals(other.properties))
return false; return false;
if (fStorage == null) { if (fStorage == null) {

View file

@ -76,6 +76,10 @@ public class LanguageSettingsProvidersSerializer {
private static final String ELEM_PROVIDER = "provider"; //$NON-NLS-1$ private static final String ELEM_PROVIDER = "provider"; //$NON-NLS-1$
private static final String ELEM_PROVIDER_REFERENCE = "provider-reference"; //$NON-NLS-1$ private static final String ELEM_PROVIDER_REFERENCE = "provider-reference"; //$NON-NLS-1$
private static final String ATTR_STORE_ENTRIES = "store-entries"; //$NON-NLS-1$
private static final String VALUE_WORKSPACE = "workspace"; //$NON-NLS-1$
private static final String VALUE_PROJECT = "project"; //$NON-NLS-1$
private static ILock serializingLock = Job.getJobManager().newLock(); private static ILock serializingLock = Job.getJobManager().newLock();
/** Cache of globally available providers to be consumed by calling clients */ /** Cache of globally available providers to be consumed by calling clients */
@ -512,7 +516,7 @@ projects:
LanguageSettingsSerializableProvider lss = (LanguageSettingsSerializableProvider) provider; LanguageSettingsSerializableProvider lss = (LanguageSettingsSerializableProvider) provider;
boolean useWsp = projectElementWspStore!=null && projectElementPrjStore!=projectElementWspStore; boolean useWsp = projectElementWspStore!=null && projectElementPrjStore!=projectElementWspStore;
if (lss.isStoringEntriesInProjectArea() || !useWsp) { if (isStoringEntriesInProjectArea(lss) || !useWsp) {
lss.serialize(elementExtension); lss.serialize(elementExtension);
} else { } else {
lss.serializeAttributes(elementExtension); lss.serializeAttributes(elementExtension);
@ -649,7 +653,7 @@ projects:
provider = loadProvider(providerNode); provider = loadProvider(providerNode);
if (provider instanceof LanguageSettingsSerializableProvider) { if (provider instanceof LanguageSettingsSerializableProvider) {
LanguageSettingsSerializableProvider lss = (LanguageSettingsSerializableProvider) provider; LanguageSettingsSerializableProvider lss = (LanguageSettingsSerializableProvider) provider;
if (!lss.isStoringEntriesInProjectArea() && projectElementWsp!=null) { if (!isStoringEntriesInProjectArea(lss) && projectElementWsp!=null) {
loadProviderEntries(lss, cfgId, projectElementWsp); loadProviderEntries(lss, cfgId, projectElementWsp);
} }
} }
@ -1316,4 +1320,29 @@ projects:
return getSettingEntriesByKind(cfgDescription, rc, languageId, kind, /* checkLocality */ true, /* isLocal */ true); return getSettingEntriesByKind(cfgDescription, rc, languageId, kind, /* checkLocality */ true, /* isLocal */ true);
} }
/**
* Tells if language settings entries of the provider are persisted with the project
* (under .settings/ folder) or in workspace area. Persistence in the project area lets
* the entries migrate with the project.
*
* @param provider - provider to check the persistence mode.
* @return {@code true} if LSE persisted with the project or {@code false} if in the workspace.
*/
public static boolean isStoringEntriesInProjectArea(LanguageSettingsSerializableProvider provider) {
String value = provider.getProperty(ATTR_STORE_ENTRIES);
return VALUE_PROJECT.equals(value);
}
/**
* Define where language settings are persisted for the provider.
*
* @param provider - provider to set the persistence mode.
* @param storeEntriesWithProject - {@code true} if with the project,
* {@code false} if in workspace area.
*/
public static void setStoringEntriesInProjectArea(LanguageSettingsSerializableProvider provider, boolean storeEntriesWithProject) {
provider.setProperty(ATTR_STORE_ENTRIES, storeEntriesWithProject ? VALUE_PROJECT : VALUE_WORKSPACE);
}
} }

View file

@ -406,7 +406,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
provider = toggleGlobalProvider(provider, isGlobal); provider = toggleGlobalProvider(provider, isGlobal);
} }
projectStorageCheckBox.setSelection(provider instanceof LanguageSettingsSerializableProvider projectStorageCheckBox.setSelection(provider instanceof LanguageSettingsSerializableProvider
&& ((LanguageSettingsSerializableProvider) provider).isStoringEntriesInProjectArea()); && LanguageSettingsManager.isStoringEntriesInProjectArea((LanguageSettingsSerializableProvider) provider));
} }
@Override @Override
@ -424,7 +424,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
boolean isWithProject = projectStorageCheckBox.getSelection(); boolean isWithProject = projectStorageCheckBox.getSelection();
ILanguageSettingsProvider provider = getWorkingCopy(getSelectedProvider().getId()); ILanguageSettingsProvider provider = getWorkingCopy(getSelectedProvider().getId());
Assert.isTrue(provider instanceof LanguageSettingsSerializableProvider); Assert.isTrue(provider instanceof LanguageSettingsSerializableProvider);
((LanguageSettingsSerializableProvider)provider).setStoringEntriesInProjectArea(isWithProject); LanguageSettingsManager.setStoringEntriesInProjectArea((LanguageSettingsSerializableProvider) provider, isWithProject);
refreshItem(provider); refreshItem(provider);
} }
@ -611,7 +611,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
projectStorageCheckBox.setEnabled(!isGlobal); projectStorageCheckBox.setEnabled(!isGlobal);
projectStorageCheckBox.setVisible(rawProvider instanceof LanguageSettingsSerializableProvider); projectStorageCheckBox.setVisible(rawProvider instanceof LanguageSettingsSerializableProvider);
projectStorageCheckBox.setSelection(provider instanceof LanguageSettingsSerializableProvider projectStorageCheckBox.setSelection(provider instanceof LanguageSettingsSerializableProvider
&& ((LanguageSettingsSerializableProvider)provider).isStoringEntriesInProjectArea()); && LanguageSettingsManager.isStoringEntriesInProjectArea((LanguageSettingsSerializableProvider) provider));
boolean needPreferencesLink=isGlobal && currentOptionsPage!=null; boolean needPreferencesLink=isGlobal && currentOptionsPage!=null;
// TODO: message // TODO: message