1
0
Fork 0
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:
Andrew Gvozdev 2012-01-31 12:09:15 -05:00
parent ca38bef8cd
commit 70f8fcc6ad
2 changed files with 234 additions and 171 deletions

View file

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

View file

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