[r34x] Bug 256942 - Using file_prompt for Ant script produces confusing results
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUtil.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUtil.java
index 275be8a..a224772 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUtil.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,7 +14,6 @@
 import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URL;
-import com.ibm.icu.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Hashtable;
@@ -22,6 +21,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.StringTokenizer;
+import java.util.regex.Pattern;
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Target;
@@ -51,6 +51,7 @@
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.core.variables.IStringVariableManager;
 import org.eclipse.core.variables.VariablesPlugin;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
@@ -85,6 +86,8 @@
 import org.eclipse.ui.texteditor.IDocumentProvider;
 import org.eclipse.ui.texteditor.ITextEditor;
 
+import com.ibm.icu.text.MessageFormat;
+
 /**
  * General utility class dealing with Ant build files
  */
@@ -231,8 +234,10 @@
 		URL[] urls= getCustomClasspath(config);
 		//no lexical, no position, no task
 		IAntModel model= getAntModel(buildfile, urls, false, false, false);
-		
-		model.setProperties(getAllProperties(config));
+		try {
+			model.setProperties(getAllProperties(config));
+		} catch (CoreException ex){
+		}
 		model.setPropertyFiles(getPropertyFiles(config));
 		AntProjectNode project= model.getProjectNode(); //forces a reconcile
 		model.dispose();
@@ -240,10 +245,23 @@
 	}
 	
     private static Map getAllProperties(ILaunchConfiguration config) throws CoreException {
-        String[] arguments = ExternalToolsUtil.getArguments(config);
+        String allArgs = config.getAttribute(IExternalToolConstants.ATTR_TOOL_ARGUMENTS, (String) null);
 		Map properties= new HashMap();
-		if (arguments != null) {
-		    AntCoreUtil.processMinusDProperties(AntCoreUtil.getArrayList(arguments), properties);
+		if (allArgs != null) {
+			String[] arguments = ExternalToolsUtil.parseStringIntoList(allArgs);
+			// filter arguments to avoid resolving variables that will prompt the user
+			List filtered = new ArrayList();
+			Pattern pattern = Pattern.compile("\\$\\{.*_prompt.*\\}"); //$NON-NLS-1$
+			IStringVariableManager manager = VariablesPlugin.getDefault().getStringVariableManager();
+			for (int i = 0; i < arguments.length; i++) {
+				String arg = arguments[i];
+				if (arg.startsWith("-D")) { //$NON-NLS-1$
+					if (!pattern.matcher(arg).find()) {
+						filtered.add(manager.performStringSubstitution(arg, false));
+					}
+				}
+			}
+		    AntCoreUtil.processMinusDProperties(filtered, properties);
 		}
 		Map configProperties= getProperties(config);
 		if (configProperties != null) {
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntJRETab.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntJRETab.java
index d58a7a2..2280471 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntJRETab.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntJRETab.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,6 +30,7 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.externaltools.internal.launchConfigurations.ExternalToolsUtil;
+import org.eclipse.ui.externaltools.internal.model.IExternalToolConstants;
 
 public class AntJRETab extends JavaJRETab {
 
@@ -149,16 +150,19 @@
 		//has not set to use a logger...bug 84608
         boolean userLogger= false;
         try {
-            String[] arguments = ExternalToolsUtil.getArguments(configuration);
-            if (arguments != null) {
-                for (int i = 0; i < arguments.length; i++) {
-                    String arg = arguments[i];
-                    if (arg.equals("-logger")) { //$NON-NLS-1$
-                        userLogger= true;
-                        break;
+    		String args = configuration.getAttribute(IExternalToolConstants.ATTR_TOOL_ARGUMENTS, (String) null);
+    		if (args != null) {
+    			String[] arguments = ExternalToolsUtil.parseStringIntoList(args);
+    			if (arguments != null) {
+                    for (int i = 0; i < arguments.length; i++) {
+                        String arg = arguments[i];
+                        if (arg.equals("-logger")) { //$NON-NLS-1$
+                            userLogger= true;
+                            break;
+                        }
                     }
                 }
-            }
+    		}
         } catch (CoreException e) {
         }
         if (userLogger) {
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java
index 0ba7244..8fcda09 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java
@@ -27,6 +27,7 @@
 import java.util.Properties;
 import java.util.Set;
 import java.util.Stack;
+import java.util.regex.Pattern;
 
 import org.apache.tools.ant.AntTypeDefinition;
 import org.apache.tools.ant.BuildException;
@@ -60,6 +61,7 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Preferences;
+import org.eclipse.core.variables.IStringVariableManager;
 import org.eclipse.core.variables.VariablesPlugin;
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.DocumentEvent;
@@ -409,13 +411,18 @@
 
     private void setExtraProperties(Project project) {
         if (fProperties != null) {
+        	Pattern pattern = Pattern.compile("\\$\\{.*_prompt.*\\}"); //$NON-NLS-1$
+ 			IStringVariableManager manager = VariablesPlugin.getDefault().getStringVariableManager();
             for (Iterator iter = fProperties.keySet().iterator(); iter.hasNext();) {
                 String name = (String) iter.next();
                 String value= (String) fProperties.get(name);
-                try {
-                    value= VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(value);
-                } catch (CoreException e) {
-                }
+               
+				if (!pattern.matcher(value).find()) {
+					try {
+						value = manager.performStringSubstitution(value);
+					} catch (CoreException e) {
+					}
+				}
                 if (value != null) {
                     project.setUserProperty(name, value);
                 }