mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Handle Build Output Parsers in MakeBuilder
This commit is contained in:
parent
449e95e3f2
commit
ee5fedb69c
6 changed files with 50 additions and 7 deletions
|
@ -26,8 +26,17 @@ import org.eclipse.cdt.core.CommandLauncher;
|
||||||
import org.eclipse.cdt.core.ErrorParserManager;
|
import org.eclipse.cdt.core.ErrorParserManager;
|
||||||
import org.eclipse.cdt.core.ICommandLauncher;
|
import org.eclipse.cdt.core.ICommandLauncher;
|
||||||
import org.eclipse.cdt.core.IConsoleParser;
|
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.ACBuilder;
|
||||||
import org.eclipse.cdt.core.resources.IConsole;
|
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.internal.core.BuildRunnerHelper;
|
||||||
import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoConsoleParser;
|
import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoConsoleParser;
|
||||||
import org.eclipse.cdt.make.internal.core.MakeMessages;
|
import org.eclipse.cdt.make.internal.core.MakeMessages;
|
||||||
|
@ -175,6 +184,7 @@ public class MakeBuilder extends ACBuilder {
|
||||||
String[] targets = getTargets(kind, info);
|
String[] targets = getTargets(kind, info);
|
||||||
if (targets.length != 0 && targets[targets.length - 1].equals(info.getCleanBuildTarget()))
|
if (targets.length != 0 && targets[targets.length - 1].equals(info.getCleanBuildTarget()))
|
||||||
isClean = true;
|
isClean = true;
|
||||||
|
boolean isOnlyClean = isClean && (targets.length == 1);
|
||||||
|
|
||||||
String[] args = getCommandArguments(info, targets);
|
String[] args = getCommandArguments(info, targets);
|
||||||
|
|
||||||
|
@ -187,8 +197,17 @@ public class MakeBuilder extends ACBuilder {
|
||||||
ErrorParserManager epm = new ErrorParserManager(getProject(), workingDirectoryURI, this, errorParsers);
|
ErrorParserManager epm = new ErrorParserManager(getProject(), workingDirectoryURI, this, errorParsers);
|
||||||
|
|
||||||
List<IConsoleParser> parsers = new ArrayList<IConsoleParser>();
|
List<IConsoleParser> parsers = new ArrayList<IConsoleParser>();
|
||||||
IScannerInfoConsoleParser parserSD = ScannerInfoConsoleParserFactory.getScannerInfoConsoleParser(project, workingDirectoryURI, this);
|
if (!isOnlyClean) {
|
||||||
parsers.add(parserSD);
|
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.setLaunchParameters(launcher, buildCommand, args, workingDirectoryURI, envp);
|
||||||
buildRunnerHelper.prepareStreams(epm, parsers, console, new SubProgressMonitor(monitor, TICKS_STREAM_PROGRESS_MONITOR, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK));
|
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) {
|
private String[] makeArray(String string) {
|
||||||
return CommandLineUtil.argumentsToArray(string);
|
return CommandLineUtil.argumentsToArray(string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void collectLanguageSettingsConsoleParsers(ICConfigurationDescription cfgDescription, IWorkingDirectoryTracker cwdTracker, List<IConsoleParser> parsers) {
|
||||||
|
if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) {
|
||||||
|
List<ILanguageSettingsProvider> 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$
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,6 +99,7 @@ public class ExternalBuildRunner extends AbstractBuildRunner {
|
||||||
String[] targets = getTargets(kind, builder);
|
String[] targets = getTargets(kind, builder);
|
||||||
if (targets.length != 0 && targets[targets.length - 1].equals(builder.getCleanBuildTarget()))
|
if (targets.length != 0 && targets[targets.length - 1].equals(builder.getCleanBuildTarget()))
|
||||||
isClean = true;
|
isClean = true;
|
||||||
|
boolean isOnlyClean = isClean && (targets.length == 1);
|
||||||
|
|
||||||
String[] args = getCommandArguments(builder, targets);
|
String[] args = getCommandArguments(builder, targets);
|
||||||
|
|
||||||
|
@ -111,7 +112,7 @@ public class ExternalBuildRunner extends AbstractBuildRunner {
|
||||||
ErrorParserManager epm = new ErrorParserManager(project, workingDirectoryURI, markerGenerator, errorParsers);
|
ErrorParserManager epm = new ErrorParserManager(project, workingDirectoryURI, markerGenerator, errorParsers);
|
||||||
|
|
||||||
List<IConsoleParser> parsers = new ArrayList<IConsoleParser>();
|
List<IConsoleParser> parsers = new ArrayList<IConsoleParser>();
|
||||||
if (!isClean) {
|
if (!isOnlyClean) {
|
||||||
ManagedBuildManager.collectLanguageSettingsConsoleParsers(cfgDescription, epm, parsers);
|
ManagedBuildManager.collectLanguageSettingsConsoleParsers(cfgDescription, epm, parsers);
|
||||||
if (ScannerDiscoveryLegacySupport.isLegacyScannerDiscoveryOn(cfgDescription)) {
|
if (ScannerDiscoveryLegacySupport.isLegacyScannerDiscoveryOn(cfgDescription)) {
|
||||||
collectScannerInfoConsoleParsers(project, configuration, workingDirectoryURI, markerGenerator, parsers);
|
collectScannerInfoConsoleParsers(project, configuration, workingDirectoryURI, markerGenerator, parsers);
|
||||||
|
|
|
@ -50,6 +50,7 @@ import javax.xml.transform.stream.StreamResult;
|
||||||
import org.eclipse.cdt.core.AbstractCExtension;
|
import org.eclipse.cdt.core.AbstractCExtension;
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.core.IConsoleParser;
|
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.ILanguageSettingsProvider;
|
||||||
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvidersKeeper;
|
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.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.envvar.EnvironmentVariableProvider;
|
||||||
import org.eclipse.cdt.managedbuilder.internal.macros.BuildMacroProvider;
|
import org.eclipse.cdt.managedbuilder.internal.macros.BuildMacroProvider;
|
||||||
import org.eclipse.cdt.managedbuilder.internal.tcmodification.ToolChainModificationManager;
|
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.macros.IBuildMacroProvider;
|
||||||
import org.eclipse.cdt.managedbuilder.makegen.IManagedBuilderMakefileGenerator;
|
import org.eclipse.cdt.managedbuilder.makegen.IManagedBuilderMakefileGenerator;
|
||||||
import org.eclipse.cdt.managedbuilder.makegen.gnu.GnuMakefileGenerator;
|
import org.eclipse.cdt.managedbuilder.makegen.gnu.GnuMakefileGenerator;
|
||||||
|
|
|
@ -25,6 +25,7 @@ import org.eclipse.cdt.core.ICommandLauncher;
|
||||||
import org.eclipse.cdt.core.IConsoleParser;
|
import org.eclipse.cdt.core.IConsoleParser;
|
||||||
import org.eclipse.cdt.core.IMarkerGenerator;
|
import org.eclipse.cdt.core.IMarkerGenerator;
|
||||||
import org.eclipse.cdt.core.ProblemMarkerInfo;
|
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.ICListenerAgent;
|
||||||
import org.eclipse.cdt.core.language.settings.providers.IWorkingDirectoryTracker;
|
import org.eclipse.cdt.core.language.settings.providers.IWorkingDirectoryTracker;
|
||||||
import org.eclipse.cdt.core.model.ILanguage;
|
import org.eclipse.cdt.core.model.ILanguage;
|
||||||
|
|
|
@ -29,6 +29,7 @@ import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.core.ErrorParserManager;
|
import org.eclipse.cdt.core.ErrorParserManager;
|
||||||
import org.eclipse.cdt.core.cdtvariables.CdtVariableException;
|
import org.eclipse.cdt.core.cdtvariables.CdtVariableException;
|
||||||
import org.eclipse.cdt.core.cdtvariables.ICdtVariableManager;
|
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.IWorkingDirectoryTracker;
|
||||||
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager;
|
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager;
|
||||||
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsSerializableProvider;
|
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsSerializableProvider;
|
||||||
|
|
|
@ -9,17 +9,16 @@
|
||||||
* Andrew Gvozdev - initial API and implementation
|
* 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.IConsoleParser;
|
||||||
import org.eclipse.cdt.core.language.settings.providers.IWorkingDirectoryTracker;
|
|
||||||
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
|
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Console parser interface extended to support language settings providers.
|
* Console parser interface extended to support language settings providers.
|
||||||
*
|
*
|
||||||
* @since 8.1
|
* @since 5.4
|
||||||
*/
|
*/
|
||||||
public interface ICBuildOutputParser extends IConsoleParser {
|
public interface ICBuildOutputParser extends IConsoleParser {
|
||||||
/**
|
/**
|
Loading…
Add table
Reference in a new issue