You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by jg...@apache.org on 2010/05/03 19:44:28 UTC

svn commit: r940531 [4/7] - in /ant/core/branches/run-single-test-method: ./ docs/ docs/antlibs/ docs/manual/ docs/manual/CoreTasks/ docs/manual/CoreTypes/ docs/manual/OptionalTasks/ docs/webtest/gettest/ lib/ src/etc/ src/etc/poms/ src/etc/poms/ant-an...

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/helper/ProjectHelper2.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/helper/ProjectHelper2.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/helper/ProjectHelper2.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/helper/ProjectHelper2.java Mon May  3 17:44:21 2010
@@ -177,6 +177,28 @@ public class ProjectHelper2 extends Proj
             parse(project, source, new RootHandler(context, mainHandler));
             // Execute the top-level target
             context.getImplicitTarget().execute();
+
+            // resolve extensionOf attributes
+            for (Iterator i = getExtensionStack().iterator(); i.hasNext(); ) {
+                String[] extensionInfo = (String[]) i.next();
+                String tgName = extensionInfo[0];
+                String name = extensionInfo[1];
+                Hashtable projectTargets = project.getTargets();
+                if (!projectTargets.containsKey(tgName)) {
+                    throw new BuildException("can't add target "
+                                             + name + " to extension-point "
+                                             + tgName
+                                             + " because the extension-point"
+                                             + " is unknown.");
+                }
+                Target t = (Target) projectTargets.get(tgName);
+                if (!(t instanceof ExtensionPoint)) {
+                    throw new BuildException("referenced target "
+                                             + tgName
+                                             + " is not an extension-point");
+                }
+                t.addDependency(name);
+            }
         }
     }
 
@@ -760,17 +782,34 @@ public class ProjectHelper2 extends Proj
             String antFileProp =
                 MagicNames.ANT_FILE + "." + context.getCurrentProjectName();
             String dup = project.getProperty(antFileProp);
+            String typeProp =
+                MagicNames.ANT_FILE_TYPE + "." + context.getCurrentProjectName();
+            String dupType = project.getProperty(typeProp);
             if (dup != null && nameAttributeSet) {
-                File dupFile = new File(dup);
-                if (context.isIgnoringProjectTag() && !dupFile.equals(context.getBuildFile())) {
+                Object dupFile = null;
+                Object contextFile = null;
+                if (MagicNames.ANT_FILE_TYPE_URL.equals(dupType)) {
+                    try {
+                        dupFile = new URL(dup);
+                    } catch (java.net.MalformedURLException mue) {
+                        throw new BuildException("failed to parse "
+                                                 + dup + " as URL while looking"
+                                                 + " at a duplicate project"
+                                                 + " name.", mue);
+                    }
+                    contextFile = context.getBuildFileURL();
+                } else {
+                    dupFile = new File(dup);
+                    contextFile = context.getBuildFile();
+                }
+
+                if (context.isIgnoringProjectTag() && !dupFile.equals(contextFile)) {
                     project.log("Duplicated project name in import. Project "
                             + context.getCurrentProjectName() + " defined first in " + dup
-                            + " and again in " + context.getBuildFile(), Project.MSG_WARN);
+                            + " and again in " + contextFile, Project.MSG_WARN);
                 }
             }
             if (nameAttributeSet) {
-                String typeProp = MagicNames.ANT_FILE_TYPE + "."
-                    + context.getCurrentProjectName();
                 if (context.getBuildFile() != null) {
                     project.setUserProperty(antFileProp,
                                             context.getBuildFile().toString());
@@ -921,7 +960,7 @@ public class ProjectHelper2 extends Proj
                 prefix = getTargetPrefix(context);
                 if (prefix == null) {
                     throw new BuildException("can't include build file "
-                                             + context.getBuildFile()
+                                             + context.getBuildFileURL()
                                              + ", no as attribute has been given"
                                              + " and the project tag doesn't"
                                              + " specify a name attribute");
@@ -970,6 +1009,9 @@ public class ProjectHelper2 extends Proj
                 project.addOrReplaceTarget(newName, newTarget);
             }
             if (extensionPoint != null) {
+                ProjectHelper helper =
+                    (ProjectHelper) context.getProject().
+                        getReference(ProjectHelper.PROJECTHELPER_REFERENCE);
                 for (Iterator iter =
                          Target.parseDepends(extensionPoint, name, "extensionOf")
                          .iterator();
@@ -978,20 +1020,12 @@ public class ProjectHelper2 extends Proj
                     if (isInIncludeMode()) {
                         tgName = prefix + sep + tgName;
                     }
-                    if (!projectTargets.containsKey(tgName)) {
-                        throw new BuildException("can't add target "
-                                                 + name + " to extension-point "
-                                                 + tgName
-                                                 + " because the extension-point"
-                                                 + " is unknown.");
-                    }
-                    Target t = (Target) projectTargets.get(tgName);
-                    if (!(t instanceof ExtensionPoint)) {
-                        throw new BuildException("referenced target "
-                                                 + tgName
-                                                 + " is not an extension-point");
-                    }
-                    t.addDependency(name);
+
+                    // defer extensionpoint resolution until the full
+                    // import stack has been processed
+                    helper.getExtensionStack().add(new String[] {
+                            tgName, name
+                        });
                 }
             }
         }

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/helper/ProjectHelperImpl.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/helper/ProjectHelperImpl.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/helper/ProjectHelperImpl.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/helper/ProjectHelperImpl.java Mon May  3 17:44:21 2010
@@ -859,7 +859,7 @@ public class ProjectHelperImpl extends P
             IntrospectionHelper ih = IntrospectionHelper.getHelper(helperImpl.project, parentClass);
 
             try {
-                String elementName = propType.toLowerCase(Locale.US);
+                String elementName = propType.toLowerCase(Locale.ENGLISH);
                 if (parent instanceof UnknownElement) {
                     UnknownElement uc = new UnknownElement(elementName);
                     uc.setProject(helperImpl.project);

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/input/InputRequest.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/input/InputRequest.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/input/InputRequest.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/input/InputRequest.java Mon May  3 17:44:21 2010
@@ -24,7 +24,7 @@ package org.apache.tools.ant.input;
  * @since Ant 1.5
  */
 public class InputRequest {
-    private String prompt;
+    private final String prompt;
     private String input;
     private String defaultValue;
 

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/input/MultipleChoiceInputRequest.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/input/MultipleChoiceInputRequest.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/input/MultipleChoiceInputRequest.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/input/MultipleChoiceInputRequest.java Mon May  3 17:44:21 2010
@@ -18,6 +18,7 @@
 
 package org.apache.tools.ant.input;
 
+import java.util.LinkedHashSet;
 import java.util.Vector;
 
 /**
@@ -26,7 +27,7 @@ import java.util.Vector;
  * @since Ant 1.5
  */
 public class MultipleChoiceInputRequest extends InputRequest {
-    private Vector choices = new Vector();
+    private final LinkedHashSet choices;
 
     /**
      * @param prompt The prompt to show to the user.  Must not be null.
@@ -38,14 +39,14 @@ public class MultipleChoiceInputRequest 
         if (choices == null) {
             throw new IllegalArgumentException("choices must not be null");
         }
-        this.choices = choices;
+        this.choices = new LinkedHashSet(choices);
     }
 
     /**
      * @return The possible values.
      */
     public Vector getChoices() {
-        return choices;
+        return new Vector(choices);
     }
 
     /**

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/launch/Locator.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/launch/Locator.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/launch/Locator.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/launch/Locator.java Mon May  3 17:44:21 2010
@@ -18,7 +18,6 @@
 package org.apache.tools.ant.launch;
 
 import java.net.MalformedURLException;
-
 import java.net.URL;
 import java.io.File;
 import java.io.FilenameFilter;
@@ -442,7 +441,7 @@ public final class Locator {
             // Found in java.home as given
             return toolsJar;
         }
-        if (javaHome.toLowerCase(Locale.US).endsWith(File.separator + "jre")) {
+        if (javaHome.toLowerCase(Locale.ENGLISH).endsWith(File.separator + "jre")) {
             javaHome = javaHome.substring(
                 0, javaHome.length() - "/jre".length());
             toolsJar = new File(javaHome + libToolsJar);
@@ -498,7 +497,7 @@ public final class Locator {
         if (!location.isDirectory()) {
             urls = new URL[1];
             String path = location.getPath();
-            String littlePath = path.toLowerCase(Locale.US);
+            String littlePath = path.toLowerCase(Locale.ENGLISH);
             for (int i = 0; i < extensions.length; ++i) {
                 if (littlePath.endsWith(extensions[i])) {
                     urls[0] = fileToURL(location);
@@ -510,7 +509,7 @@ public final class Locator {
         File[] matches = location.listFiles(
             new FilenameFilter() {
                 public boolean accept(File dir, String name) {
-                    String littleName = name.toLowerCase(Locale.US);
+                    String littleName = name.toLowerCase(Locale.ENGLISH);
                     for (int i = 0; i < extensions.length; ++i) {
                         if (littleName.endsWith(extensions[i])) {
                             return true;

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/listener/BigProjectLogger.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/listener/BigProjectLogger.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/listener/BigProjectLogger.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/listener/BigProjectLogger.java Mon May  3 17:44:21 2010
@@ -18,7 +18,6 @@
 package org.apache.tools.ant.listener;
 
 import org.apache.tools.ant.BuildEvent;
-import org.apache.tools.ant.NoBannerLogger;
 import org.apache.tools.ant.SubBuildListener;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.util.StringUtils;
@@ -33,7 +32,7 @@ import java.io.File;
  * @since Ant1.7.1
  */
 
-public class BigProjectLogger extends NoBannerLogger
+public class BigProjectLogger extends SimpleBigProjectLogger
     implements SubBuildListener {
 
     private volatile boolean subBuildStartedRaised = false;
@@ -114,22 +113,6 @@ public class BigProjectLogger extends No
         super.messageLogged(event);
     }
 
-    /**
-     * Override point, extract the target name
-     *
-     * @param event the event to work on
-     * @return the target name -including the owning project name (if non-null)
-     */
-    protected String extractTargetName(BuildEvent event) {
-        String targetName = event.getTarget().getName();
-        String projectName = extractProjectName(event);
-        if (projectName != null && targetName != null) {
-            return projectName + '.' + targetName;
-        } else {
-            return targetName;
-        }
-    }
-
 
     /**
      * {@inheritDoc}

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/property/ResolvePropertyMap.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/property/ResolvePropertyMap.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/property/ResolvePropertyMap.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/property/ResolvePropertyMap.java Mon May  3 17:44:21 2010
@@ -35,6 +35,7 @@ public class ResolvePropertyMap implemen
     private final ParseProperties parseProperties;
     private final GetProperty master;
     private Map map;
+    private String prefix;
 
     /**
      * Constructor with a master getproperty and a collection of expanders.
@@ -57,12 +58,19 @@ public class ResolvePropertyMap implemen
             throw new BuildException(
                 "Property " + name + " was circularly " + "defined.");
         }
-        // Note: the master overrides (even if the name is subsequently
-        //       prefixed)
-        Object masterProperty = master.getProperty(name);
+
+        // if the property has already been set to the name it will
+        // have in the end, then return the existing value to ensure
+        // properties remain immutable
+        String masterPropertyName = name;
+        if (prefix != null) {
+            masterPropertyName = prefix + name;
+        }
+        Object masterProperty = master.getProperty(masterPropertyName);
         if (masterProperty != null) {
             return masterProperty;
         }
+
         try {
             seen.add(name);
             return parseProperties.parseProperties((String) map.get(name));
@@ -74,9 +82,21 @@ public class ResolvePropertyMap implemen
     /**
      * The action method - resolves all the properties in a map.
      * @param map the map to resolve properties in.
+     * @deprecated since Ant 1.8.1, use the two-arg method instead.
      */
     public void resolveAllProperties(Map map) {
+        resolveAllProperties(map, null);
+    }
+
+    /**
+     * The action method - resolves all the properties in a map.
+     * @param map the map to resolve properties in.
+     * @param prefix the prefix the properties defined inside the map
+     * will finally receive - may be null.
+     */
+    public void resolveAllProperties(Map map, String prefix) {
         this.map = map; // The map gets used in the getProperty callback
+        this.prefix = prefix;
         for (Iterator i = map.keySet().iterator(); i.hasNext();) {
             String key = (String) i.next();
             Object result = getProperty(key);

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Ant.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Ant.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Ant.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Ant.java Mon May  3 17:44:21 2010
@@ -41,6 +41,7 @@ import org.apache.tools.ant.MagicNames;
 import org.apache.tools.ant.Main;
 import org.apache.tools.ant.types.PropertySet;
 import org.apache.tools.ant.util.FileUtils;
+import org.apache.tools.ant.util.VectorSet;
 
 /**
  * Build a sub-project.
@@ -333,7 +334,7 @@ public class Ant extends Task {
     public void execute() throws BuildException {
         File savedDir = dir;
         String savedAntFile = antFile;
-        Vector locals = new Vector(targets);
+        Vector locals = new VectorSet(targets);
         try {
             getNewProject();
 

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/AntStructure.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/AntStructure.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/AntStructure.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/AntStructure.java Mon May  3 17:44:21 2010
@@ -27,6 +27,7 @@ import java.io.PrintWriter;
 import java.io.UnsupportedEncodingException;
 import java.util.Enumeration;
 import java.util.Hashtable;
+import java.util.Iterator;
 import java.util.Vector;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.IntrospectionHelper;
@@ -95,22 +96,24 @@ public class AntStructure extends Task {
             }
 
             printer.printHead(out, getProject(),
-                              getProject().getTaskDefinitions(),
-                              getProject().getDataTypeDefinitions());
+                              new Hashtable(getProject().getTaskDefinitions()),
+                              new Hashtable(getProject().getDataTypeDefinitions()));
 
             printer.printTargetDecl(out);
 
-            Enumeration dataTypes = getProject().getDataTypeDefinitions().keys();
-            while (dataTypes.hasMoreElements()) {
-                String typeName = (String) dataTypes.nextElement();
+            Iterator dataTypes = getProject().getCopyOfDataTypeDefinitions()
+                .keySet().iterator();
+            while (dataTypes.hasNext()) {
+                String typeName = (String) dataTypes.next();
                 printer.printElementDecl(
                     out, getProject(), typeName,
                     (Class) getProject().getDataTypeDefinitions().get(typeName));
             }
 
-            Enumeration tasks = getProject().getTaskDefinitions().keys();
-            while (tasks.hasMoreElements()) {
-                String tName = (String) tasks.nextElement();
+            Iterator tasks = getProject().getCopyOfTaskDefinitions().keySet()
+                .iterator();
+            while (tasks.hasNext()) {
+                String tName = (String) tasks.next();
                 printer.printElementDecl(out, getProject(), tName,
                                          (Class) getProject().getTaskDefinitions().get(tName));
             }

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Concat.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Concat.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Concat.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Concat.java Mon May  3 17:44:21 2010
@@ -465,7 +465,7 @@ public class Concat extends Task impleme
      * Stores a collection of file sets and/or file lists, used to
      * select multiple files for concatenation.
      */
-    private ResourceCollection rc;
+    private Resources rc;
 
     /** for filtering the concatenated */
     private Vector filterChains;
@@ -634,19 +634,15 @@ public class Concat extends Task impleme
      * @param c the ResourceCollection to add.
      * @since Ant 1.7
      */
-    public synchronized void add(ResourceCollection c) {
-        if (rc == null) {
-            rc = c;
-            return;
-        }
-        if (!(rc instanceof Resources)) {
-            Resources newRc = new Resources();
-            newRc.setProject(getProject());
-            newRc.setCache(true);
-            newRc.add(rc);
-            rc = newRc;
+    public void add(ResourceCollection c) {
+        synchronized (this) {
+            if (rc == null) {
+                rc = new Resources();
+                rc.setProject(getProject());
+                rc.setCache(true);
+            }
         }
-        ((Resources) rc).add(c);
+        rc.add(c);
     }
 
     /**

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Copy.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Copy.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Copy.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Copy.java Mon May  3 17:44:21 2010
@@ -66,6 +66,9 @@ import org.apache.tools.ant.util.FlatFil
  * @ant.task category="filesystem"
  */
 public class Copy extends Task {
+    private static final String MSG_WHEN_COPYING_EMPTY_RC_TO_FILE =
+        "Cannot perform operation from directory to file.";
+
     static final File NULL_FILE_PLACEHOLDER = new File("/NULL_FILE");
     static final String LINE_SEPARATOR = System.getProperty("line.separator");
     // CheckStyle:VisibilityModifier OFF - bc
@@ -395,10 +398,22 @@ public class Copy extends Task {
             // will be removed in validateAttributes
             savedRc = (ResourceCollection) rcs.elementAt(0);
         }
-        // make sure we don't have an illegal set of options
-        validateAttributes();
 
         try {
+            // make sure we don't have an illegal set of options
+            try {
+                validateAttributes();
+            } catch (BuildException e) {
+                if (failonerror
+                    || !getMessage(e)
+                    .equals(MSG_WHEN_COPYING_EMPTY_RC_TO_FILE)) {
+                    throw e;
+                } else {
+                    log("Warning: " + getMessage(e), Project.MSG_ERR);
+                    return;
+                }
+            }
+
             // deal with the single file
             copySingleFile();
 
@@ -631,8 +646,7 @@ public class Copy extends Task {
                                              + " files.");
                 }
                 if (rc.size() == 0) {
-                    throw new BuildException(
-                        "Cannot perform operation from directory to file.");
+                    throw new BuildException(MSG_WHEN_COPYING_EMPTY_RC_TO_FILE);
                 } else if (rc.size() == 1) {
                     Resource res = (Resource) rc.iterator().next();
                     FileProvider r = (FileProvider) res.as(FileProvider.class);

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Definer.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Definer.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Definer.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Definer.java Mon May  3 17:44:21 2010
@@ -271,7 +271,7 @@ public abstract class Definer extends De
                 URL url = (URL) urls.nextElement();
 
                 int fmt = this.format;
-                if (url.toString().toLowerCase(Locale.US).endsWith(".xml")) {
+                if (url.toString().toLowerCase(Locale.ENGLISH).endsWith(".xml")) {
                     fmt = Format.XML;
                 }
 

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Ear.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Ear.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Ear.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Ear.java Mon May  3 17:44:21 2010
@@ -19,7 +19,6 @@ package org.apache.tools.ant.taskdefs;
 
 import java.io.File;
 import java.io.IOException;
-import java.util.Locale;
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
@@ -125,9 +124,8 @@ public class Ear extends Jar {
         // attribute - or if it's being added twice, meaning the same
         // file is specified by the "appxml" attribute and in a
         // <fileset> element.
-        String vPathLowerCase = vPath.toLowerCase(Locale.ENGLISH);
-        if (XML_DESCRIPTOR_PATH.equals(vPathLowerCase))  {
-            if (deploymentDescriptor != null
+        if (XML_DESCRIPTOR_PATH.equalsIgnoreCase(vPath))  {
+            if (deploymentDescriptor == null
                 || !FILE_UTILS.fileNameEquals(deploymentDescriptor, file)
                 || descriptorAdded) {
                 logWhenWriting("Warning: selected " + archiveType

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Exec.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Exec.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Exec.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Exec.java Mon May  3 17:44:21 2010
@@ -25,6 +25,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.PrintWriter;
+import java.util.Locale;
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.MagicNames;
@@ -97,9 +98,9 @@ public class Exec extends Task {
           dir = getProject().getBaseDir();
         }
 
-        if (myos.toLowerCase().indexOf("windows") >= 0) {
+        if (myos.toLowerCase(Locale.ENGLISH).indexOf("windows") >= 0) {
             if (!dir.equals(getProject().resolveFile("."))) {
-                if (myos.toLowerCase().indexOf("nt") >= 0) {
+                if (myos.toLowerCase(Locale.ENGLISH).indexOf("nt") >= 0) {
                     command = "cmd /c cd " + dir + " && " + command;
                 } else {
                     String ant = getProject().getProperty(MagicNames.ANT_HOME);

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/ExecTask.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/ExecTask.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/ExecTask.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/ExecTask.java Mon May  3 17:44:21 2010
@@ -401,7 +401,7 @@ public class ExecTask extends Task {
      * @param osFamily the family to restrict to.
      */
     public void setOsFamily(String osFamily) {
-        this.osFamily = osFamily.toLowerCase(Locale.US);
+        this.osFamily = osFamily.toLowerCase(Locale.ENGLISH);
     }
 
     /**

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java Mon May  3 17:44:21 2010
@@ -20,7 +20,7 @@ package org.apache.tools.ant.taskdefs;
 
 import java.io.File;
 import java.io.IOException;
-import java.util.Hashtable;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Vector;
 import org.apache.tools.ant.BuildException;
@@ -527,7 +527,7 @@ public class ExecuteOn extends ExecTask 
         final char fileSeparator = File.separatorChar;
         Vector targets = new Vector();
         if (targetFilePos != null) {
-            Hashtable addedFiles = new Hashtable();
+            HashSet addedFiles = new HashSet();
             for (int i = 0; i < srcFiles.length; i++) {
                 String[] subTargets = mapper.mapFileName(srcFiles[i]);
                 if (subTargets != null) {
@@ -543,7 +543,7 @@ public class ExecuteOn extends ExecTask 
                         }
                         if (!addedFiles.contains(name)) {
                             targets.addElement(name);
-                            addedFiles.put(name, name);
+                            addedFiles.add(name);
                         }
                     }
                 }

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Get.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Get.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Get.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Get.java Mon May  3 17:44:21 2010
@@ -658,7 +658,12 @@ public class Get extends Task {
                         .setUseCaches(httpUseCaches);
             }
             // connect to the remote site (may take some time)
-            connection.connect();
+            try {
+                connection.connect();
+            } catch (NullPointerException e) {
+                //bad URLs can trigger NPEs in some JVMs
+                throw new BuildException("Failed to parse " + source.toString(), e);
+            }
 
             // First check on a 301 / 302 (moved) response (HTTP only)
             if (connection instanceof HttpURLConnection) {
@@ -673,7 +678,7 @@ public class Get extends Task {
                             + (responseCode == HttpURLConnection.HTTP_MOVED_PERM ? " permanently"
                                     : "") + " moved to " + newLocation;
                     log(message, logLevel);
-                    URL newURL = new URL(newLocation);
+                    URL newURL = new URL(aSource, newLocation);
                     if (!redirectionAllowed(aSource, newURL))
                     {
                         return null;

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Jar.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Jar.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Jar.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Jar.java Mon May  3 17:44:21 2010
@@ -249,7 +249,8 @@ public class Jar extends Zip {
      * jars on Java 1.4 or earlier Ant will not include META-INF
      * unless explicitly asked to.</p>
      *
-     * @see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4408526
+     * @see <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4408526">
+     * jar -i omits service providers in index.list</a>
      * @since Ant 1.8.0
      * @param flag a <code>boolean</code> value, defaults to false
      */
@@ -812,7 +813,15 @@ public class Jar extends Zip {
             // manifest this means we claim an update was needed and
             // only include the manifests, skipping any uptodate
             // checks here defering them for the second run
-            return new ArchiveState(true, grabManifests(rcs));
+            Resource[][] manifests = grabManifests(rcs);
+            int count = 0;
+            for (int i = 0; i < manifests.length; i++) {
+                count += manifests[i].length;
+            }
+            log("found a total of " + count + " manifests in "
+                + manifests.length + " resource collections",
+                Project.MSG_VERBOSE);
+            return new ArchiveState(true, manifests);
         }
 
         // need to handle manifest as a special check
@@ -1166,7 +1175,8 @@ public class Jar extends Zip {
                     });
             }
             for (int j = 0; j < resources[0].length; j++) {
-                if (resources[0][j].getName().equalsIgnoreCase(MANIFEST_NAME)) {
+                String name = resources[0][j].getName().replace('\\', '/');
+                if (name.equalsIgnoreCase(MANIFEST_NAME)) {
                     manifests[i] = new Resource[] {resources[0][j]};
                     break;
                 }

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Javac.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Javac.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Javac.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Javac.java Mon May  3 17:44:21 2010
@@ -679,7 +679,7 @@ public class Javac extends MatchingTask 
      * @return true if this is a forked invocation
      */
     public boolean isForkedJavac() {
-        return fork || "extJavac".equals(getCompiler());
+        return fork || EXTJAVAC.equalsIgnoreCase(getCompiler());
     }
 
     /**
@@ -777,7 +777,7 @@ public class Javac extends MatchingTask 
                 return nextSelected;
             }
         }
-        if (CLASSIC.equals(anImplementation)) {
+        if (CLASSIC.equalsIgnoreCase(anImplementation)) {
             return assumedJavaVersion();
         }
         if (EXTJAVAC.equalsIgnoreCase(anImplementation)) {
@@ -1007,7 +1007,7 @@ public class Javac extends MatchingTask 
         String compilerImpl = getCompilerVersion();
         if (fork) {
             if (isJdkCompiler(compilerImpl)) {
-                compilerImpl = "extJavac";
+                compilerImpl = EXTJAVAC;
             } else {
                 log("Since compiler setting isn't classic or modern, "
                     + "ignoring fork setting.", Project.MSG_WARN);

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Javadoc.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Javadoc.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Javadoc.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Javadoc.java Mon May  3 17:44:21 2010
@@ -28,6 +28,7 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Enumeration;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Locale;
 import java.util.StringTokenizer;
@@ -1342,7 +1343,7 @@ public class Javadoc extends Task {
          * specified.
          */
         public void setScope (String verboseScope) throws BuildException {
-            verboseScope = verboseScope.toLowerCase(Locale.US);
+            verboseScope = verboseScope.toLowerCase(Locale.ENGLISH);
 
             boolean[] elements = new boolean[SCOPE_ELEMENTS.length];
 
@@ -2320,7 +2321,7 @@ public class Javadoc extends Task {
      * @since 1.5
      */
     private void parsePackages(Vector pn, Path sp) {
-        Vector addedPackages = new Vector();
+        HashSet addedPackages = new HashSet();
         Vector dirSets = (Vector) packageSets.clone();
 
         // for each sourcePath entry, add a directoryset with includes
@@ -2403,7 +2404,7 @@ public class Javadoc extends Task {
                         String packageName =
                             dirs[i].replace(File.separatorChar, '.');
                         if (!addedPackages.contains(packageName)) {
-                            addedPackages.addElement(packageName);
+                            addedPackages.add(packageName);
                             pn.addElement(packageName);
                         }
                     }

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Jikes.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Jikes.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Jikes.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Jikes.java Mon May  3 17:44:21 2010
@@ -21,6 +21,7 @@ import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.util.Locale;
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
@@ -81,7 +82,7 @@ public class Jikes {
             // Windows has a 32k limit on total arg size, so
             // create a temporary file to store all the arguments
 
-            if (myos.toLowerCase().indexOf("windows") >= 0
+            if (myos.toLowerCase(Locale.ENGLISH).indexOf("windows") >= 0
                 && args.length > MAX_FILES_ON_COMMAND_LINE) {
                 BufferedWriter out = null;
                 try {

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Length.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Length.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Length.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Length.java Mon May  3 17:44:21 2010
@@ -68,6 +68,14 @@ public class Length extends Task impleme
     }
 
     /**
+     * Set the single resource for this task.
+     * @param resource the Resource whose length to retrieve.
+     */
+    public synchronized void setResource(Resource resource) {
+        add(resource);
+    }
+
+    /**
      * Set the single file for this task.
      * @param file the <code>File</code> whose length to retrieve.
      */

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java Mon May  3 17:44:21 2010
@@ -37,6 +37,7 @@ import org.apache.tools.ant.types.Filter
 import org.apache.tools.ant.types.resources.FileResource;
 import org.apache.tools.ant.types.resources.JavaResource;
 import org.apache.tools.ant.util.FileUtils;
+import org.apache.tools.ant.util.ResourceUtils;
 
 /**
  * Load a file's contents as Ant properties.
@@ -60,6 +61,11 @@ public class LoadProperties extends Task
      * Encoding to use for input; defaults to the platform's default encoding.
      */
     private String encoding = null;
+    
+    /**
+     * Prefix for loaded properties.
+     */
+    private String prefix = null;
 
     /**
      * Set the file to load.
@@ -128,6 +134,14 @@ public class LoadProperties extends Task
     }
 
     /**
+     * Set the prefix to load these properties under.
+     * @param prefix to set
+     */
+    public void setPrefix(String prefix) {
+        this.prefix = prefix;
+    }
+
+    /**
      * load Ant properties from the source file or resource
      *
      * @exception BuildException if something goes wrong with the build
@@ -168,12 +182,13 @@ public class LoadProperties extends Task
                 if (!text.endsWith("\n")) {
                     text = text + "\n";
                 }
-                tis = new ByteArrayInputStream(text.getBytes("ISO8859_1"));
+                tis = new ByteArrayInputStream(text.getBytes(ResourceUtils.ISO_8859_1));
                 final Properties props = new Properties();
                 props.load(tis);
 
                 Property propertyTask = new Property();
                 propertyTask.bindToOwner(this);
+                propertyTask.setPrefix(prefix);
                 propertyTask.addProperties(props);
             }
         } catch (final IOException ioe) {

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/MacroDef.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/MacroDef.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/MacroDef.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/MacroDef.java Mon May  3 17:44:21 2010
@@ -339,7 +339,7 @@ public class MacroDef extends AntlibDefi
                 throw new BuildException(
                     "Illegal name [" + name + "] for attribute");
             }
-            this.name = name.toLowerCase(Locale.US);
+            this.name = name.toLowerCase(Locale.ENGLISH);
         }
 
         /**
@@ -443,7 +443,7 @@ public class MacroDef extends AntlibDefi
                 throw new BuildException(
                     "Illegal name [" + name + "] for attribute");
             }
-            this.name = name.toLowerCase(Locale.US);
+            this.name = name.toLowerCase(Locale.ENGLISH);
         }
 
         /**
@@ -567,7 +567,7 @@ public class MacroDef extends AntlibDefi
                 throw new BuildException(
                     "Illegal name [" + name + "] for macro element");
             }
-            this.name = name.toLowerCase(Locale.US);
+            this.name = name.toLowerCase(Locale.ENGLISH);
         }
 
         /**

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/MacroInstance.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/MacroInstance.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/MacroInstance.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/MacroInstance.java Mon May  3 17:44:21 2010
@@ -127,7 +127,7 @@ public class MacroInstance extends Task 
         for (Iterator i = unknownElements.iterator(); i.hasNext();) {
             UnknownElement ue = (UnknownElement) i.next();
             String name = ProjectHelper.extractNameFromComponentName(
-                ue.getTag()).toLowerCase(Locale.US);
+                ue.getTag()).toLowerCase(Locale.ENGLISH);
             if (getNsElements().get(name) == null) {
                 throw new BuildException("unsupported element " + name);
             }
@@ -199,7 +199,7 @@ public class MacroInstance extends Task 
                 case STATE_EXPECT_NAME:
                     if (ch == '}') {
                         state = STATE_NORMAL;
-                        String name = macroName.toString().toLowerCase(Locale.US);
+                        String name = macroName.toString().toLowerCase(Locale.ENGLISH);
                         String value = (String) macroMapping.get(name);
                         if (value == null) {
                             ret.append("@{");
@@ -278,7 +278,7 @@ public class MacroInstance extends Task 
             UnknownElement unknownElement = (UnknownElement) r.getProxy();
             String tag = unknownElement.getTaskType();
             if (tag != null) {
-                tag = tag.toLowerCase(Locale.US);
+                tag = tag.toLowerCase(Locale.ENGLISH);
             }
             MacroDef.TemplateElement templateElement =
                 (MacroDef.TemplateElement) getNsElements().get(tag);

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Manifest.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Manifest.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Manifest.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Manifest.java Mon May  3 17:44:21 2010
@@ -27,9 +27,13 @@ import java.io.Reader;
 import java.io.StringWriter;
 import java.io.UnsupportedEncodingException;
 import java.util.Enumeration;
-import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Locale;
+import java.util.Map;
 import java.util.Vector;
 import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.util.CollectionUtils;
 import org.apache.tools.ant.util.FileUtils;
 
 /**
@@ -87,6 +91,15 @@ public class Manifest {
     /** Encoding to be used for JAR files. */
     public static final String JAR_ENCODING = "UTF-8";
 
+    private static final String ATTRIBUTE_MANIFEST_VERSION_LC =
+        ATTRIBUTE_MANIFEST_VERSION.toLowerCase(Locale.ENGLISH);
+    private static final String ATTRIBUTE_NAME_LC =
+        ATTRIBUTE_NAME.toLowerCase(Locale.ENGLISH);
+    private static final String ATTRIBUTE_FROM_LC =
+        ATTRIBUTE_FROM.toLowerCase(Locale.ENGLISH);
+    private static final String ATTRIBUTE_CLASSPATH_LC =
+        ATTRIBUTE_CLASSPATH.toLowerCase(Locale.ENGLISH);
+
     /**
      * An attribute for the manifest.
      * Those attributes that are not nested into a section will be added to the "Main" section.
@@ -235,7 +248,7 @@ public class Manifest {
             if (name == null) {
                 return null;
             }
-            return name.toLowerCase();
+            return name.toLowerCase(Locale.ENGLISH);
         }
 
         /**
@@ -398,10 +411,7 @@ public class Manifest {
         private String name = null;
 
         /** The section's attributes.*/
-        private Hashtable attributes = new Hashtable();
-
-        /** Index used to retain the attribute ordering */
-        private Vector attributeIndex = new Vector();
+        private Map attributes = new LinkedHashMap();
 
         /**
          * The name of the section; optional -default is the main section.
@@ -491,8 +501,10 @@ public class Manifest {
         public void merge(Section section, boolean mergeClassPaths)
             throws ManifestException {
             if (name == null && section.getName() != null
-                || name != null
-                && !(name.equalsIgnoreCase(section.getName()))) {
+                || (name != null && section.getName() != null
+                    && !(name.toLowerCase(Locale.ENGLISH)
+                         .equals(section.getName().toLowerCase(Locale.ENGLISH))))
+                ) {
                 throw new ManifestException("Unable to merge sections "
                     + "with different names");
             }
@@ -586,7 +598,7 @@ public class Manifest {
          *         instances.
          */
         public Attribute getAttribute(String attributeName) {
-            return (Attribute) attributes.get(attributeName.toLowerCase());
+            return (Attribute) attributes.get(attributeName.toLowerCase(Locale.ENGLISH));
         }
 
         /**
@@ -596,7 +608,7 @@ public class Manifest {
          *         key of an attribute of the section.
          */
         public Enumeration getAttributeKeys() {
-            return attributeIndex.elements();
+            return CollectionUtils.asEnumeration(attributes.keySet().iterator());
         }
 
         /**
@@ -608,7 +620,7 @@ public class Manifest {
          *         in the section
          */
         public String getAttributeValue(String attributeName) {
-            Attribute attribute = getAttribute(attributeName.toLowerCase());
+            Attribute attribute = getAttribute(attributeName.toLowerCase(Locale.ENGLISH));
             if (attribute == null) {
                 return null;
             }
@@ -621,9 +633,8 @@ public class Manifest {
          * @param attributeName the name of the attribute to be removed.
          */
         public void removeAttribute(String attributeName) {
-            String key = attributeName.toLowerCase();
+            String key = attributeName.toLowerCase(Locale.ENGLISH);
             attributes.remove(key);
-            attributeIndex.removeElement(key);
         }
 
         /**
@@ -659,7 +670,8 @@ public class Manifest {
             if (attribute.getName() == null || attribute.getValue() == null) {
                 throw new BuildException("Attributes must have name and value");
             }
-            if (attribute.getKey().equalsIgnoreCase(ATTRIBUTE_NAME)) {
+            String attributeKey = attribute.getKey();
+            if (attributeKey.equals(ATTRIBUTE_NAME_LC)) {
                 warnings.addElement("\"" + ATTRIBUTE_NAME + "\" attributes "
                     + "should not occur in the main section and must be the "
                     + "first element in all other sections: \""
@@ -667,13 +679,12 @@ public class Manifest {
                 return attribute.getValue();
             }
 
-            if (attribute.getKey().startsWith(ATTRIBUTE_FROM.toLowerCase())) {
+            if (attributeKey.startsWith(ATTRIBUTE_FROM_LC)) {
                 warnings.addElement(ERROR_FROM_FORBIDDEN
                     + attribute.getName() + ": " + attribute.getValue() + "\"");
             } else {
                 // classpath attributes go into a vector
-                String attributeKey = attribute.getKey();
-                if (attributeKey.equalsIgnoreCase(ATTRIBUTE_CLASSPATH)) {
+                if (attributeKey.equals(ATTRIBUTE_CLASSPATH_LC)) {
                     Attribute classpathAttribute =
                         (Attribute) attributes.get(attributeKey);
 
@@ -731,9 +742,6 @@ public class Manifest {
             }
             String attributeKey = attribute.getKey();
             attributes.put(attributeKey, attribute);
-            if (!attributeIndex.contains(attributeKey)) {
-                attributeIndex.addElement(attributeKey);
-            }
         }
 
         /**
@@ -781,10 +789,7 @@ public class Manifest {
     private Section mainSection = new Section();
 
     /** The named sections of this manifest */
-    private Hashtable sections = new Hashtable();
-
-    /** Index of sections - used to retain order of sections in manifest */
-    private Vector sectionIndex = new Vector();
+    private Map sections = new LinkedHashMap();
 
     /**
      * Construct a manifest from Ant's default manifest file.
@@ -898,9 +903,6 @@ public class Manifest {
             throw new BuildException("Sections must have a name");
         }
         sections.put(sectionName, section);
-        if (!sectionIndex.contains(sectionName)) {
-            sectionIndex.addElement(sectionName);
-        }
     }
 
     /**
@@ -915,7 +917,7 @@ public class Manifest {
         if (attribute.getKey() == null || attribute.getValue() == null) {
             throw new BuildException("Attributes must have name and value");
         }
-        if (attribute.getKey().equalsIgnoreCase(ATTRIBUTE_MANIFEST_VERSION)) {
+        if (attribute.getKey().equals(ATTRIBUTE_MANIFEST_VERSION_LC)) {
             manifestVersion = attribute.getValue();
         } else {
             mainSection.addConfiguredAttribute(attribute);
@@ -1041,9 +1043,9 @@ public class Manifest {
             }
         }
 
-        Enumeration e = sectionIndex.elements();
-        while (e.hasMoreElements()) {
-            String sectionName = (String) e.nextElement();
+        Iterator e = sections.keySet().iterator();
+        while (e.hasNext()) {
+            String sectionName = (String) e.next();
             Section section = getSection(sectionName);
             section.write(writer, flatten);
         }
@@ -1079,9 +1081,9 @@ public class Manifest {
         }
 
         // create a vector and add in the warnings for all the sections
-        Enumeration e = sections.elements();
-        while (e.hasMoreElements()) {
-            Section section = (Section) e.nextElement();
+        Iterator e = sections.values().iterator();
+        while (e.hasNext()) {
+            Section section = (Section) e.next();
             Enumeration e2 = section.getWarnings();
             while (e2.hasMoreElements()) {
                 warnings.addElement(e2.nextElement());
@@ -1172,6 +1174,6 @@ public class Manifest {
      * @return an Enumeration of section names
      */
     public Enumeration getSectionNames() {
-        return sectionIndex.elements();
+        return CollectionUtils.asEnumeration(sections.keySet().iterator());
     }
 }

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Move.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Move.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Move.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Move.java Mon May  3 17:44:21 2010
@@ -338,6 +338,8 @@ public class Move extends Copy {
             destFile = getFileUtils().normalize(destFile.getAbsolutePath());
             if (destFile.equals(sourceFile)) {
                 //no point in renaming a file to its own canonical version...
+                log("Rename of " + sourceFile + " to " + destFile
+                    + " is a no-op.", Project.MSG_VERBOSE);
                 return true;
             }
             if (!(sourceFile.equals(destFile.getCanonicalFile()) || destFile.delete())) {

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/ProcessDestroyer.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/ProcessDestroyer.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/ProcessDestroyer.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/ProcessDestroyer.java Mon May  3 17:44:21 2010
@@ -20,8 +20,8 @@ package org.apache.tools.ant.taskdefs;
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
-import java.util.Enumeration;
-import java.util.Vector;
+import java.util.HashSet;
+import java.util.Iterator;
 
 /**
  * Destroys all registered <code>Process</code>es when the VM exits.
@@ -30,7 +30,7 @@ import java.util.Vector;
  */
 class ProcessDestroyer implements Runnable {
     private static final int THREAD_DIE_TIMEOUT = 20000;
-    private Vector processes = new Vector();
+    private HashSet processes = new HashSet();
     // methods to register and unregister shutdown hooks
     private Method addShutdownHookMethod;
     private Method removeShutdownHookMethod;
@@ -183,8 +183,7 @@ class ProcessDestroyer implements Runnab
             if (processes.size() == 0) {
                 addShutdownHook();
             }
-            processes.addElement(process);
-            return processes.contains(process);
+            return processes.add(process);
         }
     }
 
@@ -198,7 +197,7 @@ class ProcessDestroyer implements Runnab
      */
     public boolean remove(Process process) {
         synchronized (processes) {
-            boolean processRemoved = processes.removeElement(process);
+            boolean processRemoved = processes.remove(process);
             if (processRemoved && processes.size() == 0) {
                 removeShutdownHook();
             }
@@ -212,9 +211,9 @@ class ProcessDestroyer implements Runnab
     public void run() {
         synchronized (processes) {
             running = true;
-            Enumeration e = processes.elements();
-            while (e.hasMoreElements()) {
-                ((Process) e.nextElement()).destroy();
+            Iterator e = processes.iterator();
+            while (e.hasNext()) {
+                ((Process) e.next()).destroy();
             }
         }
     }

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Property.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Property.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Property.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Property.java Mon May  3 17:44:21 2010
@@ -279,7 +279,7 @@ public class Property extends Task {
      */
     public void setPrefix(String prefix) {
         this.prefix = prefix;
-        if (!prefix.endsWith(".")) {
+        if (prefix != null && !prefix.endsWith(".")) {
             this.prefix += ".";
         }
     }
@@ -542,7 +542,7 @@ public class Property extends Task {
                                 Properties props, InputStream is, boolean isXml) throws IOException {
         if (isXml) {
             // load the xml based property definition
-            // use reflection because of bwc to Java 1.3
+            // use reflection because of bwc to Java 1.4
             try {
                 Method loadXmlMethod = props.getClass().getMethod("loadFromXML",
                                                                   new Class[] {InputStream.class});
@@ -715,7 +715,8 @@ public class Property extends Task {
         new ResolvePropertyMap(
                                getProject(),
                                propertyHelper,
-                               propertyHelper.getExpanders()).resolveAllProperties(props);
+                               propertyHelper.getExpanders())
+            .resolveAllProperties(props, prefix);
     }
 
 }

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/PumpStreamHandler.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/PumpStreamHandler.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/PumpStreamHandler.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/PumpStreamHandler.java Mon May  3 17:44:21 2010
@@ -21,7 +21,6 @@ package org.apache.tools.ant.taskdefs;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import org.apache.tools.ant.taskdefs.condition.Os;
 
 /**
  * Copies standard output and error of subprocesses to standard output and
@@ -130,8 +129,6 @@ public class PumpStreamHandler implement
      * Stop pumping the streams.
      */
     public void stop() {
-        finish(outputThread);
-        finish(errorThread);
 
         if (inputPump != null) {
             inputPump.stop();
@@ -147,9 +144,11 @@ public class PumpStreamHandler implement
         } catch (IOException e) {
             // ignore
         }
+        finish(outputThread);
+        finish(errorThread);
     }
 
-    private static final long JOIN_TIMEOUT = 500;
+    private static final long JOIN_TIMEOUT = 200;
 
     /**
      * Waits for a thread to finish while trying to make it finish
@@ -161,11 +160,18 @@ public class PumpStreamHandler implement
      */
     protected final void finish(Thread t) {
         try {
-            t.join(JOIN_TIMEOUT);
             StreamPumper s = null;
             if (t instanceof ThreadWithPumper) {
                 s = ((ThreadWithPumper) t).getPumper();
             }
+            if (s != null && s.isFinished()) {
+                return;
+            }
+            if (!t.isAlive()) {
+                return;
+            }
+
+            t.join(JOIN_TIMEOUT);
             if (s != null && !s.isFinished()) {
                 s.stop();
             }
@@ -238,7 +244,7 @@ public class PumpStreamHandler implement
         final Thread result
             = new ThreadWithPumper(new StreamPumper(is, os,
                                                     closeWhenExhausted,
-                                                    Os.isFamily("windows")));
+                                                    true));
         result.setDaemon(true);
         return result;
     }

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Rmic.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Rmic.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Rmic.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Rmic.java Mon May  3 17:44:21 2010
@@ -705,7 +705,8 @@ public class Rmic extends MatchingTask {
                 continue;
             }
             String sourceFileName = StringUtils.removeSuffix(generatedFile,
-                                                             ".class");
+                                                             ".class")
+                + ".java";
 
             File oldFile = new File(baseDir, sourceFileName);
             if (!oldFile.exists()) {

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/SQLExec.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/SQLExec.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/SQLExec.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/SQLExec.java Mon May  3 17:44:21 2010
@@ -1072,7 +1072,7 @@ public class SQLExec extends JDBCTask {
             // no match
             return -1;
         } else {
-            String d = delimiter.trim().toLowerCase(Locale.US);
+            String d = delimiter.trim().toLowerCase(Locale.ENGLISH);
             if (delimiterType.equals(DelimiterType.NORMAL)) {
                 // still trying to avoid wasteful copying, see
                 // StringUtils.endsWith
@@ -1087,7 +1087,7 @@ public class SQLExec extends JDBCTask {
                 }
                 while (endIndex >= 0) {
                     if (buf.substring(bufferIndex, bufferIndex + 1)
-                        .toLowerCase(Locale.US).charAt(0)
+                        .toLowerCase(Locale.ENGLISH).charAt(0)
                         != d.charAt(endIndex)) {
                         return -1;
                     }
@@ -1096,7 +1096,7 @@ public class SQLExec extends JDBCTask {
                 }
                 return bufferIndex + 1;
             } else {
-                return currentLine.trim().toLowerCase(Locale.US).equals(d)
+                return currentLine.trim().toLowerCase(Locale.ENGLISH).equals(d)
                     ? buf.length() - currentLine.length() : -1;
             }
         }

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Tstamp.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Tstamp.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Tstamp.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Tstamp.java Mon May  3 17:44:21 2010
@@ -324,7 +324,7 @@ public class Tstamp extends Task {
          * @return an int value.
          */
         public int getCalendarField() {
-            String key = getValue().toLowerCase();
+            String key = getValue().toLowerCase(Locale.ENGLISH);
             Integer i = (Integer) calendarFields.get(key);
             return i.intValue();
         }

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/WaitFor.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/WaitFor.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/WaitFor.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/WaitFor.java Mon May  3 17:44:21 2010
@@ -19,6 +19,7 @@
 package org.apache.tools.ant.taskdefs;
 
 import java.util.HashMap;
+import java.util.Locale;
 import java.util.Map;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
@@ -259,7 +260,7 @@ public class WaitFor extends ConditionBa
          * @return a multipler (a long value)
          */
         public long getMultiplier() {
-            String key = getValue().toLowerCase();
+            String key = getValue().toLowerCase(Locale.ENGLISH);
             Long l = (Long) timeTable.get(key);
             return l.longValue();
         }

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/War.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/War.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/War.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/War.java Mon May  3 17:44:21 2010
@@ -20,7 +20,6 @@ package org.apache.tools.ant.taskdefs;
 
 import java.io.File;
 import java.io.IOException;
-import java.util.Locale;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.types.ZipFileSet;
@@ -61,9 +60,6 @@ public class War extends Jar {
     private static final FileUtils FILE_UTILS = FileUtils.getFileUtils();
     /** path to web.xml file */
     private static final String XML_DESCRIPTOR_PATH = "WEB-INF/web.xml";
-    /** lower case version for comparisons */
-    private static final String XML_DESCRIPTOR_PATH_LC =
-            XML_DESCRIPTOR_PATH.toLowerCase(Locale.ENGLISH);
 
     /** Constructor for the War Task. */
     public War() {
@@ -178,10 +174,9 @@ public class War extends Jar {
         // not the one specified in the "webxml" attribute - or if
         // it's being added twice, meaning the same file is specified
         // by the "webxml" attribute and in a <fileset> element.
-        String vPathLowerCase = vPath.toLowerCase(Locale.ENGLISH);
         //by default, we add the file.
         boolean addFile = true;
-        if (XML_DESCRIPTOR_PATH_LC.equals(vPathLowerCase)) {
+        if (XML_DESCRIPTOR_PATH.equalsIgnoreCase(vPath)) {
             //a web.xml file was found. See if it is a duplicate or not
             if (addedWebXmlFile != null) {
                 //a second web.xml file, so skip it

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java Mon May  3 17:44:21 2010
@@ -108,10 +108,6 @@ public class XSLTProcess extends Matchin
     /** for resolving entities such as dtds */
     private XMLCatalog xmlCatalog = new XMLCatalog();
 
-    /** Name of the TRAX Liaison class */
-    private static final String TRAX_LIAISON_CLASS =
-                        "org.apache.tools.ant.taskdefs.optional.TraXLiaison";
-
     /** Utilities used for file operations */
     private static final FileUtils FILE_UTILS = FileUtils.getFileUtils();
 
@@ -525,7 +521,6 @@ public class XSLTProcess extends Matchin
 
     /**
      * Set the name of the XSL processor to use; optional, default trax.
-     * Other values are "xalan" for Xalan1
      *
      * @param processor the name of the XSL processor
      */
@@ -675,15 +670,13 @@ public class XSLTProcess extends Matchin
      * @exception Exception if the processor cannot be loaded.
      */
     private void resolveProcessor(String proc) throws Exception {
-        String classname;
         if (proc.equals(PROCESSOR_TRAX)) {
-            classname = TRAX_LIAISON_CLASS;
+            liaison = new org.apache.tools.ant.taskdefs.optional.TraXLiaison();
         } else {
             //anything else is a classname
-            classname = proc;
+            Class clazz = loadClass(proc);
+            liaison = (XSLTLiaison) clazz.newInstance();
         }
-        Class clazz = loadClass(classname);
-        liaison = (XSLTLiaison) clazz.newInstance();
     }
 
     /**
@@ -906,8 +899,7 @@ public class XSLTProcess extends Matchin
      * @return an instance of the XSLTLiason interface.
      */
     protected XSLTLiaison getLiaison() {
-        // if processor wasn't specified, see if TraX is available.  If not,
-        // default it to xalan, depending on which is in the classpath
+        // if processor wasn't specified, use TraX.
         if (liaison == null) {
             if (processor != null) {
                 try {
@@ -918,8 +910,7 @@ public class XSLTProcess extends Matchin
             } else {
                 try {
                     resolveProcessor(PROCESSOR_TRAX);
-                } catch (Throwable e1) {
-                    e1.printStackTrace();
+                } catch (Exception e1) { // should not happen
                     handleError(e1);
                 }
             }

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Zip.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Zip.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Zip.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/Zip.java Mon May  3 17:44:21 2010
@@ -1026,7 +1026,7 @@ public class Zip extends MatchingTask {
                 try {
                     is = zf.getInputStream(ze);
                     zipFile(is, zOut, prefix + name, ze.getTime(),
-                            fromArchive, mode, ze.getExtraFields());
+                            fromArchive, mode, ze.getExtraFields(true));
                 } finally {
                     doCompress = oldCompress;
                     FileUtils.close(is);
@@ -1723,7 +1723,7 @@ public class Zip extends MatchingTask {
         throws IOException {
         // fromArchive is used in subclasses overriding this method
 
-        if (entries.contains(vPath)) {
+        if (entries.containsKey(vPath)) {
 
             if (duplicate.equals("preserve")) {
                 logWhenWriting(vPath + " already added, skipping",

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java Mon May  3 17:44:21 2010
@@ -101,7 +101,7 @@ public final class CompilerAdapterFactor
             if (compilerType.equalsIgnoreCase("jikes")) {
                 return new Jikes();
             }
-            if (compilerType.equalsIgnoreCase("extJavac")) {
+            if (compilerType.equalsIgnoreCase("extjavac")) {
                 return new JavacExternal();
             }
             if (compilerType.equalsIgnoreCase("classic")

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/condition/Equals.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/condition/Equals.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/condition/Equals.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/condition/Equals.java Mon May  3 17:44:21 2010
@@ -32,6 +32,7 @@ public class Equals implements Condition
     private boolean trim = false;
     private boolean caseSensitive = true;
     private int args;
+    private boolean forcestring = false;
 
     /**
      * Set the first argument
@@ -107,6 +108,16 @@ public class Equals implements Condition
     }
 
     /**
+     * Set whether to force string comparisons for non-equal, non-string objects.
+     * This allows object properties (legal in Ant 1.8.x+) to be compared as strings.
+     * @param forcestring value to set
+     * @since Ant 1.8.1
+     */
+    public void setForcestring(boolean forcestring) {
+        this.forcestring = forcestring;
+    }
+
+    /**
      * @return true if the two strings are equal
      * @exception BuildException if the attributes are not set correctly
      */
@@ -114,7 +125,13 @@ public class Equals implements Condition
         if ((args & REQUIRED) != REQUIRED) {
             throw new BuildException("both arg1 and arg2 are required in equals");
         }
-
+        if (arg1 == arg2 || arg1 != null && arg1.equals(arg2)) {
+            return true;
+        }
+        if (forcestring) {
+            arg1 = arg1 == null || arg1 instanceof String ? arg1 : arg1.toString();
+            arg2 = arg2 == null || arg2 instanceof String ? arg2 : arg2.toString();
+        }
         if (arg1 instanceof String && trim) {
             arg1 = ((String) arg1).trim();
         }
@@ -126,6 +143,6 @@ public class Equals implements Condition
             String s2 = (String) arg2;
             return caseSensitive ? s1.equals(s2) : s1.equalsIgnoreCase(s2);
         }
-        return arg1 == arg2 || arg1 != null && arg1.equals(arg2);
+        return false;
     }
 }

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/condition/Http.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/condition/Http.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/condition/Http.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/condition/Http.java Mon May  3 17:44:21 2010
@@ -70,12 +70,12 @@ public class Http extends ProjectCompone
      *               such as "GET", "HEAD", "TRACE", etc. The default
      *               if not specified is "GET".
      *
-     * @see java.net.HttpURLConnection#setRequestMethod()
+     * @see java.net.HttpURLConnection#setRequestMethod
      * @since Ant 1.8.0
      */
     public void setRequestMethod(String method) {
         this.requestMethod = method == null ? DEFAULT_REQUEST_METHOD
-            : method.toUpperCase(Locale.US);
+            : method.toUpperCase(Locale.ENGLISH);
     }
 
     /**

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/condition/Os.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/condition/Os.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/condition/Os.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/condition/Os.java Mon May  3 17:44:21 2010
@@ -29,11 +29,11 @@ import org.apache.tools.ant.BuildExcepti
  */
 public class Os implements Condition {
     private static final String OS_NAME =
-        System.getProperty("os.name").toLowerCase(Locale.US);
+        System.getProperty("os.name").toLowerCase(Locale.ENGLISH);
     private static final String OS_ARCH =
-        System.getProperty("os.arch").toLowerCase(Locale.US);
+        System.getProperty("os.arch").toLowerCase(Locale.ENGLISH);
     private static final String OS_VERSION =
-        System.getProperty("os.version").toLowerCase(Locale.US);
+        System.getProperty("os.version").toLowerCase(Locale.ENGLISH);
     private static final String PATH_SEP =
         System.getProperty("path.separator");
 
@@ -142,7 +142,7 @@ public class Os implements Condition {
      *               </ul>
      */
     public void setFamily(String f) {
-        family = f.toLowerCase(Locale.US);
+        family = f.toLowerCase(Locale.ENGLISH);
     }
 
     /**
@@ -151,7 +151,7 @@ public class Os implements Condition {
      * @param name   The OS name
      */
     public void setName(String name) {
-        this.name = name.toLowerCase(Locale.US);
+        this.name = name.toLowerCase(Locale.ENGLISH);
     }
 
     /**
@@ -160,7 +160,7 @@ public class Os implements Condition {
      * @param arch   The OS architecture
      */
     public void setArch(String arch) {
-        this.arch = arch.toLowerCase(Locale.US);
+        this.arch = arch.toLowerCase(Locale.ENGLISH);
     }
 
     /**
@@ -169,7 +169,7 @@ public class Os implements Condition {
      * @param version   The OS version
      */
     public void setVersion(String version) {
-        this.version = version.toLowerCase(Locale.US);
+        this.version = version.toLowerCase(Locale.ENGLISH);
     }
 
     /**

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/defaults.properties
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/defaults.properties?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/defaults.properties (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/defaults.properties Mon May  3 17:44:21 2010
@@ -20,6 +20,7 @@ antstructure=org.apache.tools.ant.taskde
 antversion=org.apache.tools.ant.taskdefs.condition.AntVersion
 apply=org.apache.tools.ant.taskdefs.Transform
 apt=org.apache.tools.ant.taskdefs.Apt
+augment=org.apache.tools.ant.taskdefs.AugmentReference
 available=org.apache.tools.ant.taskdefs.Available
 basename=org.apache.tools.ant.taskdefs.Basename
 buildnumber=org.apache.tools.ant.taskdefs.BuildNumber
@@ -195,7 +196,6 @@ stcheckin=org.apache.tools.ant.taskdefs.
 stcheckout=org.apache.tools.ant.taskdefs.optional.starteam.StarTeamCheckout
 stlabel=org.apache.tools.ant.taskdefs.optional.starteam.StarTeamLabel
 stlist=org.apache.tools.ant.taskdefs.optional.starteam.StarTeamList
-stylebook=org.apache.tools.ant.taskdefs.optional.StyleBook
 symlink=org.apache.tools.ant.taskdefs.optional.unix.Symlink
 telnet=org.apache.tools.ant.taskdefs.optional.net.TelnetTask
 translate=org.apache.tools.ant.taskdefs.optional.i18n.Translate

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/email/Message.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/email/Message.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/email/Message.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/email/Message.java Mon May  3 17:44:21 2010
@@ -141,7 +141,7 @@ public class Message extends ProjectComp
             }
             out.flush();
         } finally {
-            FileUtils.close(out);
+            //do not close the out writer as it is reused afterwards by the mail task
         }
     }
 

Modified: ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java
URL: http://svn.apache.org/viewvc/ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java?rev=940531&r1=940530&r2=940531&view=diff
==============================================================================
--- ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java (original)
+++ ant/core/branches/run-single-test-method/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java Mon May  3 17:44:21 2010
@@ -26,11 +26,12 @@ import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.UnsupportedEncodingException;
 
-import java.util.Vector;
+import java.util.Enumeration;
 import java.util.Iterator;
+import java.util.Locale;
 import java.util.Properties;
-import java.util.Enumeration;
 import java.util.StringTokenizer;
+import java.util.Vector;
 
 import java.security.Provider;
 import java.security.Security;
@@ -100,7 +101,7 @@ public class MimeMailer extends Mailer {
         }
 
         public void setContentType(String type) {
-            this.type = type.toLowerCase();
+            this.type = type.toLowerCase(Locale.ENGLISH);
         }
 
         public String getContentType() {