Merged fix for 21917 from HEAD.
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 7c16d16..86f1a5f 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
@@ -131,7 +131,9 @@
  */
 public void setArguments(String[] arguments) {
 	this.arguments = arguments;
-} * Sets the targets and execution order.
+}
+ 
+/** Sets the targets and execution order.
  * 
  * @param executionTargets which targets should be run and in which order
  */
@@ -324,12 +326,4 @@
 	}
 }
 
-/**
- * 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;
-}
 }
\ No newline at end of file
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 e6d21c7..20b5f9f 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$
@@ -256,8 +256,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
@@ -277,7 +277,12 @@
 	}
 }
 
-protected void createMonitorBuildListener(Project project) {
+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;
 	Vector chosenTargets = targets;
@@ -508,7 +513,7 @@
 /**
  * 
  */
-public void setArguments(String args) {
+public void setArguments(String[] args) {
 	this.extraArguments = args;
 }
 
@@ -729,42 +734,7 @@
 	return result;
 }
 
-/**
- * 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.