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