diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/settings/model/CProjectDescriptionDeltaTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/settings/model/CProjectDescriptionDeltaTests.java index ff562be920b..4d80b3adff7 100644 --- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/settings/model/CProjectDescriptionDeltaTests.java +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/settings/model/CProjectDescriptionDeltaTests.java @@ -19,6 +19,8 @@ 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.LanguageSettingsSerializable; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.settings.model.util.CDataUtil; import org.eclipse.cdt.core.testplugin.ResourceHelper; @@ -994,5 +996,52 @@ public class CProjectDescriptionDeltaTests extends BaseTestCase{ ICProjectDescription newSetting = (ICProjectDescription)delta.getNewSetting(); 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); + List originalProviders = cfgDescription.getLanguageSettingProviders(); + + // Modification LANGUAGE_SETTINGS_PROVIDERS + ILanguageSettingsProvider provider = new LanguageSettingsSerializable("id", "name"); + List providers = new ArrayList(); + providers.add(provider); + 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 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); + ICConfigurationDescription oldSetting = (ICConfigurationDescription)delta.getOldSetting(); + List oldProviders = oldSetting.getLanguageSettingProviders(); + assertEquals(originalProviders, oldProviders); + + // Check new setting + assertTrue(delta.getNewSetting() instanceof ICConfigurationDescription); + ICConfigurationDescription newSetting = (ICConfigurationDescription)delta.getNewSetting(); + List newProviders = newSetting.getLanguageSettingProviders(); + assertEquals(providers, newProviders); + } } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICDescriptionDelta.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICDescriptionDelta.java index 8467c6966c9..11172d5d99d 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICDescriptionDelta.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICDescriptionDelta.java @@ -49,7 +49,10 @@ public interface ICDescriptionDelta { // int PATH = 1 << 3; int LANGUAGE_ID = 1 << 4; int SOURCE_CONTENT_TYPE = 1 << 5; - int SOURCE_ENTENSIONS = 1 << 6; + int SOURCE_EXTENSIONS = 1 << 6; + /** @deprecated Use ICDescriptionDelta.SOURCE_EXTENSIONS */ + @Deprecated + int SOURCE_ENTENSIONS = SOURCE_EXTENSIONS; // int HEADER_CONTENT_TYPE = 1 << 7; // int HEADER_ENTENSIONS = 1 << 8; int SETTING_ENTRIES = 1 << 9; @@ -66,6 +69,7 @@ public interface ICDescriptionDelta { int OWNER = 1 << 20; int INDEX_CFG = 1 << 21; int SETTING_CFG = INDEX_CFG; + int LANGUAGE_SETTINGS_PROVIDERS = 1 << 22; /** * specifies that the project "isCdtProjectCreating" state was set to false diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionDelta.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionDelta.java index d1b58c260d1..2905135a244 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionDelta.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionDelta.java @@ -171,6 +171,7 @@ public class CProjectDescriptionDelta implements ICDescriptionDelta { if ((flags&EXT_REF)!=0) str.append("EXT_REF|"); if ((flags&OWNER)!=0) str.append("OWNER|"); if ((flags&INDEX_CFG)!=0) str.append("INDEX_CFG|"); + if ((flags&LANGUAGE_SETTINGS_PROVIDERS)!=0) str.append("LANGUAGE_SETTINGS_PROVIDERS|"); if (str.charAt(str.length()-1)=='|') str.deleteCharAt(str.length()-1); return str.toString(); diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionManager.java index c23c8f9e6b9..b1ec933e40f 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionManager.java @@ -50,6 +50,7 @@ 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.model.CModelException; import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICElementDelta; @@ -1556,6 +1557,10 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager { CCorePlugin.log(e); } + List newLSProviders = newCfg.getLanguageSettingProviders(); + List oldLSProviders = oldCfg.getLanguageSettingProviders(); + if(!newLSProviders.equals(oldLSProviders)) + delta.addChangeFlags(ICDescriptionDelta.LANGUAGE_SETTINGS_PROVIDERS); calculateCfgExtSettingsDelta(delta);