diff --git a/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/BuiltinSpecsDetectorTest.java b/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/BuiltinSpecsDetectorTest.java index 10db27a4541..9df20514395 100644 --- a/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/BuiltinSpecsDetectorTest.java +++ b/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/BuiltinSpecsDetectorTest.java @@ -154,7 +154,7 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase { assertEquals(PROVIDER_NAME, provider.getName()); assertEquals(null, provider.getLanguageScope()); assertEquals(null, provider.getSettingEntries(null, null, null)); - assertEquals(null, provider.getCommand()); + assertEquals("", provider.getCommand()); assertEquals(false, provider.isExecuted()); assertEquals(false, provider.isConsoleEnabled()); } diff --git a/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/GCCBuildCommandParserTest.java b/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/GCCBuildCommandParserTest.java index 2311d864dfa..295916b3fbf 100644 --- a/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/GCCBuildCommandParserTest.java +++ b/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/GCCBuildCommandParserTest.java @@ -175,7 +175,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { assertEquals(PROVIDER_NAME, provider.getName()); assertEquals(null, provider.getLanguageScope()); assertEquals(null, provider.getSettingEntries(null, null, null)); - assertEquals(null, provider.getCompilerPattern()); + assertEquals("", provider.getCompilerPattern()); } { diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsExtensionsTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsExtensionsTests.java index e3bf7ecf40b..e3d52720616 100644 --- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsExtensionsTests.java +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsExtensionsTests.java @@ -12,7 +12,9 @@ package org.eclipse.cdt.core.language.settings.providers; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import junit.framework.TestSuite; @@ -133,9 +135,9 @@ public class LanguageSettingsExtensionsTests extends BaseTestCase { assertEquals(EXTENSION_BASE_PROVIDER_NAME, provider.getName()); assertEquals(EXTENSION_BASE_PROVIDER_PARAMETER, provider.getProperty(EXTENSION_BASE_PROVIDER_ATTR_PARAMETER)); // these attributes are not exposed as properties - assertEquals(null, provider.getProperty(ATTR_ID)); - assertEquals(null, provider.getProperty(ATTR_NAME)); - assertEquals(null, provider.getProperty(ATTR_CLASS)); + assertEquals("", provider.getProperty(ATTR_ID)); + assertEquals("", provider.getProperty(ATTR_NAME)); + assertEquals("", provider.getProperty(ATTR_CLASS)); // attempt to get entries for wrong language assertNull(provider.getSettingEntries(null, FILE_0, LANG_ID)); @@ -247,6 +249,55 @@ public class LanguageSettingsExtensionsTests extends BaseTestCase { } } + /** + * TODO + */ + public void testBaseProviderConfigure() throws Exception { + // sample entries + List entries = new ArrayList(); + entries.add(new CIncludePathEntry("/usr/include/", 0)); + List languages = new ArrayList(); + languages.add(LANG_ID); + // create LanguageSettingsBaseProvider + LanguageSettingsBaseProvider provider1 = new LanguageSettingsBaseProvider(); + LanguageSettingsBaseProvider provider2 = new LanguageSettingsBaseProvider(); + { + // configure provider1 + Map properties = new HashMap(); + properties.put("key1", "value1"); + properties.put("key2", null); + properties.put("key3", ""); + properties.put("key4", "false"); + provider1.configureProvider(PROVIDER_0, PROVIDER_NAME_0, languages, entries, properties); + assertEquals(PROVIDER_0, provider1.getId()); + assertEquals(PROVIDER_NAME_0, provider1.getName()); + assertEquals(languages, provider1.getLanguageScope()); + assertEquals(entries, provider1.getSettingEntries(null, null, LANG_ID)); + assertEquals("value1", provider1.getProperty("key1")); + assertEquals("", provider1.getProperty("key2")); + assertEquals("", provider1.getProperty("key3")); + assertEquals("false", provider1.getProperty("key4")); + assertEquals(false, provider1.getPropertyBool("key4")); + assertEquals("", provider1.getProperty("keyX")); + assertEquals(false, provider1.getPropertyBool("keyX")); + } + { + // configure provider2 + Map properties = new HashMap(); + properties.put("key1", "value1"); + provider2.configureProvider(PROVIDER_0, PROVIDER_NAME_0, languages, entries, properties); + assertEquals(PROVIDER_0, provider2.getId()); + assertEquals(PROVIDER_NAME_0, provider2.getName()); + assertEquals(languages, provider2.getLanguageScope()); + assertEquals(entries, provider2.getSettingEntries(null, null, LANG_ID)); + assertEquals("value1", provider2.getProperty("key1")); + assertEquals("", provider2.getProperty("keyX")); + assertEquals(false, provider2.getPropertyBool("keyX")); + } + // test equality + assertTrue(provider1.equals(provider2)); + } + /** * LanguageSettingsBaseProvider is not allowed to be configured twice. */ @@ -282,7 +333,7 @@ public class LanguageSettingsExtensionsTests extends BaseTestCase { LanguageSettingsSerializableProvider provider = (LanguageSettingsSerializableProvider) rawProvider; assertEquals(null, provider.getLanguageScope()); - assertEquals(null, provider.getProperty(EXTENSION_SERIALIZABLE_PROVIDER_MISSING_PARAMETER)); + assertEquals("", provider.getProperty(EXTENSION_SERIALIZABLE_PROVIDER_MISSING_PARAMETER)); List expected = new ArrayList(); expected.add(EXTENSION_EDITABLE_PROVIDER_ENTRY); diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsBaseProvider.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsBaseProvider.java index f0c5c5181cb..b66cafff9ff 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsBaseProvider.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsBaseProvider.java @@ -143,10 +143,14 @@ public class LanguageSettingsBaseProvider extends AbstractExecutableExtensionBas * {@link #equals(Object)} evaluate the property as equal while comparing providers. * * @param key - property to check the value. - * @return value of the property. + * @return value of the property. If the property is missing returns empty string. */ public String getProperty(String key) { - return properties.get(key); + String value = properties.get(key); + if (value == null) { + value = ""; //$NON-NLS-1$ + } + return value; } /** @@ -154,7 +158,8 @@ public class LanguageSettingsBaseProvider extends AbstractExecutableExtensionBas * @see #getProperty(String) * * @param key - property to check the value. - * @return boolean value of the property. + * @return boolean value of the property. If the property is missing or cannot be + * interpreted as boolean returns {@code false}. */ public boolean getPropertyBool(String key) { return Boolean.parseBoolean(properties.get(key)); @@ -267,10 +272,10 @@ public class LanguageSettingsBaseProvider extends AbstractExecutableExtensionBas keys.addAll(other.properties.keySet()); for (String key : keys) { String value = properties.get(key); - if (value == null) + if (value == null || value.equals(Boolean.FALSE.toString())) value = ""; //$NON-NLS-1$ String otherValue = other.properties.get(key); - if (otherValue == null) + if (otherValue == null || otherValue.equals(Boolean.FALSE.toString())) otherValue = ""; //$NON-NLS-1$ if (!value.equals(otherValue)) return false; diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsSerializableProvider.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsSerializableProvider.java index 4181602f573..235a1288e07 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsSerializableProvider.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsSerializableProvider.java @@ -361,12 +361,7 @@ public class LanguageSettingsSerializableProvider extends LanguageSettingsBasePr * @param value - {@code boolean} value of the property. */ public void setPropertyBool(String key, boolean value) { - if (value == true) { - properties.put(key, Boolean.TRUE.toString()); - } else { - // Keep "false" values in default representation and preserve the key in the list - properties.put(key, null); - } + properties.put(key, Boolean.toString(value)); } /**