Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Recoskie2009-03-16 14:36:24 +0000
committerChris Recoskie2009-03-16 14:36:24 +0000
commit4d246d847757cdd3ea798d128b32867212db085d (patch)
treecca5365216f64626dcf6387f98237c479439c9f7
parent3e2fede4d584226d44f2c11edeea98801d3fe571 (diff)
downloadorg.eclipse.cdt-4d246d847757cdd3ea798d128b32867212db085d.tar.gz
org.eclipse.cdt-4d246d847757cdd3ea798d128b32867212db085d.tar.xz
org.eclipse.cdt-4d246d847757cdd3ea798d128b32867212db085d.zip
RESOLVED - bug 268615: add a way to specify a command launcher for the managed builder
https://bugs.eclipse.org/bugs/show_bug.cgi?id=268615
-rw-r--r--build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeBuilder.java5
-rw-r--r--build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/DefaultRunSIProvider.java7
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core/schema/buildDefinitions.exsd17
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IBuilder.java11
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/CommandBuilder.java11
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Builder.java35
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/CommonBuilder.java6
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java12
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CommandLauncher.java44
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ICommandLauncher.java83
-rw-r--r--debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/command/factories/win32/CygwinMIEnvironmentCD.java5
-rw-r--r--debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/command/factories/win32/CygwinMIEnvironmentDirectory.java5
12 files changed, 201 insertions, 40 deletions
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 1b52d5ec80e..7e1bf37be52 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
@@ -22,6 +22,7 @@ import java.util.Map;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.CommandLauncher;
import org.eclipse.cdt.core.ErrorParserManager;
+import org.eclipse.cdt.core.ICommandLauncher;
import org.eclipse.cdt.core.model.ICModelMarker;
import org.eclipse.cdt.core.resources.ACBuilder;
import org.eclipse.cdt.core.resources.IConsole;
@@ -153,7 +154,7 @@ public class MakeBuilder extends ACBuilder {
isClean = true;
String errMsg = null;
- CommandLauncher launcher = new CommandLauncher();
+ ICommandLauncher launcher = new CommandLauncher();
// Print the command for visual interaction.
launcher.showCommand(true);
@@ -218,7 +219,7 @@ public class MakeBuilder extends ACBuilder {
// Before launching give visual cues via the monitor
monitor.subTask(MakeMessages.getString("MakeBuilder.Invoking_Command") + launcher.getCommandLine()); //$NON-NLS-1$
if (launcher.waitAndRead(consoleOut, consoleErr, new SubProgressMonitor(monitor, 0))
- != CommandLauncher.OK)
+ != ICommandLauncher.OK)
errMsg = launcher.getErrorMessage();
monitor.subTask(MakeMessages.getString("MakeBuilder.Updating_project")); //$NON-NLS-1$
refreshProject(currProject);
diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/DefaultRunSIProvider.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/DefaultRunSIProvider.java
index fbb27d9e62e..758911574c0 100644
--- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/DefaultRunSIProvider.java
+++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/DefaultRunSIProvider.java
@@ -19,6 +19,7 @@ import java.util.Properties;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.CommandLauncher;
+import org.eclipse.cdt.core.ICommandLauncher;
import org.eclipse.cdt.core.IMarkerGenerator;
import org.eclipse.cdt.core.resources.IConsole;
import org.eclipse.cdt.internal.core.ConsoleOutputSniffer;
@@ -101,7 +102,7 @@ public class DefaultRunSIProvider implements IExternalScannerInfoProvider {
monitor.subTask(MakeMessages.getString("ExternalScannerInfoProvider.Reading_Specs")); //$NON-NLS-1$
String errMsg = null;
- CommandLauncher launcher = new CommandLauncher();
+ ICommandLauncher launcher = new CommandLauncher();
// Print the command for visual interaction.
launcher.showCommand(true);
@@ -125,7 +126,7 @@ public class DefaultRunSIProvider implements IExternalScannerInfoProvider {
p.getOutputStream().close();
} catch (IOException e) {
}
- if (launcher.waitAndRead(consoleOut, consoleErr, new SubProgressMonitor(monitor, 0)) != CommandLauncher.OK) {
+ if (launcher.waitAndRead(consoleOut, consoleErr, new SubProgressMonitor(monitor, 0)) != ICommandLauncher.OK) {
errMsg = launcher.getErrorMessage();
}
monitor.subTask(MakeMessages.getString("ExternalScannerInfoProvider.Parsing_Output")); //$NON-NLS-1$
@@ -213,7 +214,7 @@ public class DefaultRunSIProvider implements IExternalScannerInfoProvider {
* @param launcher
* @return
*/
- protected String[] setEnvironment(CommandLauncher launcher, Properties initialEnv) {
+ protected String[] setEnvironment(ICommandLauncher launcher, Properties initialEnv) {
// Set the environmennt, some scripts may need the CWD var to be set.
Properties props = initialEnv != null ? initialEnv : launcher.getEnvironment();
diff --git a/build/org.eclipse.cdt.managedbuilder.core/schema/buildDefinitions.exsd b/build/org.eclipse.cdt.managedbuilder.core/schema/buildDefinitions.exsd
index da320978107..74d46d26b63 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/schema/buildDefinitions.exsd
+++ b/build/org.eclipse.cdt.managedbuilder.core/schema/buildDefinitions.exsd
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.cdt.managedbuilder.core">
+<schema targetNamespace="org.eclipse.cdt.managedbuilder.core" xmlns="http://www.w3.org/2001/XMLSchema">
<annotation>
<appInfo>
<meta.schema plugin="org.eclipse.cdt.managedbuilder.core" id="buildDefinitions" name="Managed Build Definitions"/>
@@ -11,6 +11,11 @@
</annotation>
<element name="extension">
+ <annotation>
+ <appInfo>
+ <meta.element />
+ </appInfo>
+ </annotation>
<complexType>
<sequence>
<element ref="projectType" minOccurs="0" maxOccurs="unbounded"/>
@@ -1712,6 +1717,16 @@ If the builder supports specifying custom number of parallel jobs, the option de
</documentation>
</annotation>
</attribute>
+ <attribute name="commandLauncher" type="string">
+ <annotation>
+ <documentation>
+ A concrete Java class that implements org.eclipse.cdt.core.ICommandLauncher to launch the builder command.
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.cdt.core.ICommandLauncher"/>
+ </appInfo>
+ </annotation>
+ </attribute>
</complexType>
</element>
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IBuilder.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IBuilder.java
index 1054f7a3574..ed41005f1ee 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IBuilder.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IBuilder.java
@@ -10,6 +10,7 @@
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.core;
+import org.eclipse.cdt.core.ICommandLauncher;
import org.eclipse.cdt.core.settings.model.extension.CBuildData;
import org.eclipse.cdt.managedbuilder.macros.IFileContextBuildMacroValues;
import org.eclipse.cdt.managedbuilder.macros.IReservedMacroNameSupplier;
@@ -88,6 +89,8 @@ public interface IBuilder extends IBuildObject, IMakeBuilderInfo {
static final String DEFAULT_TARGET_CLEAN = "clean"; //$NON-NLS-1$
static final String DEFAULT_TARGET_AUTO = "all"; //$NON-NLS-1$
+ static final String ATTRIBUTE_COMMAND_LAUNCHER = "commandLauncher"; //$NON-NLS-1$
+
/**
* Returns the command line arguments to pass to the build/make utility used
* to build a configuration.
@@ -317,4 +320,12 @@ public interface IBuilder extends IBuildObject, IMakeBuilderInfo {
boolean isSystemObject();
String getUniqueRealName();
+
+ /**
+ * Returns the ICommandLauncher which should be used to launch the builder command.
+ *
+ * @return ICommandLauncher
+ * @since 5.1
+ */
+ public ICommandLauncher getCommandLauncher();
}
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/CommandBuilder.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/CommandBuilder.java
index 68927fbdbc4..d3aafff10c9 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/CommandBuilder.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/CommandBuilder.java
@@ -19,6 +19,7 @@ import java.util.List;
import java.util.Map;
import org.eclipse.cdt.core.CommandLauncher;
+import org.eclipse.cdt.core.ICommandLauncher;
import org.eclipse.cdt.managedbuilder.buildmodel.IBuildCommand;
import org.eclipse.cdt.managedbuilder.internal.core.ManagedMakeMessages;
import org.eclipse.core.runtime.IProgressMonitor;
@@ -154,7 +155,7 @@ public class CommandBuilder implements IBuildModelBuilder {
monitor.beginTask("", getNumCommands()); //$NON-NLS-1$
monitor.subTask(""/*getCommandLine()*/); //$NON-NLS-1$
- CommandLauncher launcher = createLauncher();
+ ICommandLauncher launcher = createLauncher();
int status = STATUS_OK;
launcher.showCommand(true);
@@ -173,11 +174,11 @@ public class CommandBuilder implements IBuildModelBuilder {
int st = launcher.waitAndRead(wrap(out), wrap(err),
new SubProgressMonitor(monitor, getNumCommands()));
switch(st){
- case CommandLauncher.OK:
+ case ICommandLauncher.OK:
if(fProcess.exitValue() != 0)
status = STATUS_ERROR_BUILD;
break;
- case CommandLauncher.COMMAND_CANCELED:
+ case ICommandLauncher.COMMAND_CANCELED:
status = STATUS_CANCELLED;
fErrMsg = launcher.getErrorMessage();
if(DbgUtil.DEBUG)
@@ -185,7 +186,7 @@ public class CommandBuilder implements IBuildModelBuilder {
printMessage(fErrMsg, out);
break;
- case CommandLauncher.ILLEGAL_COMMAND:
+ case ICommandLauncher.ILLEGAL_COMMAND:
default:
status = STATUS_ERROR_LAUNCH;
fErrMsg = launcher.getErrorMessage();
@@ -200,7 +201,7 @@ public class CommandBuilder implements IBuildModelBuilder {
return status;
}
- protected CommandLauncher createLauncher() {
+ protected ICommandLauncher createLauncher() {
// if(isWindows())
// return new CommandLauncher();
return new CommandSearchLauncher();
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Builder.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Builder.java
index 12c458086bf..c8dc53e95f1 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Builder.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Builder.java
@@ -23,7 +23,9 @@ import java.util.SortedMap;
import java.util.StringTokenizer;
import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.CommandLauncher;
import org.eclipse.cdt.core.ErrorParserManager;
+import org.eclipse.cdt.core.ICommandLauncher;
import org.eclipse.cdt.core.cdtvariables.CdtVariableException;
import org.eclipse.cdt.core.cdtvariables.ICdtVariableManager;
import org.eclipse.cdt.core.settings.model.COutputEntry;
@@ -131,6 +133,9 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
private List identicalList;
private ICOutputEntry[] outputEntries;
+
+ private ICommandLauncher fCommandLauncher = null;
+ private IConfigurationElement fCommandLauncherElement = null;
/*
* C O N S T R U C T O R S
@@ -318,6 +323,9 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
} else {
setDirty(true);
}
+
+ fCommandLauncher = builder.fCommandLauncher;
+ fCommandLauncherElement = builder.fCommandLauncherElement;
}
public void copySettings(Builder builder, boolean allBuildSettings){
@@ -563,6 +571,12 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
}
}
}
+
+ String commandLauncher = element.getAttribute(ATTRIBUTE_COMMAND_LAUNCHER);
+ if(commandLauncher != null && element instanceof DefaultManagedConfigElement){
+ fCommandLauncherElement = ((DefaultManagedConfigElement)element).getConfigurationElement();
+ }
+
}
/* (non-Javadoc)
@@ -2712,4 +2726,25 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
return getUniqueRealName();
}
+ public ICommandLauncher getCommandLauncher() {
+ if(fCommandLauncher != null)
+ return fCommandLauncher;
+
+ if(fCommandLauncher == null && fCommandLauncherElement != null){
+ try{
+ fCommandLauncher = (ICommandLauncher)fCommandLauncherElement.createExecutableExtension(ATTRIBUTE_COMMAND_LAUNCHER);
+ return fCommandLauncher;
+ }catch(CoreException e){
+ e.printStackTrace();
+ }
+ }
+ if(fCommandLauncher == null && superClass != null)
+ return superClass.getCommandLauncher();
+
+ else if(fCommandLauncher == null) // catch all for backwards compatibility
+ fCommandLauncher = new CommandLauncher();
+
+ return fCommandLauncher;
+ }
+
}
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 9fc4e3f2dc9..77d8ab3475b 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,9 +26,9 @@ import org.eclipse.cdt.build.core.scannerconfig.CfgInfoContext;
import org.eclipse.cdt.build.core.scannerconfig.ICfgScannerConfigBuilderInfo2Set;
import org.eclipse.cdt.build.internal.core.scannerconfig2.CfgScannerConfigProfileManager;
import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.CommandLauncher;
import org.eclipse.cdt.core.ConsoleOutputStream;
import org.eclipse.cdt.core.ErrorParserManager;
+import org.eclipse.cdt.core.ICommandLauncher;
import org.eclipse.cdt.core.IMarkerGenerator;
import org.eclipse.cdt.core.ProblemMarkerInfo;
import org.eclipse.cdt.core.envvar.IEnvironmentVariable;
@@ -1934,7 +1934,7 @@ public class CommonBuilder extends ACBuilder {
isClean = true;
String errMsg = null;
- CommandLauncher launcher = new CommandLauncher();
+ ICommandLauncher launcher = builder.getCommandLauncher();
// Print the command for visual interaction.
launcher.showCommand(true);
@@ -1986,7 +1986,7 @@ public class CommonBuilder extends ACBuilder {
// Before launching give visual cues via the monitor
monitor.subTask(ManagedMakeMessages.getResourceString("MakeBuilder.Invoking_Command") + launcher.getCommandLine()); //$NON-NLS-1$
if (launcher.waitAndRead(consoleOut, consoleErr, new SubProgressMonitor(monitor, 0))
- != CommandLauncher.OK)
+ != ICommandLauncher.OK)
errMsg = launcher.getErrorMessage();
monitor.subTask(ManagedMakeMessages.getResourceString("MakeBuilder.Updating_project")); //$NON-NLS-1$
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java
index e06e4200a5a..661140ff0ef 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java
@@ -22,9 +22,9 @@ import java.util.Set;
import java.util.Vector;
import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.CommandLauncher;
import org.eclipse.cdt.core.ConsoleOutputStream;
import org.eclipse.cdt.core.ErrorParserManager;
+import org.eclipse.cdt.core.ICommandLauncher;
import org.eclipse.cdt.core.IMarkerGenerator;
import org.eclipse.cdt.core.model.ICModelMarker;
import org.eclipse.cdt.core.resources.ACBuilder;
@@ -34,6 +34,7 @@ import org.eclipse.cdt.managedbuilder.buildmodel.IBuildDescription;
import org.eclipse.cdt.managedbuilder.buildmodel.IBuildIOType;
import org.eclipse.cdt.managedbuilder.buildmodel.IBuildResource;
import org.eclipse.cdt.managedbuilder.buildmodel.IBuildStep;
+import org.eclipse.cdt.managedbuilder.core.IBuilder;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
@@ -945,7 +946,8 @@ public class GeneratedMakefileBuilder extends ACBuilder {
// Get a launcher for the make command
String errMsg = null;
- CommandLauncher launcher = new CommandLauncher();
+ IBuilder builder = info.getDefaultConfiguration().getBuilder();
+ ICommandLauncher launcher = builder.getCommandLauncher();
launcher.showCommand(true);
// Set the environmennt
@@ -1016,7 +1018,7 @@ public class GeneratedMakefileBuilder extends ACBuilder {
}
if (launcher.waitAndRead(epm.getOutputStream(), epm.getOutputStream(),
new SubProgressMonitor(monitor,
- IProgressMonitor.UNKNOWN)) != CommandLauncher.OK) {
+ IProgressMonitor.UNKNOWN)) != ICommandLauncher.OK) {
errMsg = launcher.getErrorMessage();
}
} else {
@@ -1087,10 +1089,10 @@ public class GeneratedMakefileBuilder extends ACBuilder {
int state = launcher.waitAndRead(epm.getOutputStream(), epm.getOutputStream(),
new SubProgressMonitor(monitor,
IProgressMonitor.UNKNOWN));
- if(state != CommandLauncher.OK){
+ if(state != ICommandLauncher.OK){
errMsg = launcher.getErrorMessage();
- if(state == CommandLauncher.COMMAND_CANCELED){
+ if(state == ICommandLauncher.COMMAND_CANCELED){
//TODO: the better way of handling cancel is needed
//currently the rebuild state is set to true forcing the full rebuild
//on the next builder invocation
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CommandLauncher.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CommandLauncher.java
index 7c16df74c1a..8a285644588 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CommandLauncher.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CommandLauncher.java
@@ -24,12 +24,13 @@ import org.eclipse.core.runtime.IProgressMonitor;
/**
* @noextend This class is not intended to be subclassed by clients.
*/
-public class CommandLauncher {
+public class CommandLauncher implements ICommandLauncher {
- public final static int COMMAND_CANCELED = 1;
- public final static int ILLEGAL_COMMAND = -1;
- public final static int OK = 0;
+ public final static int COMMAND_CANCELED = ICommandLauncher.COMMAND_CANCELED;
+ public final static int ILLEGAL_COMMAND = ICommandLauncher.ILLEGAL_COMMAND;
+ public final static int OK = ICommandLauncher.OK;
+
protected Process fProcess;
protected boolean fShowCommand;
protected String[] fCommandArgs;
@@ -54,31 +55,43 @@ public class CommandLauncher {
lineSeparator = System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
}
- /**
- * Sets if the command should be printed out first before executing
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.ICommandLauncher#showCommand(boolean)
*/
public void showCommand(boolean show) {
fShowCommand = show;
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.ICommandLauncher#getErrorMessage()
+ */
public String getErrorMessage() {
return fErrorMessage;
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.ICommandLauncher#setErrorMessage(java.lang.String)
+ */
public void setErrorMessage(String error) {
fErrorMessage = error;
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.ICommandLauncher#getCommandArgs()
+ */
public String[] getCommandArgs() {
return fCommandArgs;
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.ICommandLauncher#getEnvironment()
+ */
public Properties getEnvironment() {
return EnvironmentReader.getEnvVars();
}
- /**
- * return the constructed Command line.
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.ICommandLauncher#getCommandLine()
*/
public String getCommandLine() {
return getCommandLine(getCommandArgs());
@@ -94,8 +107,8 @@ public class CommandLauncher {
return args;
}
- /**
- * Execute a command
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.ICommandLauncher#execute(org.eclipse.core.runtime.IPath, java.lang.String[], java.lang.String[], org.eclipse.core.runtime.IPath)
*/
public Process execute(IPath commandPath, String[] args, String[] env, IPath changeToDirectory) {
try {
@@ -116,8 +129,8 @@ public class CommandLauncher {
return fProcess;
}
- /**
- * Reads output form the process to the streams.
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.ICommandLauncher#waitAndRead(java.io.OutputStream, java.io.OutputStream)
*/
public int waitAndRead(OutputStream out, OutputStream err) {
if (fShowCommand) {
@@ -133,11 +146,8 @@ public class CommandLauncher {
return OK;
}
- /**
- * Reads output form the process to the streams. A progress monitor is
- * polled to test if the cancel button has been pressed. Destroys the
- * process if the monitor becomes canceled override to implement a different
- * way to read the process inputs
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.ICommandLauncher#waitAndRead(java.io.OutputStream, java.io.OutputStream, org.eclipse.core.runtime.IProgressMonitor)
*/
public int waitAndRead(OutputStream output, OutputStream err, IProgressMonitor monitor) {
if (fShowCommand) {
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ICommandLauncher.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ICommandLauncher.java
new file mode 100644
index 00000000000..e0c74a48a25
--- /dev/null
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ICommandLauncher.java
@@ -0,0 +1,83 @@
+package org.eclipse.cdt.core;
+
+import java.io.OutputStream;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+/**
+ * An interface for launchers of external commands.
+ *
+ * @since 5.1
+ */
+public interface ICommandLauncher {
+
+ public final static int COMMAND_CANCELED = 1;
+ public final static int ILLEGAL_COMMAND = -1;
+ public final static int OK = 0;
+
+ /**
+ * Sets if the command should be printed out first before executing.
+ */
+ public void showCommand(boolean show);
+
+ /**
+ * Returns a human readable error message corresponding to the last error encountered during command
+ * execution.
+ *
+ * @return A String corresponding to the error, or <code>null</code> if there has been no error.
+ */
+ public String getErrorMessage();
+
+ /**
+ * Sets the human readable error message corresponding to the last error encountered during command
+ * execution. A subsequent call to getErrorMessage() will return this string.
+ *
+ * @param error A String corresponding to the error message, or <code>null</code> if the error state is
+ * intended to be cleared.
+ */
+ public void setErrorMessage(String error);
+
+ /**
+ * Returns an array of the command line arguments that were last used to execute a command.
+ *
+ * @return an array of type String[] corresponding to the arguments. The array can be empty, but should not
+ * be null.
+ */
+ public String[] getCommandArgs();
+
+ /**
+ * Returns the set of environment variables in the context of which
+ * this launcher will execute commands.
+ *
+ * @return Properties
+ */
+ public Properties getEnvironment();
+
+ /**
+ * Returns the constructed command line of the last command executed.
+ *
+ * @return String
+ */
+ public String getCommandLine();
+
+ /**
+ * Execute a command
+ */
+ public Process execute(IPath commandPath, String[] args, String[] env, IPath changeToDirectory);
+
+ /**
+ * Reads output form the process to the streams.
+ */
+ public int waitAndRead(OutputStream out, OutputStream err);
+
+ /**
+ * Reads output form the process to the streams. A progress monitor is
+ * polled to test if the cancel button has been pressed. Destroys the
+ * process if the monitor becomes canceled override to implement a different
+ * way to read the process inputs
+ */
+ public int waitAndRead(OutputStream output, OutputStream err, IProgressMonitor monitor);
+
+} \ No newline at end of file
diff --git a/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/command/factories/win32/CygwinMIEnvironmentCD.java b/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/command/factories/win32/CygwinMIEnvironmentCD.java
index 97d67dfb5ea..c7d0282b2cc 100644
--- a/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/command/factories/win32/CygwinMIEnvironmentCD.java
+++ b/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/command/factories/win32/CygwinMIEnvironmentCD.java
@@ -14,6 +14,7 @@ package org.eclipse.cdt.debug.mi.core.command.factories.win32;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import org.eclipse.cdt.core.CommandLauncher;
+import org.eclipse.cdt.core.ICommandLauncher;
import org.eclipse.core.runtime.Path;
/**
@@ -24,14 +25,14 @@ public class CygwinMIEnvironmentCD extends WinMIEnvironmentCD {
CygwinMIEnvironmentCD( String miVersion, String path ) {
super( miVersion, path );
// Use the cygpath utility to convert the path
- CommandLauncher launcher = new CommandLauncher();
+ ICommandLauncher launcher = new CommandLauncher();
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayOutputStream err = new ByteArrayOutputStream();
String newPath = null;
launcher.execute( new Path( "cygpath" ), //$NON-NLS-1$
new String[]{ "-u", path }, //$NON-NLS-1$
new String[0], new Path( "." ) ); //$NON-NLS-1$
- if ( launcher.waitAndRead( out, err ) == CommandLauncher.OK ) {
+ if ( launcher.waitAndRead( out, err ) == ICommandLauncher.OK ) {
newPath = out.toString();
if ( newPath != null ) {
newPath = newPath.trim();
diff --git a/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/command/factories/win32/CygwinMIEnvironmentDirectory.java b/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/command/factories/win32/CygwinMIEnvironmentDirectory.java
index 09572ac54fd..e06a9b7b354 100644
--- a/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/command/factories/win32/CygwinMIEnvironmentDirectory.java
+++ b/debug/org.eclipse.cdt.debug.mi.core/mi/org/eclipse/cdt/debug/mi/core/command/factories/win32/CygwinMIEnvironmentDirectory.java
@@ -14,6 +14,7 @@ import java.io.ByteArrayOutputStream;
import java.util.StringTokenizer;
import org.eclipse.cdt.core.CommandLauncher;
+import org.eclipse.cdt.core.ICommandLauncher;
import org.eclipse.cdt.debug.mi.core.command.MIEnvironmentDirectory;
import org.eclipse.core.runtime.Path;
@@ -85,14 +86,14 @@ public class CygwinMIEnvironmentDirectory extends MIEnvironmentDirectory {
*/
private String convertPath0(String path) {
String result = path;
- CommandLauncher launcher = new CommandLauncher();
+ ICommandLauncher launcher = new CommandLauncher();
ByteArrayOutputStream out = new ByteArrayOutputStream();
launcher.execute(
new Path("cygpath"), //$NON-NLS-1$
new String[] { "-p", "-u", path }, //$NON-NLS-1$ //$NON-NLS-2$
new String[0],
new Path(".")); //$NON-NLS-1$
- if (launcher.waitAndRead(out, out) == CommandLauncher.OK)
+ if (launcher.waitAndRead(out, out) == ICommandLauncher.OK)
result = out.toString().trim();
return result;
}

Back to the top