Fix for 21917
diff --git a/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java b/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java
index 3a7b4e6..bf12e05 100644
--- a/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java
+++ b/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java
@@ -32,7 +32,7 @@
protected Map userProperties;
protected int messageOutputLevel = 2; // Project.MSG_INFO
protected String buildLoggerClassName;
- protected String arguments;
+ protected String[] arguments;
/**
* Constructs an instance of this class.
@@ -84,6 +84,52 @@
* @param arguments the arguments to be passed to the script
*/
public void setArguments(String arguments) {
+ this.arguments = getArray(arguments);
+}
+
+/**
+ * Helper method to ensure an array is converted into an ArrayList.
+ */
+private String[] getArray(String args) {
+ StringBuffer sb = new StringBuffer();
+ boolean waitingForQuote = false;
+ ArrayList result = new ArrayList();
+ for (StringTokenizer tokens = new StringTokenizer(args, ", \"", true); tokens.hasMoreTokens();) { //$NON-NLS-1$
+ String token = tokens.nextToken();
+ if (waitingForQuote) {
+ if (token.equals("\"")) { //$NON-NLS-1$
+ result.add(sb.toString());
+ sb.setLength(0);
+ waitingForQuote = false;
+ } else
+ sb.append(token);
+ } else {
+ if (token.equals("\"")) { //$NON-NLS-1$
+ // test if we have something like -Dproperty="value"
+ if (result.size() > 0) {
+ int index = result.size() - 1;
+ String last = (String) result.get(index);
+ if (last.charAt(last.length()-1) == '=') {
+ result.remove(index);
+ sb.append(last);
+ }
+ }
+ waitingForQuote = true;
+ } else {
+ if (!(token.equals(",") || token.equals(" "))) //$NON-NLS-1$ //$NON-NLS-2$
+ result.add(token);
+ }
+ }
+ }
+ return (String[]) result.toArray(new String[result.size()]);
+}
+
+/**
+ * Sets the arguments to be passed to the script (e.g. -Dos=win32 -Dws=win32 -verbose).
+ *
+ * @param arguments the arguments to be passed to the script
+ */
+public void setArguments(String[] arguments) {
this.arguments = arguments;
}
@@ -226,7 +272,7 @@
}
// set extra arguments
if (arguments != null) {
- Method setArguments = classInternalAntRunner.getMethod("setArguments", new Class[] {String.class}); //$NON-NLS-1$
+ Method setArguments = classInternalAntRunner.getMethod("setArguments", new Class[] {String[].class}); //$NON-NLS-1$
setArguments.invoke(runner, new Object[] {arguments});
}
// run
diff --git a/ant/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java b/ant/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java
index e439fc4..3c38701 100644
--- a/ant/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java
+++ b/ant/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java
@@ -130,7 +130,7 @@
protected String loggerClassname = null;
/** Extra arguments to be parsed as command line arguments. */
- protected String extraArguments = null;
+ protected String[] extraArguments = null;
// properties
private static final String PROPERTY_ECLIPSE_RUNNING = "eclipse.running"; //$NON-NLS-1$
@@ -287,8 +287,8 @@
}
createMonitorBuildListener(project);
fireBuildStarted(project);
- if (extraArguments != null && !extraArguments.trim().equals("")) //$NON-NLS-1$
- project.log(Policy.bind("label.arguments", extraArguments)); //$NON-NLS-1$
+ if (extraArguments != null)
+ printArguments(project);
if (targets != null && !targets.isEmpty())
project.executeTargets(targets);
else
@@ -306,6 +306,13 @@
}
}
+protected void printArguments(Project project) {
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < extraArguments.length; i++)
+ sb.append(extraArguments[i]);
+ project.log(Policy.bind("label.arguments", sb.toString())); //$NON-NLS-1$
+}
+
protected void createMonitorBuildListener(Project project) {
if (monitor == null)
return;
@@ -537,7 +544,7 @@
/**
*
*/
-public void setArguments(String args) {
+public void setArguments(String[] args) {
this.extraArguments = args;
}
@@ -759,43 +766,6 @@
}
/**
- * Helper method to ensure an array is converted into an ArrayList.
- */
-private ArrayList getArrayList(String args) {
- StringBuffer sb = new StringBuffer();
- boolean waitingForQuote = false;
- ArrayList result = new ArrayList();
- for (StringTokenizer tokens = new StringTokenizer(args, ", \"", true); tokens.hasMoreTokens();) { //$NON-NLS-1$
- String token = tokens.nextToken();
- if (waitingForQuote) {
- if (token.equals("\"")) { //$NON-NLS-1$
- result.add(sb.toString());
- sb.setLength(0);
- waitingForQuote = false;
- } else
- sb.append(token);
- } else {
- if (token.equals("\"")) { //$NON-NLS-1$
- // test if we have something like -Dproperty="value"
- if (result.size() > 0) {
- int index = result.size() - 1;
- String last = (String) result.get(index);
- if (last.charAt(last.length()-1) == '=') {
- result.remove(index);
- sb.append(last);
- }
- }
- waitingForQuote = true;
- } else {
- if (!(token.equals(",") || token.equals(" "))) //$NON-NLS-1$ //$NON-NLS-2$
- result.add(token);
- }
- }
- }
- return result;
-}
-
-/**
* Sets the build progress monitor.
*/
public void setProgressMonitor(IProgressMonitor monitor) {