1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-09 10:46: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
LanguageSettingsSerializableProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_0, PROVIDER_NAME_0);
mockProvider.setStoringEntriesInProjectArea(true);
LanguageSettingsManager.setStoringEntriesInProjectArea(mockProvider, true);
mockProvider.setSettingEntries(cfgDescription, null, null, entries);
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(mockProvider);
@ -450,7 +450,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
LanguageSettingsSerializableProvider serializableProvider = new LanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0);
serializableProvider.setSettingEntries(null, null, null, entries);
serializableProvider.setStoringEntriesInProjectArea(true);
LanguageSettingsManager.setStoringEntriesInProjectArea(serializableProvider, true);
ArrayList<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(serializableProvider);
@ -516,7 +516,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
assertEquals(CFG_ID, cfgDescription1.getId());
LanguageSettingsSerializableProvider provider1 = new LanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0);
provider1.setStoringEntriesInProjectArea(true);
LanguageSettingsManager.setStoringEntriesInProjectArea(provider1, true);
provider1.setSettingEntries(null, null, null, entries);
ArrayList<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(provider1);
@ -530,7 +530,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
assertEquals(CFG_ID_2, cfgDescription2.getId());
LanguageSettingsSerializableProvider provider2 = new LanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0);
provider2.setStoringEntriesInProjectArea(true);
LanguageSettingsManager.setStoringEntriesInProjectArea(provider2, true);
provider2.setSettingEntries(null, null, null, entries2);
ArrayList<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(provider2);
@ -646,7 +646,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
LanguageSettingsSerializableProvider serializableProvider = new MockLanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0);
serializableProvider.setSettingEntries(null, null, null, entries);
serializableProvider.setStoringEntriesInProjectArea(true);
LanguageSettingsManager.setStoringEntriesInProjectArea(serializableProvider, true);
ArrayList<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
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)
MockLanguageSettingsSerializableProvider providerOverride = new MockLanguageSettingsSerializableProvider(idExt, PROVIDER_NAME_0);
providerOverride.setStoringEntriesInProjectArea(true);
LanguageSettingsManager.setStoringEntriesInProjectArea(providerOverride, true);
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(providerOverride);
((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers);
@ -817,11 +817,11 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
// 3. Providers defined in a configuration
// 3.1
LanguageSettingsSerializableProvider mockProvider1 = new LanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0);
mockProvider1.setStoringEntriesInProjectArea(true);
LanguageSettingsManager.setStoringEntriesInProjectArea(mockProvider1, true);
mockProvider1.setSettingEntries(null, null, null, entries_31);
// 3.2
LanguageSettingsSerializableProvider mockProvider2 = new MockLanguageSettingsSerializableProvider(PROVIDER_2, PROVIDER_NAME_2);
mockProvider2.setStoringEntriesInProjectArea(true);
LanguageSettingsManager.setStoringEntriesInProjectArea(mockProvider2, true);
mockProvider2.setSettingEntries(null, null, null, entries_32);
ArrayList<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
@ -901,7 +901,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
// create a provider
LanguageSettingsSerializableProvider mockProvider = new LanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0);
mockProvider.setStoringEntriesInProjectArea(true);
LanguageSettingsManager.setStoringEntriesInProjectArea(mockProvider, true);
mockProvider.setSettingEntries(cfgDescription, null, null, entries);
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(mockProvider);
@ -1042,7 +1042,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
LanguageSettingsSerializableProvider serializableProvider = new LanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0);
serializableProvider.setSettingEntries(null, null, null, entries);
// do not store entries inside project
serializableProvider.setStoringEntriesInProjectArea(false);
LanguageSettingsManager.setStoringEntriesInProjectArea(serializableProvider, false);
ArrayList<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(serializableProvider);
@ -1115,7 +1115,7 @@ public class LanguageSettingsPersistenceProjectTests extends BaseTestCase {
// create a provider
LanguageSettingsSerializableProvider mockProvider = new LanguageSettingsSerializableProvider(PROVIDER_0, PROVIDER_NAME_0);
mockProvider.setStoringEntriesInProjectArea(false);
LanguageSettingsManager.setStoringEntriesInProjectArea(mockProvider, false);
mockProvider.setSettingEntries(cfgDescription, null, null, entries);
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
providers.add(mockProvider);

View file

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

View file

@ -274,6 +274,29 @@ public class LanguageSettingsManager {
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.
*

View file

@ -11,7 +11,10 @@
package org.eclipse.cdt.core.language.settings.providers;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.eclipse.cdt.core.CCorePlugin;
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.core.resources.IResource;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
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_CLASS = "class"; //$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();
/**
@ -124,26 +123,6 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
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.
*/
@ -230,13 +209,23 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
* attached to the parent element.
*/
public Element serializeAttributes(Element parentElement) {
Element elementProvider = XmlUtil.appendElement(parentElement, ELEM_PROVIDER, new String[] {
ATTR_ID, getId(),
ATTR_NAME, getName(),
ATTR_CLASS, getClass().getCanonicalName(),
ATTR_PARAMETER, getCustomParameter(),
ATTR_STORE_ENTRIES, isStoringEntriesInProjectArea() ? VALUE_PROJECT : VALUE_WORKSPACE,
});
// Keeps pairs: key, value. See JavaDoc XmlUtil.appendElement(Node, String, String[]).
List<String> attributes = new ArrayList<String>();
attributes.add(ATTR_ID);
attributes.add(getId());
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) {
for (String langId : languageScope) {
@ -293,12 +282,23 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
String providerId = XmlUtil.determineAttributeValue(providerNode, ATTR_ID);
String providerName = XmlUtil.determineAttributeValue(providerNode, ATTR_NAME);
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.setName(providerName);
this.setCustomParameter(providerParameter);
this.setStoringEntriesInProjectArea(VALUE_PROJECT.equals(providerStoreEntries));
NodeList nodes = providerNode.getChildNodes();
for (int i=0;i<nodes.getLength();i++) {
@ -321,6 +321,20 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
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
* {@link #clone()} via {@link #cloneShallow()}. Do not inline to "optimize"!
@ -329,6 +343,7 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
LanguageSettingsSerializableProvider clone = (LanguageSettingsSerializableProvider)super.clone();
if (languageScope!=null)
clone.languageScope = new ArrayList<String>(languageScope);
clone.properties = new HashMap<String, String>(properties);
clone.fStorage = new LanguageSettingsSerializableStorage();
return clone;
@ -360,7 +375,7 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
result = prime * result + ((getName() == null) ? 0 : getName().hashCode());
result = prime * result + ((languageScope == null) ? 0 : languageScope.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 + getClass().hashCode();
return result;
@ -408,7 +423,10 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr
} else if (!customParameter.equals(other.customParameter))
return false;
if (storeEntriesInProjectArea!=other.storeEntriesInProjectArea)
if (properties == null) {
if (other.properties != null)
return false;
} else if (!properties.equals(other.properties))
return false;
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_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();
/** Cache of globally available providers to be consumed by calling clients */
@ -512,7 +516,7 @@ projects:
LanguageSettingsSerializableProvider lss = (LanguageSettingsSerializableProvider) provider;
boolean useWsp = projectElementWspStore!=null && projectElementPrjStore!=projectElementWspStore;
if (lss.isStoringEntriesInProjectArea() || !useWsp) {
if (isStoringEntriesInProjectArea(lss) || !useWsp) {
lss.serialize(elementExtension);
} else {
lss.serializeAttributes(elementExtension);
@ -649,7 +653,7 @@ projects:
provider = loadProvider(providerNode);
if (provider instanceof LanguageSettingsSerializableProvider) {
LanguageSettingsSerializableProvider lss = (LanguageSettingsSerializableProvider) provider;
if (!lss.isStoringEntriesInProjectArea() && projectElementWsp!=null) {
if (!isStoringEntriesInProjectArea(lss) && projectElementWsp!=null) {
loadProviderEntries(lss, cfgId, projectElementWsp);
}
}
@ -1316,4 +1320,29 @@ projects:
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);
}
projectStorageCheckBox.setSelection(provider instanceof LanguageSettingsSerializableProvider
&& ((LanguageSettingsSerializableProvider) provider).isStoringEntriesInProjectArea());
&& LanguageSettingsManager.isStoringEntriesInProjectArea((LanguageSettingsSerializableProvider) provider));
}
@Override
@ -424,7 +424,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
boolean isWithProject = projectStorageCheckBox.getSelection();
ILanguageSettingsProvider provider = getWorkingCopy(getSelectedProvider().getId());
Assert.isTrue(provider instanceof LanguageSettingsSerializableProvider);
((LanguageSettingsSerializableProvider)provider).setStoringEntriesInProjectArea(isWithProject);
LanguageSettingsManager.setStoringEntriesInProjectArea((LanguageSettingsSerializableProvider) provider, isWithProject);
refreshItem(provider);
}
@ -611,7 +611,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
projectStorageCheckBox.setEnabled(!isGlobal);
projectStorageCheckBox.setVisible(rawProvider instanceof LanguageSettingsSerializableProvider);
projectStorageCheckBox.setSelection(provider instanceof LanguageSettingsSerializableProvider
&& ((LanguageSettingsSerializableProvider)provider).isStoringEntriesInProjectArea());
&& LanguageSettingsManager.isStoringEntriesInProjectArea((LanguageSettingsSerializableProvider) provider));
boolean needPreferencesLink=isGlobal && currentOptionsPage!=null;
// TODO: message