From ee5fedb69c7d5aba20e774323bc569d81fd55467 Mon Sep 17 00:00:00 2001 From: Andrew Gvozdev Date: Wed, 11 Apr 2012 12:04:15 -0400 Subject: [PATCH] Handle Build Output Parsers in MakeBuilder --- .../eclipse/cdt/make/core/MakeBuilder.java | 45 ++++++++++++++++++- .../core/ExternalBuildRunner.java | 3 +- .../core/ManagedBuildManager.java | 2 +- .../AbstractBuiltinSpecsDetector.java | 1 + ...AbstractLanguageSettingsOutputScanner.java | 1 + .../providers/ICBuildOutputParser.java | 5 +-- 6 files changed, 50 insertions(+), 7 deletions(-) rename {build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder => core/org.eclipse.cdt.core/model/org/eclipse/cdt/core}/language/settings/providers/ICBuildOutputParser.java (88%) diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeBuilder.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeBuilder.java index 7275c8e80f8..9a6eb5609ca 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeBuilder.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeBuilder.java @@ -26,8 +26,17 @@ import org.eclipse.cdt.core.CommandLauncher; import org.eclipse.cdt.core.ErrorParserManager; import org.eclipse.cdt.core.ICommandLauncher; import org.eclipse.cdt.core.IConsoleParser; +import org.eclipse.cdt.core.language.settings.providers.ICBuildOutputParser; +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.IWorkingDirectoryTracker; +import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager; +import org.eclipse.cdt.core.language.settings.providers.ScannerDiscoveryLegacySupport; +import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.resources.ACBuilder; import org.eclipse.cdt.core.resources.IConsole; +import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; +import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.internal.core.BuildRunnerHelper; import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoConsoleParser; import org.eclipse.cdt.make.internal.core.MakeMessages; @@ -175,6 +184,7 @@ public class MakeBuilder extends ACBuilder { String[] targets = getTargets(kind, info); if (targets.length != 0 && targets[targets.length - 1].equals(info.getCleanBuildTarget())) isClean = true; + boolean isOnlyClean = isClean && (targets.length == 1); String[] args = getCommandArguments(info, targets); @@ -187,8 +197,17 @@ public class MakeBuilder extends ACBuilder { ErrorParserManager epm = new ErrorParserManager(getProject(), workingDirectoryURI, this, errorParsers); List parsers = new ArrayList(); - IScannerInfoConsoleParser parserSD = ScannerInfoConsoleParserFactory.getScannerInfoConsoleParser(project, workingDirectoryURI, this); - parsers.add(parserSD); + if (!isOnlyClean) { + ICProjectDescription prjDescription = CoreModel.getDefault().getProjectDescription(project); + if (prjDescription != null) { + ICConfigurationDescription cfgDescription = prjDescription.getActiveConfiguration(); + collectLanguageSettingsConsoleParsers(cfgDescription, epm, parsers); + } + if (ScannerDiscoveryLegacySupport.isLegacyScannerDiscoveryOn(project)) { + IScannerInfoConsoleParser parserSD = ScannerInfoConsoleParserFactory.getScannerInfoConsoleParser(project, workingDirectoryURI, this); + parsers.add(parserSD); + } + } buildRunnerHelper.setLaunchParameters(launcher, buildCommand, args, workingDirectoryURI, envp); buildRunnerHelper.prepareStreams(epm, parsers, console, new SubProgressMonitor(monitor, TICKS_STREAM_PROGRESS_MONITOR, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK)); @@ -307,4 +326,26 @@ public class MakeBuilder extends ACBuilder { private String[] makeArray(String string) { return CommandLineUtil.argumentsToArray(string); } + + private static void collectLanguageSettingsConsoleParsers(ICConfigurationDescription cfgDescription, IWorkingDirectoryTracker cwdTracker, List parsers) { + if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) { + List lsProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders(); + for (ILanguageSettingsProvider lsProvider : lsProviders) { + ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(lsProvider); + if (rawProvider instanceof ICBuildOutputParser) { + ICBuildOutputParser consoleParser = (ICBuildOutputParser) rawProvider; + try { + consoleParser.startup(cfgDescription, cwdTracker); + parsers.add(consoleParser); + } catch (CoreException e) { + MakeCorePlugin.log(new Status(IStatus.ERROR, MakeCorePlugin.PLUGIN_ID, + "Language Settings Provider failed to start up", e)); //$NON-NLS-1$ + } + } + } + } + + } + + } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ExternalBuildRunner.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ExternalBuildRunner.java index 44b60c34dd9..5dff1645106 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ExternalBuildRunner.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ExternalBuildRunner.java @@ -99,6 +99,7 @@ public class ExternalBuildRunner extends AbstractBuildRunner { String[] targets = getTargets(kind, builder); if (targets.length != 0 && targets[targets.length - 1].equals(builder.getCleanBuildTarget())) isClean = true; + boolean isOnlyClean = isClean && (targets.length == 1); String[] args = getCommandArguments(builder, targets); @@ -111,7 +112,7 @@ public class ExternalBuildRunner extends AbstractBuildRunner { ErrorParserManager epm = new ErrorParserManager(project, workingDirectoryURI, markerGenerator, errorParsers); List parsers = new ArrayList(); - if (!isClean) { + if (!isOnlyClean) { ManagedBuildManager.collectLanguageSettingsConsoleParsers(cfgDescription, epm, parsers); if (ScannerDiscoveryLegacySupport.isLegacyScannerDiscoveryOn(cfgDescription)) { collectScannerInfoConsoleParsers(project, configuration, workingDirectoryURI, markerGenerator, parsers); diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java index 5b62fb711e3..590ce245604 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java @@ -50,6 +50,7 @@ import javax.xml.transform.stream.StreamResult; import org.eclipse.cdt.core.AbstractCExtension; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.IConsoleParser; +import org.eclipse.cdt.core.language.settings.providers.ICBuildOutputParser; 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.IWorkingDirectoryTracker; @@ -104,7 +105,6 @@ import org.eclipse.cdt.managedbuilder.internal.dataprovider.ConfigurationDataPro import org.eclipse.cdt.managedbuilder.internal.envvar.EnvironmentVariableProvider; import org.eclipse.cdt.managedbuilder.internal.macros.BuildMacroProvider; import org.eclipse.cdt.managedbuilder.internal.tcmodification.ToolChainModificationManager; -import org.eclipse.cdt.managedbuilder.language.settings.providers.ICBuildOutputParser; import org.eclipse.cdt.managedbuilder.macros.IBuildMacroProvider; import org.eclipse.cdt.managedbuilder.makegen.IManagedBuilderMakefileGenerator; import org.eclipse.cdt.managedbuilder.makegen.gnu.GnuMakefileGenerator; diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuiltinSpecsDetector.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuiltinSpecsDetector.java index 4bd99ac0dfe..03f6783b087 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuiltinSpecsDetector.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuiltinSpecsDetector.java @@ -25,6 +25,7 @@ import org.eclipse.cdt.core.ICommandLauncher; import org.eclipse.cdt.core.IConsoleParser; import org.eclipse.cdt.core.IMarkerGenerator; import org.eclipse.cdt.core.ProblemMarkerInfo; +import org.eclipse.cdt.core.language.settings.providers.ICBuildOutputParser; import org.eclipse.cdt.core.language.settings.providers.ICListenerAgent; import org.eclipse.cdt.core.language.settings.providers.IWorkingDirectoryTracker; import org.eclipse.cdt.core.model.ILanguage; diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractLanguageSettingsOutputScanner.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractLanguageSettingsOutputScanner.java index 3e3ba681abb..bded3f9e06f 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractLanguageSettingsOutputScanner.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractLanguageSettingsOutputScanner.java @@ -29,6 +29,7 @@ import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.ErrorParserManager; import org.eclipse.cdt.core.cdtvariables.CdtVariableException; import org.eclipse.cdt.core.cdtvariables.ICdtVariableManager; +import org.eclipse.cdt.core.language.settings.providers.ICBuildOutputParser; import org.eclipse.cdt.core.language.settings.providers.IWorkingDirectoryTracker; import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager; import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsSerializableProvider; diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/ICBuildOutputParser.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ICBuildOutputParser.java similarity index 88% rename from build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/ICBuildOutputParser.java rename to core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ICBuildOutputParser.java index 1f294ac14c6..f7165b4e0f8 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/ICBuildOutputParser.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ICBuildOutputParser.java @@ -9,17 +9,16 @@ * Andrew Gvozdev - initial API and implementation *******************************************************************************/ -package org.eclipse.cdt.managedbuilder.language.settings.providers; +package org.eclipse.cdt.core.language.settings.providers; import org.eclipse.cdt.core.IConsoleParser; -import org.eclipse.cdt.core.language.settings.providers.IWorkingDirectoryTracker; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.core.runtime.CoreException; /** * Console parser interface extended to support language settings providers. * - * @since 8.1 + * @since 5.4 */ public interface ICBuildOutputParser extends IConsoleParser { /**