diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/AllCoreTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/AllCoreTests.java index 223d165b9c7..816f51c4007 100644 --- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/AllCoreTests.java +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/AllCoreTests.java @@ -14,7 +14,7 @@ import junit.framework.Test; import junit.framework.TestSuite; import org.eclipse.cdt.core.model.failedTests.FailedDeclaratorsTest; -import org.eclipse.cdt.core.settings.model.CConfigurationDescriptionReferenceTests; +import org.eclipse.cdt.core.settings.model.CProjectDescriptionTests; /** @@ -46,7 +46,10 @@ public class AllCoreTests { suite.addTest(DeclaratorsTests.suite()); suite.addTest(FailedDeclaratorsTest.suite()); suite.addTest(CPathEntryTest.suite()); - suite.addTest(CConfigurationDescriptionReferenceTests.suite()); +// suite.addTest(CConfigurationDescriptionReferenceTests.suite()); + //the CProjectDescriptionTests now groups all New Project Model related tests + //which includes the CConfigurationDescriptionReferenceTests + suite.addTest(CProjectDescriptionTests.suite()); suite.addTest(ASTCacheTests.suite()); return suite; diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/settings/model/CProjectDescriptionTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/settings/model/CProjectDescriptionTests.java new file mode 100644 index 00000000000..376db9c0a05 --- /dev/null +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/settings/model/CProjectDescriptionTests.java @@ -0,0 +1,31 @@ +/******************************************************************************* + * Copyright (c) 2007 Intel Corporation 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: + * Intel Corporation - Initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.core.settings.model; + +import junit.framework.Test; +import junit.framework.TestSuite; + +public class CProjectDescriptionTests { + public static void main(String[] args) { + junit.textui.TestRunner.run(suite()); + } + + public static Test suite() { + TestSuite suite = new TestSuite(CProjectDescriptionTests.class.getName()); + + // Just add more test cases here as you create them for + // each class being tested + suite.addTest(CConfigurationDescriptionReferenceTests.suite()); + suite.addTest(ExternalSettingsProviderTests.suite()); + return suite; + + } +} diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexProviderManagerTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexProviderManagerTest.java index 30537c73ce3..5c6fb5ea8ff 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexProviderManagerTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexProviderManagerTest.java @@ -459,6 +459,11 @@ class MockConfig implements ICConfigurationDescription { // TODO Auto-generated method stub } + + public void updateExternalSettingsProviders(String[] ids) { + // TODO Auto-generated method stub + + } } /* diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICConfigurationDescription.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICConfigurationDescription.java index 29b3bbceac9..fc8becd54f2 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICConfigurationDescription.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICConfigurationDescription.java @@ -365,4 +365,6 @@ public interface ICConfigurationDescription extends ICSettingContainer, ICSettin void setExternalSettingsProviderIds(String ids[]); String[] getExternalSettingsProviderIds(); + + void updateExternalSettingsProviders(String[] ids); } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescription.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescription.java index 6c9b07291d3..9f4e09b9a2e 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescription.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescription.java @@ -806,5 +806,12 @@ public class CConfigurationDescription extends CDataProxyContainer implements IC CCorePlugin.log(e); } } - + + public void updateExternalSettingsProviders(String[] ids) { + try { + getSpecSettings().updateExternalSettingsProviders(ids); + } catch (CoreException e) { + CCorePlugin.log(e); + } + } } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescriptionCache.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescriptionCache.java index ecd0a3a0da3..fe3c3e67e49 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescriptionCache.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescriptionCache.java @@ -482,4 +482,10 @@ public class CConfigurationDescriptionCache extends CDefaultConfigurationData throw ExceptionFactory.createIsReadOnlyException(); fSpecSettings.setExternalSettingsProviderIds(ids); } + + public void updateExternalSettingsProviders(String[] ids) { + if(!fInitializing) + throw ExceptionFactory.createIsReadOnlyException(); + fSpecSettings.updateExternalSettingsProviders(ids); + } } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationSpecSettings.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationSpecSettings.java index 133f2e310d5..95cd766a3f3 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationSpecSettings.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationSpecSettings.java @@ -927,5 +927,8 @@ public class CConfigurationSpecSettings implements ICSettingsStorage{ public void setExternalSettingsProviderIds(String ids[]){ ExtensionContainerFactory.setReferencedProviderIds(fCfg, ids); } - + + public void updateExternalSettingsProviders(String[] ids){ + ExtensionContainerFactory.updateReferencedProviderIds(fCfg, ids); + } } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CExternalSettingsManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CExternalSettingsManager.java index 703e1a6d7b5..2e102fa0562 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CExternalSettingsManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CExternalSettingsManager.java @@ -581,6 +581,7 @@ public class CExternalSettingsManager implements ICExternalSettingsListener, ICP } } + private boolean containerContentsChanged(ICfgContainer cr, CContainerRef ref, DeltaInfo deltaInfo){ return processContainerChange(OP_CHANGED, cr, ref, deltaInfo); } @@ -710,6 +711,11 @@ public class CExternalSettingsManager implements ICExternalSettingsListener, ICP } } + public void containerContentsChanged(ICConfigurationDescription cfg, CContainerRef cr){ + CfgContainer ccr = new CfgContainer(cfg); + containerContentsChanged(ccr, cr, null); + } + public void addContainer(ICConfigurationDescription cfg, CContainerRef cr){ CfgContainer ccr = new CfgContainer(cfg); processContainerChange(OP_ADDED, ccr, cr, null); diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/ExtensionContainerFactory.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/ExtensionContainerFactory.java index 4fa1bb87d1c..faa83ba34cf 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/ExtensionContainerFactory.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/ExtensionContainerFactory.java @@ -198,10 +198,30 @@ public class ExtensionContainerFactory extends CExternalSettingContainerFactory } } + public static void updateReferencedProviderIds(ICConfigurationDescription cfg, String ids[]){ + Set newIdsSet = new HashSet(Arrays.asList(ids)); + Set oldIdsSet = new HashSet(Arrays.asList(getReferencedProviderIds(cfg))); + Set newIdsSetCopy = new HashSet(newIdsSet); + newIdsSetCopy.removeAll(oldIdsSet); + newIdsSet.removeAll(newIdsSetCopy); + + if(newIdsSet.size() != 0){ + for(Iterator iter = newIdsSet.iterator(); iter.hasNext();){ + providerChanged(cfg, (String)iter.next()); + } + } + } + private static void createReference(ICConfigurationDescription cfg, String id){ CContainerRef cr = createContainerRef(id); CExternalSettingsManager.getInstance().addContainer(cfg, cr); } + + private static void providerChanged(ICConfigurationDescription cfg, String id){ + CContainerRef cr = createContainerRef(id); + CExternalSettingsManager.getInstance().containerContentsChanged(cfg, cr); + + } private static void removeReference(ICConfigurationDescription cfg, String id){ CContainerRef cr = createContainerRef(id);