mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-01 14:15:23 +02:00
Store entries in project settings folder, provider flag and UI
This commit is contained in:
parent
455dfb6541
commit
3d7d7d44d6
3 changed files with 110 additions and 9 deletions
|
@ -61,7 +61,8 @@ public class LanguageSettingsSerializableTests extends TestCase {
|
|||
private static final String PROVIDER_NAME_1 = "test.provider.1.name";
|
||||
private static final String PROVIDER_NAME_2 = "test.provider.2.name";
|
||||
private static final String CUSTOM_PARAMETER = "custom.parameter";
|
||||
|
||||
private static final String ATTR_STORE_ENTRIES = "store-entries";
|
||||
private static final String VALUE_PROJECT = "project";
|
||||
private static final String ELEM_TEST = "test";
|
||||
|
||||
/**
|
||||
|
@ -119,6 +120,11 @@ public class LanguageSettingsSerializableTests extends TestCase {
|
|||
assertEquals(PROVIDER_NAME_2, mockProvider.getName());
|
||||
mockProvider.setCustomParameter(CUSTOM_PARAMETER);
|
||||
assertEquals(CUSTOM_PARAMETER, mockProvider.getCustomParameter());
|
||||
|
||||
assertEquals(false, mockProvider.isEntriesStorageWithProject());
|
||||
mockProvider.setEntriesStorageWithProject(true);
|
||||
assertEquals(true, mockProvider.isEntriesStorageWithProject());
|
||||
|
||||
mockProvider.setLanguageScope(languages);
|
||||
assertEquals(languages, mockProvider.getLanguageScope());
|
||||
mockProvider.setLanguageScope(null);
|
||||
|
@ -195,6 +201,31 @@ public class LanguageSettingsSerializableTests extends TestCase {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
public void testStoreEntriesWithProject() throws Exception {
|
||||
Element elementProvider;
|
||||
{
|
||||
// create provider with custom parameter
|
||||
LanguageSettingsSerializable provider = new LanguageSettingsSerializable(PROVIDER_1, PROVIDER_NAME_1);
|
||||
assertEquals(false, provider.isEntriesStorageWithProject());
|
||||
provider.setEntriesStorageWithProject(true);
|
||||
assertEquals(true, provider.isEntriesStorageWithProject());
|
||||
|
||||
Document doc = XmlUtil.newDocument();
|
||||
Element rootElement = XmlUtil.appendElement(doc, ELEM_TEST);
|
||||
elementProvider = provider.serialize(rootElement);
|
||||
String xmlString = XmlUtil.toString(doc);
|
||||
assertTrue(xmlString.contains(ATTR_STORE_ENTRIES));
|
||||
assertTrue(xmlString.contains(VALUE_PROJECT));
|
||||
}
|
||||
{
|
||||
// re-load and check custom parameter of the newly loaded provider
|
||||
LanguageSettingsSerializable provider = new LanguageSettingsSerializable(elementProvider);
|
||||
assertEquals(true, provider.isEntriesStorageWithProject());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
public void testLanguages() throws Exception {
|
||||
|
@ -1012,6 +1043,8 @@ public class LanguageSettingsSerializableTests extends TestCase {
|
|||
LanguageSettingsSerializable provider1 = new LanguageSettingsSerializable(PROVIDER_1, PROVIDER_NAME_1);
|
||||
provider1.setLanguageScope(sampleLanguages);
|
||||
provider1.setCustomParameter(CUSTOM_PARAMETER);
|
||||
assertEquals(false, provider1.isEntriesStorageWithProject());
|
||||
provider1.setEntriesStorageWithProject(true);
|
||||
provider1.setSettingEntries(MOCK_CFG, MOCK_RC, LANG_ID, sampleEntries_1);
|
||||
provider1.setSettingEntries(null, null, LANG_ID, sampleEntries_2);
|
||||
|
||||
|
@ -1034,6 +1067,12 @@ public class LanguageSettingsSerializableTests extends TestCase {
|
|||
assertFalse(provider1.hashCode()==provider2.hashCode());
|
||||
|
||||
provider2.setCustomParameter(CUSTOM_PARAMETER);
|
||||
assertFalse(provider1.equals(provider2));
|
||||
assertFalse(provider1.hashCode()==provider2.hashCode());
|
||||
|
||||
provider2.setEntriesStorageWithProject(true);
|
||||
|
||||
// All set now, so they should be equal
|
||||
assertTrue(provider1.equals(provider2));
|
||||
assertTrue(provider1.hashCode()==provider2.hashCode());
|
||||
|
||||
|
@ -1081,6 +1120,8 @@ public class LanguageSettingsSerializableTests extends TestCase {
|
|||
LanguageSettingsSerializableMock provider1 = new LanguageSettingsSerializableMock(PROVIDER_1, PROVIDER_NAME_1);
|
||||
provider1.setLanguageScope(sampleLanguages);
|
||||
provider1.setCustomParameter(CUSTOM_PARAMETER);
|
||||
assertEquals(false, provider1.isEntriesStorageWithProject());
|
||||
provider1.setEntriesStorageWithProject(true);
|
||||
provider1.setSettingEntries(MOCK_CFG, MOCK_RC, LANG_ID, sampleEntries_1);
|
||||
provider1.setSettingEntries(null, null, LANG_ID, sampleEntries_2);
|
||||
|
||||
|
@ -1090,6 +1131,7 @@ public class LanguageSettingsSerializableTests extends TestCase {
|
|||
assertTrue(provider1.equals(providerClone));
|
||||
assertTrue(provider1.getClass()==providerClone.getClass());
|
||||
assertEquals(provider1.getCustomParameter(), providerClone.getCustomParameter());
|
||||
assertEquals(provider1.isEntriesStorageWithProject(), providerClone.isEntriesStorageWithProject());
|
||||
assertEquals(provider1.getLanguageScope().get(0), providerClone.getLanguageScope().get(0));
|
||||
|
||||
List<ICLanguageSettingEntry> actual1 = providerClone.getSettingEntries(MOCK_CFG, MOCK_RC, LANG_ID);
|
||||
|
@ -1126,6 +1168,8 @@ public class LanguageSettingsSerializableTests extends TestCase {
|
|||
LanguageSettingsSerializableMock provider1 = new LanguageSettingsSerializableMock(PROVIDER_1, PROVIDER_NAME_1);
|
||||
provider1.setLanguageScope(sampleLanguages);
|
||||
provider1.setCustomParameter(CUSTOM_PARAMETER);
|
||||
assertEquals(false, provider1.isEntriesStorageWithProject());
|
||||
provider1.setEntriesStorageWithProject(true);
|
||||
|
||||
List<ICLanguageSettingEntry> entries = new ArrayList<ICLanguageSettingEntry>();
|
||||
entries.add(new CIncludePathEntry("path", 1));
|
||||
|
@ -1137,6 +1181,7 @@ public class LanguageSettingsSerializableTests extends TestCase {
|
|||
assertFalse(provider1.equals(providerClone));
|
||||
assertTrue(provider1.getClass()==providerClone.getClass());
|
||||
assertEquals(provider1.getCustomParameter(), providerClone.getCustomParameter());
|
||||
assertEquals(provider1.isEntriesStorageWithProject(), providerClone.isEntriesStorageWithProject());
|
||||
assertEquals(provider1.getLanguageScope().get(0), providerClone.getLanguageScope().get(0));
|
||||
|
||||
List<ICLanguageSettingEntry> actual = providerClone.getSettingEntries(null, null, null);
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2009, 2010 Andrew Gvozdev (Quoin Inc.) and others.
|
||||
* Copyright (c) 2009, 2011 Andrew Gvozdev and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* Andrew Gvozdev (Quoin Inc.) - initial API and implementation
|
||||
* Andrew Gvozdev - initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.core.language.settings.providers;
|
||||
|
@ -45,12 +45,15 @@ public class LanguageSettingsSerializable extends LanguageSettingsBaseProvider {
|
|||
private static final String ELEM_ENTRY = "entry"; //$NON-NLS-1$
|
||||
private static final String ATTR_KIND = "kind"; //$NON-NLS-1$
|
||||
private static final String ATTR_NAME = "name"; //$NON-NLS-1$
|
||||
private static final String ATTR_VALUE = "value"; //$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_VALUE = "value"; //$NON-NLS-1$
|
||||
|
||||
private static final String ELEM_FLAG = "flag"; //$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 WeakHashSet<List<ICLanguageSettingEntry>> lseListPool = new WeakHashSet<List<ICLanguageSettingEntry>>() {
|
||||
@Override
|
||||
public synchronized List<ICLanguageSettingEntry> add(List<ICLanguageSettingEntry> list) {
|
||||
|
@ -59,6 +62,7 @@ public class LanguageSettingsSerializable extends LanguageSettingsBaseProvider {
|
|||
|
||||
};
|
||||
|
||||
private boolean isEntriesStorageWithProject = false;
|
||||
|
||||
private Map<String, // languageId
|
||||
Map<String, // resource project path
|
||||
|
@ -117,11 +121,30 @@ public class LanguageSettingsSerializable extends LanguageSettingsBaseProvider {
|
|||
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 isEntriesStorageWithProject() {
|
||||
return isEntriesStorageWithProject;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter to define where language settings are persisted.
|
||||
* @param storeEntriesWithProject - {@code true} if with the project,
|
||||
* {@code false} if in workspace area.
|
||||
*/
|
||||
public void setEntriesStorageWithProject(boolean storeEntriesWithProject) {
|
||||
this.isEntriesStorageWithProject = storeEntriesWithProject;
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
fStorage.clear();
|
||||
}
|
||||
|
||||
// TODO: look for refactoring this method
|
||||
private void setSettingEntriesInternal(String rcProjectPath, String languageId, List<ICLanguageSettingEntry> entries) {
|
||||
if (entries!=null) {
|
||||
Map<String, List<ICLanguageSettingEntry>> langMap = fStorage.get(languageId);
|
||||
|
@ -217,6 +240,7 @@ public class LanguageSettingsSerializable extends LanguageSettingsBaseProvider {
|
|||
ATTR_NAME, getName(),
|
||||
ATTR_CLASS, getClass().getCanonicalName(),
|
||||
ATTR_PARAMETER, getCustomParameter(),
|
||||
ATTR_STORE_ENTRIES, isEntriesStorageWithProject() ? VALUE_PROJECT : VALUE_WORKSPACE,
|
||||
});
|
||||
|
||||
if (languageScope!=null) {
|
||||
|
@ -309,9 +333,12 @@ public class LanguageSettingsSerializable extends LanguageSettingsBaseProvider {
|
|||
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);
|
||||
|
||||
this.setId(providerId);
|
||||
this.setName(providerName);
|
||||
this.setCustomParameter(providerParameter);
|
||||
this.setEntriesStorageWithProject(VALUE_PROJECT.equals(providerStoreEntries));
|
||||
|
||||
List<ICLanguageSettingEntry> settings = new ArrayList<ICLanguageSettingEntry>();
|
||||
NodeList nodes = providerNode.getChildNodes();
|
||||
|
@ -456,6 +483,7 @@ public class LanguageSettingsSerializable extends LanguageSettingsBaseProvider {
|
|||
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 + (isEntriesStorageWithProject ? 0 : 1);
|
||||
result = prime * result + ((fStorage == null) ? 0 : fStorage.hashCode());
|
||||
result = prime * result + getClass().hashCode();
|
||||
return result;
|
||||
|
@ -503,6 +531,9 @@ public class LanguageSettingsSerializable extends LanguageSettingsBaseProvider {
|
|||
return false;
|
||||
} else if (!customParameter.equals(other.customParameter))
|
||||
return false;
|
||||
|
||||
if (isEntriesStorageWithProject!=other.isEntriesStorageWithProject)
|
||||
return false;
|
||||
|
||||
if (fStorage == null) {
|
||||
if (other.fStorage != null)
|
||||
|
|
|
@ -206,6 +206,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
|
|||
|
||||
/**
|
||||
* Shortcut for getting the currently selected provider.
|
||||
* Do not use if you need to change provider's settings, use {@link #getWorkingCopy(String)}.
|
||||
*/
|
||||
private ILanguageSettingsProvider getSelectedProvider() {
|
||||
ILanguageSettingsProvider provider = null;
|
||||
|
@ -333,7 +334,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
|
|||
}
|
||||
|
||||
// Called from globalProviderCheckBox listener
|
||||
private void toggleGlobalProvider(ILanguageSettingsProvider oldProvider, boolean toGlobal) {
|
||||
private ILanguageSettingsProvider toggleGlobalProvider(ILanguageSettingsProvider oldProvider, boolean toGlobal) {
|
||||
ILanguageSettingsProvider newProvider = null;
|
||||
|
||||
String id = oldProvider.getId();
|
||||
|
@ -356,7 +357,11 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
|
|||
ICConfigurationDescription cfgDescription = getConfigurationDescription();
|
||||
initializeOptionsPage(newProvider, cfgDescription);
|
||||
displaySelectedOptionPage();
|
||||
} else {
|
||||
newProvider = oldProvider;
|
||||
}
|
||||
|
||||
return newProvider;
|
||||
}
|
||||
|
||||
private void replaceSelectedProvider(ILanguageSettingsProvider newProvider) {
|
||||
|
@ -398,8 +403,10 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
|
|||
boolean isGlobal = globalProviderCheckBox.getSelection();
|
||||
ILanguageSettingsProvider provider = getSelectedProvider();
|
||||
if (isGlobal != LanguageSettingsManager.isWorkspaceProvider(provider)) {
|
||||
toggleGlobalProvider(provider, isGlobal);
|
||||
provider = toggleGlobalProvider(provider, isGlobal);
|
||||
}
|
||||
projectStorageCheckBox.setSelection(provider instanceof LanguageSettingsSerializable
|
||||
&& ((LanguageSettingsSerializable) provider).isEntriesStorageWithProject());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -410,7 +417,23 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
|
|||
});
|
||||
|
||||
projectStorageCheckBox = new Button(groupOptionsPage, SWT.CHECK);
|
||||
projectStorageCheckBox.setText("Store entries under project settings folder (supporting project miration)");
|
||||
projectStorageCheckBox.setText("Store entries in project settings folder (supporting project miration)");
|
||||
projectStorageCheckBox.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
boolean isWithProject = projectStorageCheckBox.getSelection();
|
||||
ILanguageSettingsProvider provider = getWorkingCopy(getSelectedProvider().getId());
|
||||
Assert.isTrue(provider instanceof LanguageSettingsSerializable);
|
||||
((LanguageSettingsSerializable)provider).setEntriesStorageWithProject(isWithProject);
|
||||
refreshItem(provider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void widgetDefaultSelected(SelectionEvent e) {
|
||||
widgetSelected(e);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
linkWorkspacePreferences = createLinkToPreferences(groupOptionsPage, 2);
|
||||
}
|
||||
|
@ -581,6 +604,8 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
|
|||
|
||||
projectStorageCheckBox.setEnabled(!isGlobal);
|
||||
projectStorageCheckBox.setVisible(rawProvider instanceof LanguageSettingsSerializable);
|
||||
projectStorageCheckBox.setSelection(provider instanceof LanguageSettingsSerializable
|
||||
&& ((LanguageSettingsSerializable)provider).isEntriesStorageWithProject());
|
||||
|
||||
boolean needPreferencesLink=isGlobal && currentOptionsPage!=null;
|
||||
// TODO: message
|
||||
|
|
Loading…
Add table
Reference in a new issue