mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-03 22:35:43 +02:00
bug 290631: Add language settings delta to CProjectDescriptionDelta
This commit is contained in:
parent
ca38bef8cd
commit
70f8fcc6ad
2 changed files with 234 additions and 171 deletions
|
@ -19,6 +19,9 @@ import java.util.Map;
|
|||
import junit.framework.TestSuite;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider;
|
||||
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvidersKeeper;
|
||||
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsSerializableProvider;
|
||||
import org.eclipse.cdt.core.model.CoreModel;
|
||||
import org.eclipse.cdt.core.settings.model.util.CDataUtil;
|
||||
import org.eclipse.cdt.core.testplugin.ResourceHelper;
|
||||
|
@ -998,4 +1001,54 @@ public class CProjectDescriptionDeltaTests extends BaseTestCase{
|
|||
assertEquals(cfgDescription1.getName(), newSetting.getDefaultSettingConfiguration().getName());
|
||||
}
|
||||
|
||||
public void testDelta_LANGUAGE_SETTINGS_PROVIDERS() throws Exception {
|
||||
String projName = getName();
|
||||
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
|
||||
|
||||
initListener(projName);
|
||||
IProject project = ResourceHelper.createCDTProjectWithConfig(projName);
|
||||
|
||||
// Get writable project description and its configuration
|
||||
ICProjectDescription prjDescription = mngr.getProjectDescription(project, true);
|
||||
assertNotNull(prjDescription);
|
||||
ICConfigurationDescription cfgDescription = prjDescription.getConfigurations()[0];
|
||||
assertNotNull(cfgDescription);
|
||||
assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
|
||||
List<ILanguageSettingsProvider> originalProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
|
||||
|
||||
// Modification LANGUAGE_SETTINGS_PROVIDERS
|
||||
ILanguageSettingsProvider provider = new LanguageSettingsSerializableProvider("test.id", "test.name");
|
||||
List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
|
||||
providers.add(provider);
|
||||
((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers);
|
||||
|
||||
// Write project description
|
||||
listener.clearNotified();
|
||||
mngr.setProjectDescription(project, prjDescription);
|
||||
assertEquals(true, listener.isNotified());
|
||||
|
||||
// Analyze delta
|
||||
ICDescriptionDelta rootDelta = listener.getDelta();
|
||||
assertNotNull(rootDelta);
|
||||
List<ICDescriptionDelta> deltas = findDeltas(rootDelta, ICDescriptionDelta.LANGUAGE_SETTINGS_PROVIDERS);
|
||||
assertEquals(1, deltas.size());
|
||||
ICDescriptionDelta delta = deltas.get(0);
|
||||
assertNotNull(delta);
|
||||
assertEquals(ICDescriptionDelta.LANGUAGE_SETTINGS_PROVIDERS, delta.getChangeFlags());
|
||||
|
||||
// Check old setting
|
||||
assertTrue(delta.getOldSetting() instanceof ICConfigurationDescription);
|
||||
assertTrue(delta.getOldSetting() instanceof ILanguageSettingsProvidersKeeper);
|
||||
ILanguageSettingsProvidersKeeper oldSetting = (ILanguageSettingsProvidersKeeper)delta.getOldSetting();
|
||||
List<ILanguageSettingsProvider> oldProviders = oldSetting.getLanguageSettingProviders();
|
||||
assertEquals(originalProviders, oldProviders);
|
||||
|
||||
// Check new setting
|
||||
assertTrue(delta.getNewSetting() instanceof ICConfigurationDescription);
|
||||
assertTrue(delta.getNewSetting() instanceof ILanguageSettingsProvidersKeeper);
|
||||
ILanguageSettingsProvidersKeeper newSetting = (ILanguageSettingsProvidersKeeper)delta.getNewSetting();
|
||||
List<ILanguageSettingsProvider> newProviders = newSetting.getLanguageSettingProviders();
|
||||
assertEquals(providers, newProviders);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -50,6 +50,8 @@ import javax.xml.transform.dom.DOMSource;
|
|||
import javax.xml.transform.stream.StreamResult;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider;
|
||||
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvidersKeeper;
|
||||
import org.eclipse.cdt.core.model.CModelException;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.model.ICElementDelta;
|
||||
|
@ -1569,6 +1571,14 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
|||
CCorePlugin.log(e);
|
||||
}
|
||||
|
||||
List<ILanguageSettingsProvider> newLSProviders = null;
|
||||
if (newCfg instanceof ILanguageSettingsProvidersKeeper)
|
||||
newLSProviders = ((ILanguageSettingsProvidersKeeper) newCfg).getLanguageSettingProviders();
|
||||
List<ILanguageSettingsProvider> oldLSProviders = null;
|
||||
if (oldCfg instanceof ILanguageSettingsProvidersKeeper)
|
||||
oldLSProviders = ((ILanguageSettingsProvidersKeeper) oldCfg).getLanguageSettingProviders();
|
||||
if(newLSProviders != oldLSProviders && (newLSProviders == null || !newLSProviders.equals(oldLSProviders)))
|
||||
delta.addChangeFlags(ICDescriptionDelta.LANGUAGE_SETTINGS_PROVIDERS);
|
||||
|
||||
calculateCfgExtSettingsDelta(delta);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue