1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

bug 284699: Added some annotations/comments

This commit is contained in:
Andrew Gvozdev 2012-01-19 16:39:56 -05:00
parent 533c75662e
commit c7adafb18b
3 changed files with 80 additions and 75 deletions

View file

@ -8,15 +8,16 @@
* Contributors: * Contributors:
* Intel Corporation - Initial API and implementation * Intel Corporation - Initial API and implementation
* James Blackburn (Broadcom Corp.) * James Blackburn (Broadcom Corp.)
* Christian Walther (Indel AG) - [335344] test for changing language IDs * Christian Walther (Indel AG) - bug 335344: test for changing language IDs
* Raphael Zulliger (Indel AG) - [284699][237771] test having macros with same * Raphael Zulliger (Indel AG) - bug 284699: test having macros with same
* name but different values in same project * name but different values in same project
* configuration * configuration
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.core.settings.model; package org.eclipse.cdt.core.settings.model;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import junit.framework.TestSuite; import junit.framework.TestSuite;
import org.eclipse.cdt.core.dom.IPDOMManager; import org.eclipse.cdt.core.dom.IPDOMManager;
@ -33,11 +34,11 @@ import org.eclipse.core.runtime.Path;
public class ExternalSettingsProviderTests extends BaseTestCase{ public class ExternalSettingsProviderTests extends BaseTestCase{
private static final String PROJ_NAME_PREFIX = "espt_"; private static final String PROJ_NAME_PREFIX = "espt_";
ICProject p1, p2, p3, p4, p5, p6; ICProject p1, p2, p3, p4, p5, p6;
public static TestSuite suite() { public static TestSuite suite() {
return suite(ExternalSettingsProviderTests.class, "_"); return suite(ExternalSettingsProviderTests.class, "_");
} }
@Override @Override
protected void setUp() throws Exception { protected void setUp() throws Exception {
p1 = CProjectHelper.createNewStileCProject(PROJ_NAME_PREFIX + "a", IPDOMManager.ID_NO_INDEXER); p1 = CProjectHelper.createNewStileCProject(PROJ_NAME_PREFIX + "a", IPDOMManager.ID_NO_INDEXER);
@ -47,7 +48,7 @@ public class ExternalSettingsProviderTests extends BaseTestCase{
p5 = CProjectHelper.createNewStileCProject(PROJ_NAME_PREFIX + "e", IPDOMManager.ID_NO_INDEXER); p5 = CProjectHelper.createNewStileCProject(PROJ_NAME_PREFIX + "e", IPDOMManager.ID_NO_INDEXER);
p6 = CProjectHelper.createNewStileCProject(PROJ_NAME_PREFIX + "f", IPDOMManager.ID_NO_INDEXER); p6 = CProjectHelper.createNewStileCProject(PROJ_NAME_PREFIX + "f", IPDOMManager.ID_NO_INDEXER);
} }
/** /**
* Test adding a external setting provider to p1 -- the contributed paths should appear * Test adding a external setting provider to p1 -- the contributed paths should appear
* @throws Exception * @throws Exception
@ -56,7 +57,7 @@ public class ExternalSettingsProviderTests extends BaseTestCase{
TestExtSettingsProvider.setVariantNum(0); TestExtSettingsProvider.setVariantNum(0);
CoreModel model = CoreModel.getDefault(); CoreModel model = CoreModel.getDefault();
IProject project = p1.getProject(); IProject project = p1.getProject();
ICProjectDescription des = model.getProjectDescription(project); ICProjectDescription des = model.getProjectDescription(project);
ICConfigurationDescription cfgDes = des.getConfigurations()[0]; ICConfigurationDescription cfgDes = des.getConfigurations()[0];
ICLanguageSetting ls = cfgDes.getLanguageSettingForFile(new Path("a.c"), true); ICLanguageSetting ls = cfgDes.getLanguageSettingForFile(new Path("a.c"), true);
@ -87,44 +88,44 @@ public class ExternalSettingsProviderTests extends BaseTestCase{
new CSourceEntry(project.getFullPath().append("sp_b"), null, 0), new CSourceEntry(project.getFullPath().append("sp_b"), null, 0),
}; };
assertTrue(Arrays.equals(newExpectedSourceEntries, sourceEntries)); assertTrue(Arrays.equals(newExpectedSourceEntries, sourceEntries));
// insert entry into the mix; check that the new entry appears // insert entry into the mix; check that the new entry appears
ICLanguageSettingEntry[] newEntries = new ICLanguageSettingEntry[3]; ICLanguageSettingEntry[] newEntries = new ICLanguageSettingEntry[3];
newEntries[0] = expectedEntries[1]; newEntries[0] = expectedEntries[1];
newEntries[1] = new CIncludePathEntry("added", 0); newEntries[1] = new CIncludePathEntry("added", 0);
newEntries[2] = expectedEntries[0]; newEntries[2] = expectedEntries[0];
ls.setSettingEntries(ICSettingEntry.INCLUDE_PATH, newEntries); ls.setSettingEntries(ICSettingEntry.INCLUDE_PATH, newEntries);
entries = ls.getSettingEntries(ICSettingEntry.INCLUDE_PATH); entries = ls.getSettingEntries(ICSettingEntry.INCLUDE_PATH);
assertEquals(3, entries.length); assertEquals(3, entries.length);
assertTrue(Arrays.equals(newEntries, entries)); assertTrue(Arrays.equals(newEntries, entries));
newEntries = new ICLanguageSettingEntry[1]; newEntries = new ICLanguageSettingEntry[1];
newEntries[0] = expectedEntries[0]; newEntries[0] = expectedEntries[0];
ls.setSettingEntries(ICSettingEntry.INCLUDE_PATH, newEntries); ls.setSettingEntries(ICSettingEntry.INCLUDE_PATH, newEntries);
entries = ls.getSettingEntries(ICSettingEntry.INCLUDE_PATH); entries = ls.getSettingEntries(ICSettingEntry.INCLUDE_PATH);
assertEquals(1, entries.length); assertEquals(1, entries.length);
assertTrue(Arrays.equals(newEntries, entries)); assertTrue(Arrays.equals(newEntries, entries));
newEntries = new ICLanguageSettingEntry[0]; newEntries = new ICLanguageSettingEntry[0];
ls.setSettingEntries(ICSettingEntry.INCLUDE_PATH, newEntries); ls.setSettingEntries(ICSettingEntry.INCLUDE_PATH, newEntries);
entries = ls.getSettingEntries(ICSettingEntry.INCLUDE_PATH); entries = ls.getSettingEntries(ICSettingEntry.INCLUDE_PATH);
assertEquals(0, entries.length); assertEquals(0, entries.length);
ls.setSettingEntries(ICSettingEntry.INCLUDE_PATH, (ICLanguageSettingEntry[])null); ls.setSettingEntries(ICSettingEntry.INCLUDE_PATH, (ICLanguageSettingEntry[])null);
entries = ls.getSettingEntries(ICSettingEntry.INCLUDE_PATH); entries = ls.getSettingEntries(ICSettingEntry.INCLUDE_PATH);
assertEquals(2, entries.length); assertEquals(2, entries.length);
assertTrue(Arrays.equals(expectedEntries, entries)); assertTrue(Arrays.equals(expectedEntries, entries));
} }
public void testCreateCfg() throws Exception { public void testCreateCfg() throws Exception {
TestExtSettingsProvider.setVariantNum(0); TestExtSettingsProvider.setVariantNum(0);
CoreModel model = CoreModel.getDefault(); CoreModel model = CoreModel.getDefault();
IProject project = p2.getProject(); IProject project = p2.getProject();
ICProjectDescription des = model.getProjectDescription(project); ICProjectDescription des = model.getProjectDescription(project);
ICConfigurationDescription cfgDes = des.getConfigurations()[0]; ICConfigurationDescription cfgDes = des.getConfigurations()[0];
ICLanguageSetting ls = cfgDes.getLanguageSettingForFile(new Path("a.c"), true); ICLanguageSetting ls = cfgDes.getLanguageSettingForFile(new Path("a.c"), true);
@ -138,24 +139,24 @@ public class ExternalSettingsProviderTests extends BaseTestCase{
assertTrue(Arrays.equals(expectedSourceEntries, sourceEntries)); assertTrue(Arrays.equals(expectedSourceEntries, sourceEntries));
String[] extPIds = new String[]{CTestPlugin.PLUGIN_ID + ".testExtSettingsProvider"}; String[] extPIds = new String[]{CTestPlugin.PLUGIN_ID + ".testExtSettingsProvider"};
cfgDes.setExternalSettingsProviderIds(extPIds); cfgDes.setExternalSettingsProviderIds(extPIds);
model.setProjectDescription(project, des); model.setProjectDescription(project, des);
des = model.getProjectDescription(project, false); des = model.getProjectDescription(project, false);
cfgDes = des.getConfigurations()[0]; cfgDes = des.getConfigurations()[0];
assertEquals(extPIds.length, cfgDes.getExternalSettingsProviderIds().length); assertEquals(extPIds.length, cfgDes.getExternalSettingsProviderIds().length);
assertTrue(Arrays.equals(extPIds, cfgDes.getExternalSettingsProviderIds())); assertTrue(Arrays.equals(extPIds, cfgDes.getExternalSettingsProviderIds()));
des = model.getProjectDescription(project); des = model.getProjectDescription(project);
cfgDes = des.getConfigurations()[0]; cfgDes = des.getConfigurations()[0];
assertEquals(extPIds.length, cfgDes.getExternalSettingsProviderIds().length); assertEquals(extPIds.length, cfgDes.getExternalSettingsProviderIds().length);
assertTrue(Arrays.equals(extPIds, cfgDes.getExternalSettingsProviderIds())); assertTrue(Arrays.equals(extPIds, cfgDes.getExternalSettingsProviderIds()));
String newCfgId = CDataUtil.genId(null); String newCfgId = CDataUtil.genId(null);
ICConfigurationDescription cfgDes2 = des.createConfiguration(newCfgId, "cfg2", cfgDes); ICConfigurationDescription cfgDes2 = des.createConfiguration(newCfgId, "cfg2", cfgDes);
assertEquals(extPIds.length, cfgDes2.getExternalSettingsProviderIds().length); assertEquals(extPIds.length, cfgDes2.getExternalSettingsProviderIds().length);
assertTrue(Arrays.equals(extPIds, cfgDes2.getExternalSettingsProviderIds())); assertTrue(Arrays.equals(extPIds, cfgDes2.getExternalSettingsProviderIds()));
ls = cfgDes2.getLanguageSettingForFile(new Path("a.c"), true); ls = cfgDes2.getLanguageSettingForFile(new Path("a.c"), true);
entries = ls.getSettingEntries(ICSettingEntry.INCLUDE_PATH); entries = ls.getSettingEntries(ICSettingEntry.INCLUDE_PATH);
ICLanguageSettingEntry[] expectedEntries = new ICLanguageSettingEntry[]{ ICLanguageSettingEntry[] expectedEntries = new ICLanguageSettingEntry[]{
@ -165,14 +166,14 @@ public class ExternalSettingsProviderTests extends BaseTestCase{
assertTrue(Arrays.equals(expectedEntries, entries)); assertTrue(Arrays.equals(expectedEntries, entries));
} }
public void testProviderUpdate() throws Exception { public void testProviderUpdate() throws Exception {
TestExtSettingsProvider.setVariantNum(0); TestExtSettingsProvider.setVariantNum(0);
CoreModel model = CoreModel.getDefault(); CoreModel model = CoreModel.getDefault();
ICProjectDescriptionManager mngr = model.getProjectDescriptionManager(); ICProjectDescriptionManager mngr = model.getProjectDescriptionManager();
IProject project = p2.getProject(); IProject project = p2.getProject();
ICProjectDescription des = model.getProjectDescription(project); ICProjectDescription des = model.getProjectDescription(project);
ICConfigurationDescription cfgDes = des.getConfigurations()[0]; ICConfigurationDescription cfgDes = des.getConfigurations()[0];
ICLanguageSetting ls = cfgDes.getLanguageSettingForFile(new Path("a.c"), true); ICLanguageSetting ls = cfgDes.getLanguageSettingForFile(new Path("a.c"), true);
@ -186,7 +187,7 @@ public class ExternalSettingsProviderTests extends BaseTestCase{
assertTrue(Arrays.equals(expectedSourceEntries, sourceEntries)); assertTrue(Arrays.equals(expectedSourceEntries, sourceEntries));
String[] extPIds = new String[]{CTestPlugin.PLUGIN_ID + ".testExtSettingsProvider"}; String[] extPIds = new String[]{CTestPlugin.PLUGIN_ID + ".testExtSettingsProvider"};
cfgDes.setExternalSettingsProviderIds(extPIds); cfgDes.setExternalSettingsProviderIds(extPIds);
ls = cfgDes.getLanguageSettingForFile(new Path("a.c"), true); ls = cfgDes.getLanguageSettingForFile(new Path("a.c"), true);
entries = ls.getSettingEntries(ICSettingEntry.INCLUDE_PATH); entries = ls.getSettingEntries(ICSettingEntry.INCLUDE_PATH);
@ -197,19 +198,19 @@ public class ExternalSettingsProviderTests extends BaseTestCase{
assertTrue(Arrays.equals(expectedEntries, entries)); assertTrue(Arrays.equals(expectedEntries, entries));
model.setProjectDescription(project, des); model.setProjectDescription(project, des);
des = model.getProjectDescription(project); des = model.getProjectDescription(project);
cfgDes = des.getConfigurations()[0]; cfgDes = des.getConfigurations()[0];
ls = cfgDes.getLanguageSettingForFile(new Path("a.c"), true); ls = cfgDes.getLanguageSettingForFile(new Path("a.c"), true);
entries = ls.getSettingEntries(ICSettingEntry.INCLUDE_PATH); entries = ls.getSettingEntries(ICSettingEntry.INCLUDE_PATH);
assertTrue(Arrays.equals(expectedEntries, entries)); assertTrue(Arrays.equals(expectedEntries, entries));
ICLanguageSettingEntry[] expectedEntries2 = new ICLanguageSettingEntry[]{ ICLanguageSettingEntry[] expectedEntries2 = new ICLanguageSettingEntry[]{
new CIncludePathEntry("ip_a2", 0), new CIncludePathEntry("ip_a2", 0),
new CIncludePathEntry("ip_b2", 0), new CIncludePathEntry("ip_b2", 0),
}; };
TestExtSettingsProvider.setVariantNum(1); TestExtSettingsProvider.setVariantNum(1);
mngr.updateExternalSettingsProviders(extPIds, null); mngr.updateExternalSettingsProviders(extPIds, null);
des = model.getProjectDescription(project); des = model.getProjectDescription(project);
cfgDes = des.getConfigurations()[0]; cfgDes = des.getConfigurations()[0];
@ -217,14 +218,14 @@ public class ExternalSettingsProviderTests extends BaseTestCase{
entries = ls.getSettingEntries(ICSettingEntry.INCLUDE_PATH); entries = ls.getSettingEntries(ICSettingEntry.INCLUDE_PATH);
assertTrue(Arrays.equals(expectedEntries2, entries)); assertTrue(Arrays.equals(expectedEntries2, entries));
} }
public void testRestoreDefaults() throws Exception { public void testRestoreDefaults() throws Exception {
TestExtSettingsProvider.setVariantNum(0); TestExtSettingsProvider.setVariantNum(0);
CoreModel model = CoreModel.getDefault(); CoreModel model = CoreModel.getDefault();
ICProjectDescriptionManager mngr = model.getProjectDescriptionManager(); ICProjectDescriptionManager mngr = model.getProjectDescriptionManager();
IProject project = p4.getProject(); IProject project = p4.getProject();
ICProjectDescription des = model.getProjectDescription(project); ICProjectDescription des = model.getProjectDescription(project);
ICConfigurationDescription cfgDes = des.getConfigurations()[0]; ICConfigurationDescription cfgDes = des.getConfigurations()[0];
ICLanguageSetting ls = cfgDes.getLanguageSettingForFile(new Path("a.c"), true); ICLanguageSetting ls = cfgDes.getLanguageSettingForFile(new Path("a.c"), true);
@ -238,7 +239,7 @@ public class ExternalSettingsProviderTests extends BaseTestCase{
assertTrue(Arrays.equals(expectedSourceEntries, sourceEntries)); assertTrue(Arrays.equals(expectedSourceEntries, sourceEntries));
String[] extPIds = new String[]{CTestPlugin.PLUGIN_ID + ".testExtSettingsProvider"}; String[] extPIds = new String[]{CTestPlugin.PLUGIN_ID + ".testExtSettingsProvider"};
cfgDes.setExternalSettingsProviderIds(extPIds); cfgDes.setExternalSettingsProviderIds(extPIds);
ls = cfgDes.getLanguageSettingForFile(new Path("a.c"), true); ls = cfgDes.getLanguageSettingForFile(new Path("a.c"), true);
entries = ls.getSettingEntries(ICSettingEntry.INCLUDE_PATH); entries = ls.getSettingEntries(ICSettingEntry.INCLUDE_PATH);
@ -249,7 +250,7 @@ public class ExternalSettingsProviderTests extends BaseTestCase{
assertTrue(Arrays.equals(expectedEntries, entries)); assertTrue(Arrays.equals(expectedEntries, entries));
model.setProjectDescription(project, des); model.setProjectDescription(project, des);
des = model.getProjectDescription(project); des = model.getProjectDescription(project);
cfgDes = des.getConfigurations()[0]; cfgDes = des.getConfigurations()[0];
ls = cfgDes.getLanguageSettingForFile(new Path("a.c"), true); ls = cfgDes.getLanguageSettingForFile(new Path("a.c"), true);
@ -263,7 +264,7 @@ public class ExternalSettingsProviderTests extends BaseTestCase{
cfgDes.setSourceEntries(null); cfgDes.setSourceEntries(null);
expectedSourceEntries = new ICSourceEntry[]{ expectedSourceEntries = new ICSourceEntry[]{
new CSourceEntry(project.getFullPath().append("sp_a"), null, 0), new CSourceEntry(project.getFullPath().append("sp_a"), null, 0),
new CSourceEntry(project.getFullPath().append("sp_b"), null, 0), new CSourceEntry(project.getFullPath().append("sp_b"), null, 0),
}; };
sourceEntries = cfgDes.getSourceEntries(); sourceEntries = cfgDes.getSourceEntries();
assertEquals(2, sourceEntries.length); assertEquals(2, sourceEntries.length);
@ -329,7 +330,7 @@ public class ExternalSettingsProviderTests extends BaseTestCase{
assertTrue(Arrays.equals(cfgDes.getSourceEntries(), makeProjectRelativePath(project, provided))); assertTrue(Arrays.equals(cfgDes.getSourceEntries(), makeProjectRelativePath(project, provided)));
break; break;
default: default:
fail("Unhandled entry_kind: " + kind); fail("Unhandled entry_kind: " + kind);
} }
} }
} }
@ -345,11 +346,11 @@ public class ExternalSettingsProviderTests extends BaseTestCase{
for (int i = 0; i < input.length; i ++) { for (int i = 0; i < input.length; i ++) {
switch (input[i].getKind()) { switch (input[i].getKind()) {
case ICSettingEntry.OUTPUT_PATH: case ICSettingEntry.OUTPUT_PATH:
out[i] = new COutputEntry(project.getFullPath().append(input[i].getValue()), out[i] = new COutputEntry(project.getFullPath().append(input[i].getValue()),
((ICOutputEntry)input[i]).getExclusionPatterns(), input[i].getFlags()); ((ICOutputEntry)input[i]).getExclusionPatterns(), input[i].getFlags());
break; break;
case ICSettingEntry.SOURCE_PATH: case ICSettingEntry.SOURCE_PATH:
out[i] = new CSourceEntry(project.getFullPath().append(input[i].getValue()), out[i] = new CSourceEntry(project.getFullPath().append(input[i].getValue()),
((ICSourceEntry)input[i]).getExclusionPatterns(), input[i].getFlags()); ((ICSourceEntry)input[i]).getExclusionPatterns(), input[i].getFlags());
break; break;
} }
@ -366,14 +367,14 @@ public class ExternalSettingsProviderTests extends BaseTestCase{
CoreModel model = CoreModel.getDefault(); CoreModel model = CoreModel.getDefault();
ICProjectDescriptionManager mngr = model.getProjectDescriptionManager(); ICProjectDescriptionManager mngr = model.getProjectDescriptionManager();
IProject project = p5.getProject(); IProject project = p5.getProject();
// add external settings provider // add external settings provider
ICProjectDescription des = model.getProjectDescription(project); ICProjectDescription des = model.getProjectDescription(project);
ICConfigurationDescription cfgDes = des.getConfigurations()[0]; ICConfigurationDescription cfgDes = des.getConfigurations()[0];
String[] extPIds = new String[]{TestExtSettingsProvider.TEST_EXTERNAL_PROVIDER_ID}; String[] extPIds = new String[]{TestExtSettingsProvider.TEST_EXTERNAL_PROVIDER_ID};
cfgDes.setExternalSettingsProviderIds(extPIds); cfgDes.setExternalSettingsProviderIds(extPIds);
model.setProjectDescription(project, des); model.setProjectDescription(project, des);
// read out the settings it caused // read out the settings it caused
des = model.getProjectDescription(project, false); des = model.getProjectDescription(project, false);
cfgDes = des.getConfigurations()[0]; cfgDes = des.getConfigurations()[0];
@ -382,31 +383,31 @@ public class ExternalSettingsProviderTests extends BaseTestCase{
for (ICLanguageSetting s: root.getLanguageSettings()) { for (ICLanguageSetting s: root.getLanguageSettings()) {
languageSettingsById.put(s.getLanguageId(), s); languageSettingsById.put(s.getLanguageId(), s);
} }
ICLanguageSetting ls; ICLanguageSetting ls;
ICLanguageSettingEntry[] entries; ICLanguageSettingEntry[] entries;
ICLanguageSettingEntry[] expectedEntriesSet = new ICLanguageSettingEntry[]{ ICLanguageSettingEntry[] expectedEntriesSet = new ICLanguageSettingEntry[]{
new CMacroEntry("m_c", "mv_c", 0) new CMacroEntry("m_c", "mv_c", 0)
}; };
ICLanguageSettingEntry[] expectedEntriesUnset = new ICLanguageSettingEntry[] {}; ICLanguageSettingEntry[] expectedEntriesUnset = new ICLanguageSettingEntry[] {};
// setting should be present for assembly but not for C // setting should be present for assembly but not for C
ls = languageSettingsById.get("org.eclipse.cdt.core.assembly"); ls = languageSettingsById.get("org.eclipse.cdt.core.assembly");
assertNotNull(ls); assertNotNull(ls);
entries = ls.getSettingEntries(ICSettingEntry.MACRO); entries = ls.getSettingEntries(ICSettingEntry.MACRO);
assertEquals(1, entries.length); assertEquals(1, entries.length);
assertTrue(Arrays.equals(expectedEntriesSet, entries)); assertTrue(Arrays.equals(expectedEntriesSet, entries));
ls = languageSettingsById.get("org.eclipse.cdt.core.gcc"); ls = languageSettingsById.get("org.eclipse.cdt.core.gcc");
assertNotNull(ls); assertNotNull(ls);
entries = ls.getSettingEntries(ICSettingEntry.MACRO); entries = ls.getSettingEntries(ICSettingEntry.MACRO);
assertEquals(0, entries.length); assertEquals(0, entries.length);
assertTrue(Arrays.equals(expectedEntriesUnset, entries)); assertTrue(Arrays.equals(expectedEntriesUnset, entries));
// update settings provider // update settings provider
TestExtSettingsProvider.setVariantNum(3); TestExtSettingsProvider.setVariantNum(3);
mngr.updateExternalSettingsProviders(extPIds, null); mngr.updateExternalSettingsProviders(extPIds, null);
// read out the settings it caused // read out the settings it caused
des = model.getProjectDescription(project, false); des = model.getProjectDescription(project, false);
cfgDes = des.getConfigurations()[0]; cfgDes = des.getConfigurations()[0];
@ -415,14 +416,14 @@ public class ExternalSettingsProviderTests extends BaseTestCase{
for (ICLanguageSetting s: root.getLanguageSettings()) { for (ICLanguageSetting s: root.getLanguageSettings()) {
languageSettingsById.put(s.getLanguageId(), s); languageSettingsById.put(s.getLanguageId(), s);
} }
// setting should be present for both now // setting should be present for both now
ls = languageSettingsById.get("org.eclipse.cdt.core.gcc"); ls = languageSettingsById.get("org.eclipse.cdt.core.gcc");
assertNotNull(ls); assertNotNull(ls);
entries = ls.getSettingEntries(ICSettingEntry.MACRO); entries = ls.getSettingEntries(ICSettingEntry.MACRO);
assertEquals(1, entries.length); assertEquals(1, entries.length);
assertTrue(Arrays.equals(expectedEntriesSet, entries)); assertTrue(Arrays.equals(expectedEntriesSet, entries));
ls = languageSettingsById.get("org.eclipse.cdt.core.assembly"); ls = languageSettingsById.get("org.eclipse.cdt.core.assembly");
assertNotNull(ls); assertNotNull(ls);
entries = ls.getSettingEntries(ICSettingEntry.MACRO); entries = ls.getSettingEntries(ICSettingEntry.MACRO);
@ -440,7 +441,7 @@ public class ExternalSettingsProviderTests extends BaseTestCase{
CoreModel model = CoreModel.getDefault(); CoreModel model = CoreModel.getDefault();
ICProjectDescriptionManager mngr = model.getProjectDescriptionManager(); ICProjectDescriptionManager mngr = model.getProjectDescriptionManager();
IProject project = p6.getProject(); IProject project = p6.getProject();
// add external settings provider // add external settings provider
ICProjectDescription des = model.getProjectDescription(project); ICProjectDescription des = model.getProjectDescription(project);
ICConfigurationDescription cfgDes = des.getConfigurations()[0]; ICConfigurationDescription cfgDes = des.getConfigurations()[0];
@ -448,7 +449,7 @@ public class ExternalSettingsProviderTests extends BaseTestCase{
cfgDes.setExternalSettingsProviderIds(extPIds); cfgDes.setExternalSettingsProviderIds(extPIds);
ICFolderDescription root = cfgDes.getRootFolderDescription(); ICFolderDescription root = cfgDes.getRootFolderDescription();
model.setProjectDescription(project, des); model.setProjectDescription(project, des);
// read out the settings it caused // read out the settings it caused
des = model.getProjectDescription(project, false); des = model.getProjectDescription(project, false);
cfgDes = des.getConfigurations()[0]; cfgDes = des.getConfigurations()[0];

View file

@ -7,9 +7,9 @@
* *
* Contributors: * Contributors:
* Intel Corporation - Initial API and implementation * Intel Corporation - Initial API and implementation
* Christian Walther (Indel AG) - [335344] test for changing language IDs * Christian Walther (Indel AG) - bug 335344: test for changing language IDs
* Raphael Zulliger (Indel AG) - [284699][237771] test having macros with same * Raphael Zulliger (Indel AG) - bug 284699: test having macros with same
* name but different values in same project * name but different values in same project
* configuration * configuration
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.core.settings.model; package org.eclipse.cdt.core.settings.model;
@ -19,7 +19,7 @@ import org.eclipse.cdt.core.testplugin.CTestPlugin;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
public class TestExtSettingsProvider extends CExternalSettingProvider { public class TestExtSettingsProvider extends CExternalSettingProvider {
public static final String TEST_EXTERNAL_PROVIDER_ID = CTestPlugin.PLUGIN_ID + ".testExtSettingsProvider"; public static final String TEST_EXTERNAL_PROVIDER_ID = CTestPlugin.PLUGIN_ID + ".testExtSettingsProvider";
private static CExternalSetting[] SETTINGS_1 = new CExternalSetting[]{ private static CExternalSetting[] SETTINGS_1 = new CExternalSetting[]{
@ -42,7 +42,7 @@ public class TestExtSettingsProvider extends CExternalSettingProvider {
new COutputEntry("op_b", null, 0), new COutputEntry("op_b", null, 0),
}) })
}; };
private static CExternalSetting[] SETTINGS_2 = new CExternalSetting[]{ private static CExternalSetting[] SETTINGS_2 = new CExternalSetting[]{
new CExternalSetting(null, null, null, new ICSettingEntry[]{ new CExternalSetting(null, null, null, new ICSettingEntry[]{
new CIncludePathEntry("ip_a2", 0), new CIncludePathEntry("ip_a2", 0),
@ -75,7 +75,7 @@ public class TestExtSettingsProvider extends CExternalSettingProvider {
} }
) )
}; };
private static CExternalSetting[] SETTINGS_4 = new CExternalSetting[]{ private static CExternalSetting[] SETTINGS_4 = new CExternalSetting[]{
new CExternalSetting( new CExternalSetting(
new String[]{ new String[]{
@ -109,28 +109,28 @@ public class TestExtSettingsProvider extends CExternalSettingProvider {
} }
) )
}; };
public static final CExternalSetting[][] SETTINGS_VARIANTS = new CExternalSetting[][]{ public static final CExternalSetting[][] SETTINGS_VARIANTS = new CExternalSetting[][]{
SETTINGS_1, SETTINGS_1,
SETTINGS_2, SETTINGS_2,
SETTINGS_3, SETTINGS_3,
SETTINGS_4, SETTINGS_4,
SETTINGS_5}; SETTINGS_5};
private static int variantNum; private static int variantNum;
@Override @Override
public CExternalSetting[] getSettings(IProject project, public CExternalSetting[] getSettings(IProject project,
ICConfigurationDescription cfg) { ICConfigurationDescription cfg) {
return SETTINGS_VARIANTS[variantNum].clone(); return SETTINGS_VARIANTS[variantNum].clone();
} }
public static void setVariantNum(int num){ public static void setVariantNum(int num){
if(num < 0 || num >= SETTINGS_VARIANTS.length) if(num < 0 || num >= SETTINGS_VARIANTS.length)
throw new IllegalArgumentException(); throw new IllegalArgumentException();
variantNum = num; variantNum = num;
} }
public static int getVariantNum(){ public static int getVariantNum(){
return variantNum; return variantNum;
} }

View file

@ -7,7 +7,7 @@
* *
* Contributors: * Contributors:
* Intel Corporation - Initial API and implementation * Intel Corporation - Initial API and implementation
* Raphael Zulliger (Indel AG) - [284699][237771] fixing issues when using same * Raphael Zulliger (Indel AG) - bug 284699: fixing issues when using same
* macro names with different values * macro names with different values
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.core.settings.model.util; package org.eclipse.cdt.core.settings.model.util;
@ -21,14 +21,18 @@ import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.core.settings.model.ICSettingEntry; import org.eclipse.cdt.core.settings.model.ICSettingEntry;
import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IPath;
/**
* Cache of setting entries stored with multidimentional maps.
* See bug 284699 comment 7 for a possible insight into it.
*/
public class CSettingEntryFactory { public class CSettingEntryFactory {
private static final HashSet<IPath> EMPTY_SET = new HashSet<IPath>(0); private static final HashSet<IPath> EMPTY_SET = new HashSet<IPath>(0);
private KindBasedStore<HashMap<String, ?>> fStore = new KindBasedStore<HashMap<String, ?>>(false); private KindBasedStore<HashMap<String, ?>> fStore = new KindBasedStore<HashMap<String, ?>>(false);
private <K, V> HashMap<String, HashMap<K, V>> getNameMap(int kind, boolean create, HashMap<K, V> type){ private <K, V> HashMap<String, HashMap<K, V>> getNameMap(int kind, boolean create){
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
HashMap<String, HashMap<K, V>> map = (HashMap<String, HashMap<K, V>>) fStore.get(kind); HashMap<String/*name*/, HashMap<K, V>> map = (HashMap<String, HashMap<K, V>>) fStore.get(kind);
if(map == null && create){ if(map == null && create){
map = new HashMap<String, HashMap<K, V>>(); map = new HashMap<String, HashMap<K, V>>();
fStore.put(kind, map); fStore.put(kind, map);
@ -36,18 +40,18 @@ public class CSettingEntryFactory {
return map; return map;
} }
private <K, V> HashMap<K, V> getValueMap(String name, boolean create, HashMap<K, V> type){ private HashMap<String, HashMap<Integer, ICSettingEntry>> getValueMap(String name, boolean create){
HashMap<String, HashMap<K, V>> nameMap = getNameMap(ICSettingEntry.MACRO, create, (HashMap<K, V>)null); HashMap<String/*name*/, HashMap<String/*value*/, HashMap<Integer/*flags*/, ICSettingEntry>>> nameMap = getNameMap(ICSettingEntry.MACRO, create);
if(nameMap != null){ if(nameMap != null){
return getMap(nameMap, name, create); return getMap(nameMap, name, create);
} }
return null; return null;
} }
private HashMap<Integer, ICSettingEntry> getFlagMap(int kind, String name, String value, IPath[] exclusionPatters, boolean create){ private HashMap<Integer, ICSettingEntry> getFlagMap(int kind, String name, String value, IPath[] exclusionPatterns, boolean create){
switch(kind){ switch(kind){
case ICSettingEntry.MACRO: case ICSettingEntry.MACRO:
HashMap<String, HashMap<Integer, ICSettingEntry>> valueMap = getValueMap(name, create, (HashMap<String, HashMap<Integer, ICSettingEntry>>)null); HashMap<String, HashMap<Integer, ICSettingEntry>> valueMap = getValueMap(name, create);
if(valueMap != null){ if(valueMap != null){
return getMap(valueMap, value, create); return getMap(valueMap, value, create);
} }
@ -56,27 +60,27 @@ public class CSettingEntryFactory {
case ICSettingEntry.OUTPUT_PATH: case ICSettingEntry.OUTPUT_PATH:
HashMap<HashSet<IPath>, HashMap<Integer, ICSettingEntry>> excPatternMap = getExclusionPatternsMap(kind, name, create); HashMap<HashSet<IPath>, HashMap<Integer, ICSettingEntry>> excPatternMap = getExclusionPatternsMap(kind, name, create);
if(excPatternMap != null){ if(excPatternMap != null){
HashSet<IPath> setKey = exclusionPatters == null || exclusionPatters.length == 0 ? EMPTY_SET : new HashSet<IPath>(Arrays.asList(exclusionPatters)); HashSet<IPath> setKey = exclusionPatterns == null || exclusionPatterns.length == 0 ? EMPTY_SET : new HashSet<IPath>(Arrays.asList(exclusionPatterns));
return getMap(excPatternMap, setKey, create); return getMap(excPatternMap, setKey, create);
} }
return null; return null;
default: default:
HashMap<String, HashMap<Integer, ICSettingEntry>> nameMap = getNameMap(kind, create, (HashMap<Integer, ICSettingEntry>)null); HashMap<String, HashMap<Integer, ICSettingEntry>> nameMap = getNameMap(kind, create);
if(nameMap != null){ if(nameMap != null){
return getMap(nameMap, name, create); return getMap(nameMap, name, create);
} }
return null; return null;
} }
} }
private HashMap<HashSet<IPath>, HashMap<Integer, ICSettingEntry>> getExclusionPatternsMap(int kind, String name, boolean create){ private HashMap<HashSet<IPath>, HashMap<Integer, ICSettingEntry>> getExclusionPatternsMap(int kind, String name, boolean create){
HashMap<String, HashMap<HashSet<IPath>, HashMap<Integer, ICSettingEntry>>> nameMap = getNameMap(kind, create, (HashMap<HashSet<IPath>, HashMap<Integer, ICSettingEntry>>)null); HashMap<String/*name*/, HashMap<HashSet<IPath>/*exclusionPatterns*/, HashMap<Integer/*flags*/, ICSettingEntry>>> nameMap = getNameMap(kind, create);
if(nameMap != null){ if(nameMap != null){
return getMap(nameMap, name, create); return getMap(nameMap, name, create);
} }
return null; return null;
} }
private static <Key, K, V> HashMap<K, V> getMap(HashMap<Key, HashMap<K, V>> container, Key key, boolean create){ private static <Key, K, V> HashMap<K, V> getMap(HashMap<Key, HashMap<K, V>> container, Key key, boolean create){
HashMap<K, V> map = container.get(key); HashMap<K, V> map = container.get(key);
if(map == null && create){ if(map == null && create){
@ -92,10 +96,10 @@ public class CSettingEntryFactory {
case ICSettingEntry.SOURCE_PATH: case ICSettingEntry.SOURCE_PATH:
return getEntry(entry.getKind(), entry.getName(), null, ((ICExclusionPatternPathEntry)entry).getExclusionPatterns(), entry.getFlags(), entry, true); return getEntry(entry.getKind(), entry.getName(), null, ((ICExclusionPatternPathEntry)entry).getExclusionPatterns(), entry.getFlags(), entry, true);
default: default:
return getLanguageSettingEntry((ICLanguageSettingEntry)entry); return getLanguageSettingEntry((ICLanguageSettingEntry)entry);
} }
} }
public ICLanguageSettingEntry getLanguageSettingEntry(ICLanguageSettingEntry lEntry){ public ICLanguageSettingEntry getLanguageSettingEntry(ICLanguageSettingEntry lEntry){
return (ICLanguageSettingEntry)getEntry(lEntry.getKind(), lEntry.getName(), lEntry.getValue(), null, lEntry.getFlags(), lEntry, true); return (ICLanguageSettingEntry)getEntry(lEntry.getKind(), lEntry.getName(), lEntry.getValue(), null, lEntry.getFlags(), lEntry, true);
} }
@ -117,7 +121,7 @@ public class CSettingEntryFactory {
} }
return null; return null;
} }
public void clear(){ public void clear(){
fStore.clear(); fStore.clear();
} }