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 08ef8035eb1..97f2c2aa706 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 @@ -353,7 +353,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); // parse line parser.startup(cfgDescription); @@ -395,7 +395,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); // parse line parser.startup(cfgDescription); @@ -459,7 +459,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); // parse line parser.startup(cfgDescription); @@ -531,7 +531,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); // parse line parser.startup(cfgDescription); @@ -609,7 +609,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); // parse line parser.startup(cfgDescription); @@ -639,7 +639,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); // parse line parser.startup(cfgDescription); @@ -690,7 +690,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); // parse line parser.startup(cfgDescription); @@ -735,7 +735,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); // parse line parser.startup(cfgDescription); @@ -779,7 +779,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); // parse line parser.startup(cfgDescription); @@ -811,7 +811,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); // parse line parser.startup(cfgDescription); @@ -861,7 +861,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { ICConfigurationDescription cfgDescription = cfgDescriptions[0]; // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); // parse line parser.startup(cfgDescription); @@ -886,7 +886,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); // parse line parser.startup(cfgDescription); @@ -919,7 +919,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); // parse line parser.startup(null); @@ -955,7 +955,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); // parse line parser.startup(cfgDescription); @@ -1008,7 +1008,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); ErrorParserManager epm = new ErrorParserManager(project, null); // Shift build directory, that could happen if Make Target from folder1 was run IFolder buildDir = folder1; @@ -1049,7 +1049,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); // parse line parser.startup(cfgDescription); @@ -1098,7 +1098,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); parser.setResolvingPaths(true); // parse line @@ -1129,7 +1129,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); parser.setResolvingPaths(true); // parse line @@ -1169,7 +1169,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser with expandRelativePaths=false - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); parser.setResolvingPaths(false); // parse line @@ -1205,7 +1205,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); parser.setResolvingPaths(true); // parse line @@ -1242,7 +1242,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); ErrorParserManager epm = new ErrorParserManager(project, null); epm.pushDirectoryURI(buildDir.getLocationURI()); @@ -1284,7 +1284,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); ErrorParserManager epm = new ErrorParserManager(project, null); @@ -1316,7 +1316,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); ErrorParserManager epm = new ErrorParserManager(project, null); epm.pushDirectoryURI(buildDir.getLocationURI()); @@ -1354,7 +1354,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); ErrorParserManager epm = new ErrorParserManager(project, null); URI uriBuildDir = new URI("file:/non-existing/path"); @@ -1397,7 +1397,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); ErrorParserManager epm = new ErrorParserManager(project, null); URI uriBuildDir = new URI("file:/BuildDir"); @@ -1447,7 +1447,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); ErrorParserManager epm = new ErrorParserManager(project, null); // parse line @@ -1501,7 +1501,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); ErrorParserManager epm = new ErrorParserManager(project, null); // parse line @@ -1561,7 +1561,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); ErrorParserManager epm = new ErrorParserManager(project, null); // parse line @@ -1606,7 +1606,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { ResourceHelper.createSymbolicLink(linkPath, dir2); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); ErrorParserManager epm = new ErrorParserManager(project, null); // parse line @@ -1646,7 +1646,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { ResourceHelper.createSymbolicLink(linkPath, subfolder.getLocation()); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); ErrorParserManager epm = new ErrorParserManager(project, null); // parse line @@ -1688,7 +1688,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); // parse line parser.startup(cfgDescription); @@ -1731,7 +1731,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); // parse line parser.startup(cfgDescription); @@ -1777,7 +1777,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { ResourceHelper.createFile(project, "file.c"); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); // restrict the parser's language scope to C++ only parser.setLanguageScope(new ArrayList() {{add(LANG_CPP);}}); @@ -1809,7 +1809,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { assertEquals(contentType, contentTypeX); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); // parse line parser.startup(cfgDescription); @@ -1839,7 +1839,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { IFile file=ResourceHelper.createFile(project, "file.cpp"); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); ErrorParserManager epm = new ErrorParserManager(project, null); // parse line @@ -1870,7 +1870,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); // parse line parser.startup(cfgDescription); @@ -1916,7 +1916,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); ErrorParserManager epm = new ErrorParserManager(project, null); // parse line @@ -1956,7 +1956,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { String languageId = ls.getLanguageId(); // create GCCBuildCommandParser - GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT, true); ErrorParserManager epm = new ErrorParserManager(project, null); // parse line diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractBuildCommandParser.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractBuildCommandParser.java index 59e256ed08e..3243fe2c1c3 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractBuildCommandParser.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractBuildCommandParser.java @@ -211,12 +211,14 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting } protected void init(String buildCommandParserId) { - AbstractBuildCommandParser buildCommandParser = (AbstractBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(buildCommandParserId); - for (String template : PATTERN_TEMPLATES) { - String pattern = buildCommandParser.makePattern(template); - String fileExpr = "$"+buildCommandParser.adjustFileGroup(); //$NON-NLS-1$ - String descExpr = "$0"; //$NON-NLS-1$ - addPattern(new RegexErrorPattern(pattern, fileExpr, null, descExpr, null, IMarkerGenerator.SEVERITY_WARNING, true)); + AbstractBuildCommandParser buildCommandParser = (AbstractBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(buildCommandParserId, false); + if (buildCommandParser != null) { + for (String template : PATTERN_TEMPLATES) { + String pattern = buildCommandParser.makePattern(template); + String fileExpr = "$"+buildCommandParser.adjustFileGroup(); //$NON-NLS-1$ + String descExpr = "$0"; //$NON-NLS-1$ + addPattern(new RegexErrorPattern(pattern, fileExpr, null, descExpr, null, IMarkerGenerator.SEVERITY_WARNING, true)); + } } } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/CommonBuilder.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/CommonBuilder.java index 3142d88b458..df8e4642d52 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/CommonBuilder.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/CommonBuilder.java @@ -26,8 +26,6 @@ import java.util.Set; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.ConsoleOutputStream; import org.eclipse.cdt.core.ProblemMarkerInfo; -import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider; -import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager_TBD; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.resources.ACBuilder; import org.eclipse.cdt.core.resources.IConsole; diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/MBSWizardHandler.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/MBSWizardHandler.java index 5139b36cfbb..d0b4433aa57 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/MBSWizardHandler.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/MBSWizardHandler.java @@ -912,10 +912,9 @@ public class MBSWizardHandler extends CWizardHandler { break; } } - } else if (id.length()>0){ - // TODO - look into saving on copying, need to figure out "shared" attribute from extension provider directly - ILanguageSettingsProvider providerExt = LanguageSettingsManager.getExtensionProviderCopy(id); - if (LanguageSettingsProviderAssociationManager.shouldBeShared(providerExt)) { + } else if (id.length()>0) { + ILanguageSettingsProvider providerExt = LanguageSettingsManager.getExtensionProviderCopy(id, false); + if (providerExt == null || LanguageSettingsProviderAssociationManager.shouldBeShared(providerExt)) { provider = LanguageSettingsManager.getWorkspaceProvider(id); } else { provider = providerExt; @@ -935,7 +934,7 @@ public class MBSWizardHandler extends CWizardHandler { } if (!isProviderThere(providers, UI_USER_LANGUAGE_SETTINGS_PROVIDER)) { - ILanguageSettingsProvider provider = LanguageSettingsManager.getExtensionProviderCopy(UI_USER_LANGUAGE_SETTINGS_PROVIDER); + ILanguageSettingsProvider provider = LanguageSettingsManager.getExtensionProviderCopy(UI_USER_LANGUAGE_SETTINGS_PROVIDER, true); providers.add(0, provider); } 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 84c3131e254..0d688223e9a 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 @@ -25,7 +25,6 @@ import org.eclipse.cdt.core.settings.model.CMacroFileEntry; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICSettingEntry; import org.eclipse.cdt.core.testplugin.util.BaseTestCase; -import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsExtensionManager; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Path; @@ -108,14 +107,14 @@ public class LanguageSettingsExtensionsTests extends BaseTestCase { { // test provider not in the list - ILanguageSettingsProvider providerExt = LanguageSettingsManager.getExtensionProviderCopy("missing.povider"); - assertTrue(LanguageSettingsManager.isWorkspaceProvider(providerExt)); - ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(providerExt); - assertNull(rawProvider); + ILanguageSettingsProvider providerExt = LanguageSettingsManager.getExtensionProviderCopy("missing.povider", true); + assertNull(providerExt); } // get test plugin extension provider - ILanguageSettingsProvider providerExt = LanguageSettingsManager.getExtensionProviderCopy(EXTENSION_BASE_PROVIDER_ID); + ILanguageSettingsProvider providerExtCopy = LanguageSettingsManager.getExtensionProviderCopy(EXTENSION_BASE_PROVIDER_ID, true); + assertNull(providerExtCopy); + ILanguageSettingsProvider providerExt = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_BASE_PROVIDER_ID); assertTrue(LanguageSettingsManager.isWorkspaceProvider(providerExt)); // get raw extension provider @@ -157,7 +156,9 @@ public class LanguageSettingsExtensionsTests extends BaseTestCase { */ public void testExtensionBaseProviderSubclass() throws Exception { // get test plugin extension provider - ILanguageSettingsProvider providerExt = LanguageSettingsManager.getExtensionProviderCopy(EXTENSION_BASE_SUBCLASS_PROVIDER_ID); + ILanguageSettingsProvider providerExtCopy = LanguageSettingsManager.getExtensionProviderCopy(EXTENSION_BASE_SUBCLASS_PROVIDER_ID, true); + assertNull(providerExtCopy); + ILanguageSettingsProvider providerExt = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_BASE_SUBCLASS_PROVIDER_ID); assertTrue(LanguageSettingsManager.isWorkspaceProvider(providerExt)); // get raw extension provider @@ -187,7 +188,9 @@ public class LanguageSettingsExtensionsTests extends BaseTestCase { */ public void testExtensionCustomProvider() throws Exception { // get test plugin extension non-default provider - ILanguageSettingsProvider providerExt = LanguageSettingsManager.getExtensionProviderCopy(EXTENSION_CUSTOM_PROVIDER_ID); + ILanguageSettingsProvider providerExtCopy = LanguageSettingsManager.getExtensionProviderCopy(EXTENSION_CUSTOM_PROVIDER_ID, true); + assertNull(providerExtCopy); + ILanguageSettingsProvider providerExt = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_CUSTOM_PROVIDER_ID); assertTrue(LanguageSettingsManager.isWorkspaceProvider(providerExt)); // get raw extension provider @@ -256,7 +259,9 @@ public class LanguageSettingsExtensionsTests extends BaseTestCase { */ public void testSerializableProvider() throws Exception { // get test plugin extension for serializable provider - ILanguageSettingsProvider providerExt = LanguageSettingsManager.getExtensionProviderCopy(EXTENSION_SERIALIZABLE_PROVIDER_ID); + ILanguageSettingsProvider providerExtCopy = LanguageSettingsManager.getExtensionProviderCopy(EXTENSION_SERIALIZABLE_PROVIDER_ID, true); + assertNull(providerExtCopy); + ILanguageSettingsProvider providerExt = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID); assertTrue(LanguageSettingsManager.isWorkspaceProvider(providerExt)); // get raw extension provider @@ -279,28 +284,25 @@ public class LanguageSettingsExtensionsTests extends BaseTestCase { // Non-editable providers cannot be copied so they are singletons { // get test plugin extension for serializable provider - ILanguageSettingsProvider providerExt = LanguageSettingsManager.getExtensionProviderCopy(EXTENSION_SERIALIZABLE_PROVIDER_ID); + ILanguageSettingsProvider providerExtCopy = LanguageSettingsManager.getExtensionProviderCopy(EXTENSION_SERIALIZABLE_PROVIDER_ID, true); + assertNull(providerExtCopy); + ILanguageSettingsProvider providerExt = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID); assertTrue(LanguageSettingsManager.isWorkspaceProvider(providerExt)); // get raw extension provider ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(providerExt); assertTrue(rawProvider instanceof LanguageSettingsSerializableProvider); - assertTrue(LanguageSettingsExtensionManager.equalsExtensionProvider(rawProvider)); - - // compare with workspace provider - ILanguageSettingsProvider providerWsp = LanguageSettingsManager.getWorkspaceProvider(EXTENSION_SERIALIZABLE_PROVIDER_ID); - ILanguageSettingsProvider providerWspRaw = LanguageSettingsManager.getRawProvider(providerWsp); - assertSame(rawProvider, providerWspRaw); + assertTrue(LanguageSettingsManager.isEqualExtensionProvider(rawProvider, true)); } // Editable providers are retrieved by copy { - ILanguageSettingsProvider providerExt = LanguageSettingsManager.getExtensionProviderCopy(EXTENSION_EDITABLE_PROVIDER_ID); + ILanguageSettingsProvider providerExt = LanguageSettingsManager.getExtensionProviderCopy(EXTENSION_EDITABLE_PROVIDER_ID, true); assertFalse(LanguageSettingsManager.isWorkspaceProvider(providerExt)); assertTrue(providerExt instanceof ILanguageSettingsEditableProvider); - assertTrue(LanguageSettingsExtensionManager.equalsExtensionProvider(providerExt)); + assertTrue(LanguageSettingsManager.isEqualExtensionProvider(providerExt, true)); - ILanguageSettingsProvider providerExt2 = LanguageSettingsManager.getExtensionProviderCopy(EXTENSION_EDITABLE_PROVIDER_ID); + ILanguageSettingsProvider providerExt2 = LanguageSettingsManager.getExtensionProviderCopy(EXTENSION_EDITABLE_PROVIDER_ID, true); assertNotSame(providerExt, providerExt2); assertEquals(providerExt, providerExt2); @@ -308,22 +310,22 @@ public class LanguageSettingsExtensionsTests extends BaseTestCase { ILanguageSettingsProvider providerWspRaw = LanguageSettingsManager.getRawProvider(providerWsp); assertNotSame(providerExt, providerWspRaw); assertEquals(providerExt, providerWspRaw); - assertTrue(LanguageSettingsExtensionManager.equalsExtensionProvider(providerWspRaw)); + assertTrue(LanguageSettingsManager.isEqualExtensionProvider(providerWspRaw, true)); } // Test shallow copy { - ILanguageSettingsProvider provider = LanguageSettingsManager.getExtensionProviderCopy(EXTENSION_EDITABLE_PROVIDER_ID); + ILanguageSettingsProvider provider = LanguageSettingsManager.getExtensionProviderCopy(EXTENSION_EDITABLE_PROVIDER_ID, true); assertNotNull(provider); assertTrue(provider instanceof ILanguageSettingsEditableProvider); - ILanguageSettingsProvider providerShallow = LanguageSettingsExtensionManager.getExtensionProviderShallow(EXTENSION_EDITABLE_PROVIDER_ID); + ILanguageSettingsProvider providerShallow = LanguageSettingsManager.getExtensionProviderCopy(EXTENSION_EDITABLE_PROVIDER_ID, false); assertNotNull(providerShallow); assertTrue(providerShallow instanceof ILanguageSettingsEditableProvider); assertFalse(provider.equals(providerShallow)); - assertFalse(LanguageSettingsExtensionManager.equalsExtensionProvider(providerShallow)); - assertTrue(LanguageSettingsExtensionManager.equalsExtensionProviderShallow((ILanguageSettingsEditableProvider) providerShallow)); + assertFalse(LanguageSettingsManager.isEqualExtensionProvider(providerShallow, true)); + assertTrue(LanguageSettingsManager.isEqualExtensionProvider(providerShallow, false)); } } @@ -331,7 +333,7 @@ public class LanguageSettingsExtensionsTests extends BaseTestCase { * Check that LanguageSettingsGenericProvider extension defined in plugin.xml is accessible. */ public void testExtensionGenericProvider() throws Exception { - ILanguageSettingsProvider provider = LanguageSettingsExtensionManager.getExtensionProviderClone(EXTENSION_USER_PROVIDER_ID); + ILanguageSettingsProvider provider = LanguageSettingsManager.getExtensionProviderCopy(EXTENSION_USER_PROVIDER_ID, true); assertNotNull("extension " + EXTENSION_USER_PROVIDER_ID + " not found", provider); assertTrue(provider instanceof LanguageSettingsGenericProvider); } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManager.java index d4e04c9657d..3cd135f41d6 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManager.java @@ -60,7 +60,7 @@ public class LanguageSettingsManager { * Builds for the provider a nice looking resource tree to present hierarchical view to the user. * * TODO - Note that after using this method for a while for BOP parsers it appears that disadvantages - * outweight benefits. In particular, it doesn't result in saving memory as the language settings + * outweigh benefits. In particular, it doesn't result in saving memory as the language settings * (and the lists itself) are not duplicated in memory anyway but optimized with using WeakHashSet * and SafeStringInterner. * @@ -157,25 +157,38 @@ public class LanguageSettingsManager { LanguageSettingsProvidersSerializer.setWorkspaceProviders(providers); } + /** + * TODO + * @param deepCopy TODO + * @param id + * + * @return + */ + public static ILanguageSettingsEditableProvider getProviderCopy(ILanguageSettingsEditableProvider provider, boolean deep) { + return LanguageSettingsExtensionManager.getProviderCopy(provider, deep); + } + /** * Get Language Settings Provider defined via * {@code org.eclipse.cdt.core.LanguageSettingsProvider} extension point. * * @param id - ID of provider to find. + * @param deep TODO * @return the copy of the provider if possible (i.e. for {@link ILanguageSettingsEditableProvider}) * or workspace provider if provider is not copyable. */ - public static ILanguageSettingsProvider getExtensionProviderCopy(String id) { - ILanguageSettingsProvider provider = null; - try { - provider = LanguageSettingsExtensionManager.getExtensionProviderClone(id); - } catch (CloneNotSupportedException e) { - // from here falls to get workspace provider - } - if (provider==null) - provider = LanguageSettingsManager.getWorkspaceProvider(id); + public static ILanguageSettingsProvider getExtensionProviderCopy(String id, boolean deep) { + return LanguageSettingsExtensionManager.getExtensionProviderCopy(id, deep); + } - return provider; + /** + * TODO + * @param provider + * @param deep + * @return + */ + public static boolean isEqualExtensionProvider(ILanguageSettingsProvider provider, boolean deep) { + return LanguageSettingsExtensionManager.isEqualsExtensionProvider(provider, deep); } /** diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManager_TBD.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManager_TBD.java deleted file mode 100644 index c8464960d7c..00000000000 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsManager_TBD.java +++ /dev/null @@ -1,66 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2011 Andrew Gvozdev 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: - * Andrew Gvozdev - initial API and implementation - *******************************************************************************/ - -package org.eclipse.cdt.core.language.settings.providers; - -import java.util.List; - -import org.eclipse.cdt.core.CCorePlugin; -import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; -import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; -import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsExtensionManager; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; - -/** - * This temporary class keeps the utility methods being looking for better home. - * Checking if any Language Settings Provider has custom entries for the resource. - */ -public class LanguageSettingsManager_TBD { - public static boolean isCustomizedResource(ICConfigurationDescription cfgDescription, IResource rc) { - if (rc instanceof IProject) - return false; - - if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) { - for (ILanguageSettingsProvider provider: ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders()) { - if (provider instanceof ILanguageSettingsBroadcastingProvider) { - for (String languageId : LanguageSettingsManager.getLanguages(rc, cfgDescription)) { - List list = provider.getSettingEntries(cfgDescription, rc, languageId); - if (list!=null) { - // TODO - check default or check parent? - List listDefault = provider.getSettingEntries(null, null, languageId); - // != is OK here due as the equal lists will have the same reference in WeakHashSet - if (list != listDefault) - return true; - } - } - } - } - } - - return false; - } - - public static boolean isReconfigured(ILanguageSettingsProvider provider) { - if (provider instanceof ILanguageSettingsEditableProvider) { - try { - return ! LanguageSettingsExtensionManager.equalsExtensionProviderShallow((ILanguageSettingsEditableProvider) provider); - } catch (Exception e) { - CCorePlugin.log(e); - } - } - return false; - } - - public static boolean isEqualExtensionProvider(ILanguageSettingsProvider provider) { - return LanguageSettingsExtensionManager.equalsExtensionProvider(provider); - } -} diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsExtensionManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsExtensionManager.java index 60e7d05ade8..d47c6f78a4d 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsExtensionManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsExtensionManager.java @@ -283,45 +283,6 @@ public class LanguageSettingsExtensionManager { return provider; } - /** - * Get Language Settings Provider defined via - * {@code org.eclipse.cdt.core.LanguageSettingsProvider} extension point. - * - * @param id - ID of provider to find. - * @return the clone of the provider or {@code null} if provider is not defined. - * @throws CloneNotSupportedException if the provider is not cloneable - */ - public static ILanguageSettingsProvider getExtensionProviderClone(String id) throws CloneNotSupportedException { - ILanguageSettingsProvider provider = fExtensionProviders.get(id); - if (provider!=null) { - if (!(provider instanceof ILanguageSettingsEditableProvider)) - throw new CloneNotSupportedException("Not able to clone provider " + provider.getClass()); - - provider = ((ILanguageSettingsEditableProvider) provider).clone(); - } - return provider; - } - - /** - * TODO - * - * @param id - * @return - */ - public static ILanguageSettingsProvider getExtensionProviderShallow(String id) { - ILanguageSettingsProvider provider = fExtensionProviders.get(id); - if (provider instanceof ILanguageSettingsEditableProvider) { - try { - return ((ILanguageSettingsEditableProvider) provider).cloneShallow(); - } catch (CloneNotSupportedException e) { - IStatus status = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, "Not able to clone provider " + provider.getClass()); - CCorePlugin.log(new CoreException(status)); - return null; - } - } - return provider; - } - /** * @return list of providers contributed by all extensions. Preferable copy but if not possible * will return raw provider. @@ -329,12 +290,7 @@ public class LanguageSettingsExtensionManager { /*package*/ static List getExtensionProvidersInternal() { ArrayList list = new ArrayList(fExtensionProviders.size()); for (String id : fExtensionProviders.keySet()) { - ILanguageSettingsProvider extensionProvider = null; - try { - extensionProvider = getExtensionProviderClone(id); - } catch (CloneNotSupportedException e) { - // from here falls to get raw extension provider - } + ILanguageSettingsProvider extensionProvider = getExtensionProviderCopy(id, true); if (extensionProvider==null) extensionProvider = fExtensionProviders.get(id); @@ -344,16 +300,59 @@ public class LanguageSettingsExtensionManager { return list; } - public static boolean equalsExtensionProviderShallow(ILanguageSettingsEditableProvider provider) throws CloneNotSupportedException { - String id = provider.getId(); - ILanguageSettingsProvider extensionProviderShallow = getExtensionProviderShallow(id); - return provider.cloneShallow().equals(extensionProviderShallow); + /** + * TODO + * @param provider + * @param deep + * @return + */ + public static ILanguageSettingsEditableProvider getProviderCopy(ILanguageSettingsEditableProvider provider, boolean deep) { + try { + if (deep) { + return provider.clone(); + } else { + return provider.cloneShallow(); + } + } catch (CloneNotSupportedException e) { + CCorePlugin.log("Error cloning provider " + provider.getId() + ", class " + provider.getClass(), e); //$NON-NLS-1$ //$NON-NLS-2$ + } + return null; } - public static boolean equalsExtensionProvider(ILanguageSettingsProvider provider) { + /** + * Get Language Settings Provider defined via + * {@code org.eclipse.cdt.core.LanguageSettingsProvider} extension point. + * + * @param id - ID of provider to find. + * @param deep TODO + * @return the clone of the provider or {@code null} TODO if provider is not defined. + */ + public static ILanguageSettingsProvider getExtensionProviderCopy(String id, boolean deep) { + ILanguageSettingsProvider provider = fExtensionProviders.get(id); + if (provider instanceof ILanguageSettingsEditableProvider) { + return getProviderCopy((ILanguageSettingsEditableProvider) provider, deep); + } + + return null; + } + + /** + * TODO + * @param provider + * @param deep + * @return + */ + public static boolean isEqualsExtensionProvider(ILanguageSettingsProvider provider, boolean deep) { String id = provider.getId(); - ILanguageSettingsProvider extensionProvider = fExtensionProviders.get(id); - return provider.equals(extensionProvider); + if (deep || !(provider instanceof ILanguageSettingsEditableProvider)) { + ILanguageSettingsProvider extensionProvider = fExtensionProviders.get(id); + return provider.equals(extensionProvider); + } else { + ILanguageSettingsEditableProvider providerShallow = getProviderCopy((ILanguageSettingsEditableProvider) provider, false); + ILanguageSettingsProvider extensionProviderShallow = getExtensionProviderCopy(id, false); + return providerShallow == extensionProviderShallow + || (providerShallow != null && providerShallow.equals(extensionProviderShallow)); + } } } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java index 15fc6ccf4a9..25822dac944 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java @@ -203,7 +203,8 @@ public class LanguageSettingsProvidersSerializer { */ public LanguageSettingsChangeEvent(ICProjectDescription prjDescription) { if (!prjDescription.isReadOnly()) { - String msg = "Project description " + prjDescription.getName() + " is expected to be read-only"; + // The logic goes that we send notifications only for acting description but not for currently being prepared to set + String msg = "Project description " + prjDescription.getName() + " is expected to be read-only"; //$NON-NLS-1$ //$NON-NLS-2$ CCorePlugin.log(new Status(IStatus.WARNING, CCorePlugin.PLUGIN_ID, msg, new Exception(msg))); } @@ -222,7 +223,8 @@ public class LanguageSettingsProvidersSerializer { if (delta != null) deltaMap.put(cfgDescription.getId(), delta); } else { - IStatus ss = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, "Internal error: Missing specSettings for " + cfgDescription.getClass().getSimpleName()); + IStatus ss = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, "Internal error: Missing specSettings for " //$NON-NLS-1$ + + cfgDescription.getClass().getSimpleName()); CCorePlugin.log(new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, ss.getMessage(), new CoreException(ss))); } } @@ -239,11 +241,11 @@ public class LanguageSettingsProvidersSerializer { return deltaMap.keySet().toArray(new String[deltaMap.size()]); } + @SuppressWarnings("nls") @Override public String toString() { return "LanguageSettingsChangeEvent for project=[" + getProjectName() + "]" - + ", configurations=" + deltaMap.keySet() - ; + + ", configurations=" + deltaMap.keySet(); } } @@ -257,6 +259,12 @@ public class LanguageSettingsProvidersSerializer { } } + /** + * Determine location of the project store of language settings providers in the plug-in state area. + * + * @param store - name of the store. + * @return location of the store in the plug-in state area. + */ private static IFile getStoreInProjectArea(IProject project) throws CoreException { IFolder folder = project.getFolder(SETTINGS_FOLDER_NAME); if (!folder.exists()) { @@ -267,10 +275,10 @@ public class LanguageSettingsProvidersSerializer { } /** - * TODO: refactor with ErrorParserManager ? + * Determine location of the store in the plug-in state area. * - * @param store - name of the store - * @return location of the store in the plug-in state area + * @param store - name of the store. + * @return location of the store in the plug-in state area. */ private static URI getStoreInWorkspaceArea(String store) { IPath location = CCorePlugin.getDefault().getStateLocation().append(store); @@ -434,9 +442,9 @@ projects: } } catch (Exception e) { - CCorePlugin.log("Internal error while trying to serialize language settings", e); //$NON-NLS-1$ - IStatus s = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, "Internal error while trying to serialize language settings", e); - throw new CoreException(s); + String msg = "Internal error while trying to serialize language settings"; //$NON-NLS-1$ + CCorePlugin.log(msg, e); + throw new CoreException(new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, msg, e)); } } @@ -464,7 +472,7 @@ projects: Node providerNode = providerNodes.item(i); String providerId = XmlUtil.determineAttributeValue(providerNode, LanguageSettingsExtensionManager.ATTR_ID); if (userDefinedProvidersIds.contains(providerId)) { - String msg = "Ignored repeatedly persisted duplicate language settings provider id=" + providerId; + String msg = "Ignored an attempt to persist duplicate language settings provider, id=" + providerId; //$NON-NLS-1$ CCorePlugin.log(new Status(IStatus.WARNING, CCorePlugin.PLUGIN_ID, msg, new Exception())); continue; } @@ -475,7 +483,7 @@ projects: if (providers==null) providers= new ArrayList(); - if (!LanguageSettingsExtensionManager.equalsExtensionProvider(provider)) { + if (!LanguageSettingsManager.isEqualExtensionProvider(provider, true)) { providers.add(provider); } } @@ -600,9 +608,9 @@ projects: } } catch (Exception e) { - IStatus s = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, "Internal error while trying to serialize language settings", e); - CCorePlugin.log(s); - throw new CoreException(s); + String msg = "Internal error while trying to serialize language settings"; //$NON-NLS-1$ + CCorePlugin.log(msg, e); + throw new CoreException(new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, msg, e)); } } @@ -1008,12 +1016,9 @@ projects: List newProviders = new ArrayList(); for (ILanguageSettingsProvider provider : baseProviders) { if (provider instanceof ILanguageSettingsEditableProvider) { - try { - provider = ((ILanguageSettingsEditableProvider) provider).clone(); - } catch (CloneNotSupportedException e) { - IStatus status = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, Status.OK, - "Not able to clone provider " + provider.getClass(), e); - CCorePlugin.log(status); + ILanguageSettingsEditableProvider newProvider = LanguageSettingsManager.getProviderCopy((ILanguageSettingsEditableProvider) provider, true); + if (newProvider != null) { + provider = newProvider; } } newProviders.add(provider); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsEntriesTab.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsEntriesTab.java index 323117a39b1..dc5baa346a4 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsEntriesTab.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsEntriesTab.java @@ -980,16 +980,14 @@ providers: for (ILanguageSettingsProvider provider : oldProviders) { String langId = (String)langItems.getData(); if (langId!=null) { if (provider.getSettingEntries(cfgDescription, rc, langId)!=null) { - try { - // clone providers to be able to "Cancel" in UI - if (providerCopy==null) { - providerCopy = ((ILanguageSettingsEditableProvider) provider).clone(); + if (providerCopy == null) { + // copy providers to be able to "Cancel" in UI + providerCopy = LanguageSettingsManager.getProviderCopy((ILanguageSettingsEditableProvider) provider, true); + if (providerCopy == null) { + continue providers; } providerCopy.setSettingEntries(cfgDescription, rc, langId, null); changed = true; - } catch (CloneNotSupportedException e) { - CUIPlugin.log("Internal Error: cannot clone provider "+provider.getId(), e); - continue providers; } } } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderTab.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderTab.java index fd765d7baf6..21f7cbcebe9 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderTab.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderTab.java @@ -49,7 +49,6 @@ import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsEditabl 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.LanguageSettingsManager; -import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager_TBD; import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsSerializableProvider; import org.eclipse.cdt.core.language.settings.providers.ScannerDiscoveryLegacySupport; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; @@ -150,17 +149,19 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); Assert.isTrue(rawProvider instanceof ILanguageSettingsEditableProvider); - try { - ILanguageSettingsEditableProvider newProvider = ((ILanguageSettingsEditableProvider)rawProvider).clone(); + ILanguageSettingsEditableProvider newProvider = LanguageSettingsManager.getProviderCopy((ILanguageSettingsEditableProvider)rawProvider, true); + if (newProvider != null) { replaceSelectedProvider(newProvider); - return newProvider; - - } catch (CloneNotSupportedException e) { - CUIPlugin.log("Error cloning provider " + rawProvider.getId(), e); - // TODO warning dialog for user? } - return null; + return newProvider; + } + + private static boolean isReconfigured(ILanguageSettingsProvider provider) { + if (provider instanceof ILanguageSettingsEditableProvider) { + return ! LanguageSettingsManager.isEqualExtensionProvider(provider, false); + } + return false; } private class ProvidersTableLabelProvider extends LanguageSettingsProvidersLabelProvider { @@ -169,7 +170,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { String[] overlayKeys = super.getOverlayKeys(provider); ILanguageSettingsProvider rawProvider = page.isForPrefs() ? LanguageSettingsManager.getRawProvider(provider) : provider; - if (LanguageSettingsManager_TBD.isReconfigured(rawProvider)) { + if (isReconfigured(rawProvider)) { overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_SETTING; } @@ -315,18 +316,16 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); if (!LanguageSettingsProviderAssociationManager.shouldBeShared(rawProvider)) { // Switch to local provider instance - try { - if (rawProvider instanceof ILanguageSettingsEditableProvider) { - provider = ((ILanguageSettingsEditableProvider) rawProvider).cloneShallow(); + if (rawProvider instanceof ILanguageSettingsEditableProvider) { + ILanguageSettingsEditableProvider newProvider = LanguageSettingsManager.getProviderCopy((ILanguageSettingsEditableProvider) rawProvider, false); + if (newProvider != null) { + provider = newProvider; + replaceSelectedProvider(provider); + ICConfigurationDescription cfgDescription = getConfigurationDescription(); + initializeOptionsPage(provider, cfgDescription); + displaySelectedOptionPage(); } - } catch (CloneNotSupportedException e) { - CUIPlugin.log("Error cloning provider " + provider.getId(), e); } - - replaceSelectedProvider(provider); - ICConfigurationDescription cfgDescription = getConfigurationDescription(); - initializeOptionsPage(provider, cfgDescription); - displaySelectedOptionPage(); } } @@ -659,7 +658,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { boolean canReset = false; if (rawProvider!=null && (canForWorkspace || canForProject)) { - canReset = ! LanguageSettingsManager_TBD.isEqualExtensionProvider(rawProvider); + canReset = ! LanguageSettingsManager.isEqualExtensionProvider(rawProvider, true); } boolean canMoveUp = page.isForProject() && isProviderSelected && isRangeOk && pos!=0; @@ -721,28 +720,24 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { } else { ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(selectedProvider); if (rawProvider instanceof ILanguageSettingsEditableProvider) { - ILanguageSettingsEditableProvider editableProvider = (ILanguageSettingsEditableProvider) rawProvider; - - try { - ILanguageSettingsEditableProvider newProvider = editableProvider.cloneShallow(); + ILanguageSettingsEditableProvider newProvider = LanguageSettingsManager.getProviderCopy((ILanguageSettingsEditableProvider) rawProvider, false); + if (newProvider != null) { replaceSelectedProvider(newProvider); - ICConfigurationDescription cfgDescription = getConfigurationDescription(); initializeOptionsPage(newProvider, cfgDescription); displaySelectedOptionPage(); - - } catch (CloneNotSupportedException e) { - CUIPlugin.log("Error cloning provider " + editableProvider.getId(), e); - return; } } - } updateButtons(); } private void performReset(ILanguageSettingsProvider selectedProvider) { - ILanguageSettingsProvider newProvider = LanguageSettingsManager.getExtensionProviderCopy(selectedProvider.getId()); + String id = selectedProvider.getId(); + ILanguageSettingsProvider newProvider = LanguageSettingsManager.getExtensionProviderCopy(id, true); + if (newProvider == null) { + newProvider = LanguageSettingsManager.getWorkspaceProvider(id); + } replaceSelectedProvider(newProvider); ICConfigurationDescription cfgDescription = getConfigurationDescription(); @@ -840,8 +835,11 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { boolean atLeastOneChanged = false; for (int i=0;iIMarker.PROBLEM. *

* Note: Only images for elements in Java projects are currently updated on marker changes. *

- * + * * @since 2.0 */ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabelDecorator { - + /** - * This is a special LabelProviderChangedEvent carring additional + * This is a special LabelProviderChangedEvent carring additional * information whether the event orgins from a maker change. *

* ProblemsLabelChangedEvents are only generated by @@ -77,12 +83,12 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe super(source, changedResource); fMarkerChange= isMarkerChange; } - + /** - * Returns whether this event origins from marker changes. If false an annotation - * model change is the origin. In this case viewers not displaying working copies can ignore these + * Returns whether this event origins from marker changes. If false an annotation + * model change is the origin. In this case viewers not displaying working copies can ignore these * events. - * + * * @return if this event origins from a marker change. */ public boolean isMarkerChange() { @@ -92,13 +98,13 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe } private static final int ERRORTICK_WARNING= CElementImageDescriptor.WARNING; - private static final int ERRORTICK_ERROR= CElementImageDescriptor.ERROR; - private static final int TICK_CONFIGURATION = CElementImageDescriptor.SETTINGS; - + private static final int ERRORTICK_ERROR= CElementImageDescriptor.ERROR; + private static final int TICK_CONFIGURATION = CElementImageDescriptor.SETTINGS; + private ImageDescriptorRegistry fRegistry; private boolean fUseNewRegistry= false; private IProblemChangedListener fProblemChangedListener; - + private ListenerList fListeners; /** @@ -108,10 +114,10 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe this(null); fUseNewRegistry= true; } - + /* * Creates decorator with a shared image registry. - * + * * @param registry The registry to use or null to use the Java plugin's * image registry. */ @@ -122,21 +128,21 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe fRegistry= registry; fProblemChangedListener= null; } - + private ImageDescriptorRegistry getRegistry() { if (fRegistry == null) { fRegistry= fUseNewRegistry ? new ImageDescriptorRegistry() : CUIPlugin.getImageDescriptorRegistry(); } return fRegistry; } - + /* (non-Javadoc) * @see ILabelDecorator#decorateText(String, Object) */ public String decorateText(String text, Object element) { return text; - } + } /* (non-Javadoc) * @see ILabelDecorator#decorateImage(Image, Object) @@ -189,7 +195,7 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe if (e.getStatus().getCode() == IResourceStatus.MARKER_NOT_FOUND) { return 0; } - + CUIPlugin.log(e); } return 0; @@ -200,7 +206,7 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe return 0; } int info= 0; - + IMarker[] markers= res.findMarkers(IMarker.PROBLEM, true, depth); if (markers != null) { for (int i= 0; i < markers.length && (info != ERRORTICK_ERROR); i++) { @@ -213,7 +219,7 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe info= ERRORTICK_ERROR; } } - } + } } return info; } @@ -228,12 +234,12 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe } } return isInside(pos, -1, sourceElement); - + } return false; } - - + + // private int getErrorTicksFromWorkingCopy(ITranslationUnit original, ISourceReference sourceElement) throws CoreException { // int info= 0; // FileEditorInput editorInput= new FileEditorInput((IFile) original.getResource()); @@ -255,7 +261,7 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe // } // return info; // } - + // private IMarker isAnnotationInRange(IAnnotationModel model, Annotation annot, ISourceReference sourceElement) throws CoreException { // if (annot instanceof MarkerAnnotation) { // IMarker marker= ((MarkerAnnotation) annot).getMarker(); @@ -268,17 +274,17 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe // } // return null; // } - + /** * Tests if a position is inside the source range of an element. Usually this is done - * by looking at the offset. In case the offset equals -1, the line is + * by looking at the offset. In case the offset equals -1, the line is * tested. * @param offSet offset to be tested * @param line line to be tested * @param sourceElement Source element (must be a ICElement) * @return boolean Return true if position is located inside the source element. * @throws CoreException Exception thrown if element range could not be accessed. - * + * * @since 2.1 */ protected boolean isInside(int offSet, int line, ISourceReference sourceElement) throws CoreException { @@ -288,11 +294,11 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe return (line >= range.getStartLine() && line <= range.getEndLine()); } int rangeOffset= range.getStartPos(); - return (rangeOffset <= offSet && rangeOffset + range.getLength() > offSet); + return (rangeOffset <= offSet && rangeOffset + range.getLength() > offSet); } return false; - } - + } + /* (non-Javadoc) * @see IBaseLabelProvider#dispose() */ @@ -312,7 +318,7 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe public boolean isLabelProperty(Object element, String property) { return true; } - + /* (non-Javadoc) * @see IBaseLabelProvider#addListener(ILabelProviderListener) */ @@ -329,7 +335,7 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe }; CUIPlugin.getDefault().getProblemMarkerManager().addListener(fProblemChangedListener); } - } + } /* (non-Javadoc) * @see IBaseLabelProvider#removeListener(ILabelProviderListener) @@ -343,7 +349,7 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe } } } - + protected void fireProblemsChanged(IResource[] changedResources, boolean isMarkerChange) { if (fListeners != null && !fListeners.isEmpty()) { LabelProviderChangedEvent event= new ProblemsLabelChangedEvent(this, changedResources, isMarkerChange); @@ -353,23 +359,52 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe } } } - + /* (non-Javadoc) * @see org.eclipse.jface.viewers.ILightweightLabelDecorator#decorate(java.lang.Object, org.eclipse.jface.viewers.IDecoration) */ - public void decorate(Object element, IDecoration decoration) { + public void decorate(Object element, IDecoration decoration) { int adornmentFlags= computeAdornmentFlags(element); if ((adornmentFlags & TICK_CONFIGURATION) != 0) { decoration.addOverlay(CPluginImages.DESC_OVR_SETTING); adornmentFlags &= ~TICK_CONFIGURATION; } - + if (adornmentFlags == ERRORTICK_ERROR) { decoration.addOverlay(CPluginImages.DESC_OVR_ERROR); } else if (adornmentFlags == ERRORTICK_WARNING) { decoration.addOverlay(CPluginImages.DESC_OVR_WARNING); - } + } + } + + public static boolean isCustomizedResource(ICConfigurationDescription cfgDescription, IResource rc) { + if (rc instanceof IProject) + return false; + + if (!ScannerDiscoveryLegacySupport.isLanguageSettingsProvidersFunctionalityEnabled(rc.getProject())) { + ICResourceDescription rcDescription = cfgDescription.getResourceDescription(rc.getProjectRelativePath(), true); + return rcDescription != null; + } + + if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) { + for (ILanguageSettingsProvider provider: ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders()) { + if (provider instanceof ILanguageSettingsBroadcastingProvider) { + for (String languageId : LanguageSettingsManager.getLanguages(rc, cfgDescription)) { + List list = provider.getSettingEntries(cfgDescription, rc, languageId); + if (list!=null) { + // TODO - check default or check parent? + List listDefault = provider.getSettingEntries(null, null, languageId); + // != is OK here due as the equal lists will have the same reference in WeakHashSet + if (list != listDefault) + return true; + } + } + } + } + } + + return false; } /** @@ -386,10 +421,7 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe if (prjDescription != null) { ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration(); if (cfgDescription != null) { - IPath path = rc.getProjectRelativePath(); - ICResourceDescription rcDescription = cfgDescription.getResourceDescription(path, true); - boolean isLSCustomized = LanguageSettingsManager_TBD.isCustomizedResource(cfgDescription, rc); - if (rcDescription != null || isLSCustomized) + if (isCustomizedResource(cfgDescription, rc)) result |= TICK_CONFIGURATION; } }