[R3_4_maintenance_patches] 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);
}