http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java 
b/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java
index 8fce71e..0902e55 100644
--- a/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java
+++ b/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java
@@ -18,6 +18,7 @@
 package org.apache.tools.ant.taskdefs;
 
 import java.io.File;
+import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.EnumMap;
@@ -32,7 +33,6 @@ import javax.xml.xpath.XPathConstants;
 import javax.xml.xpath.XPathExpression;
 import javax.xml.xpath.XPathExpressionException;
 import javax.xml.xpath.XPathFactory;
-import javax.xml.xpath.XPathVariableResolver;
 
 import org.apache.tools.ant.AntClassLoader;
 import org.apache.tools.ant.BuildException;
@@ -71,6 +71,15 @@ import org.apache.tools.ant.util.StringUtils;
  */
 
 public class XSLTProcess extends MatchingTask implements XSLTLogger {
+    /**
+     * The default processor is trax
+     * @since Ant 1.7
+     */
+    public static final String PROCESSOR_TRAX = "trax";
+
+    /** Utilities used for file operations */
+    private static final FileUtils FILE_UTILS = FileUtils.getFileUtils();
+
     /** destination directory */
     private File destDir = null;
 
@@ -93,7 +102,7 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
     private String fileDirParameter = null;
 
     /** additional parameters to be passed to the stylesheets */
-    private final List<Param> params = new ArrayList<Param>();
+    private final List<Param> params = new ArrayList<>();
 
     /** Input XML document to be used */
     private File inFile = null;
@@ -119,14 +128,11 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
     private boolean force = false;
 
     /** XSL output properties to be used */
-    private final Vector outputProperties = new Vector();
+    private final List<OutputProperty> outputProperties = new Vector<>();
 
     /** for resolving entities such as dtds */
     private final XMLCatalog xmlCatalog = new XMLCatalog();
 
-    /** Utilities used for file operations */
-    private static final FileUtils FILE_UTILS = FileUtils.getFileUtils();
-
     /**
      * Whether to style all files in the included directories as well.
      *
@@ -180,12 +186,6 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
     private boolean useImplicitFileset = true;
 
     /**
-     * The default processor is trax
-     * @since Ant 1.7
-     */
-    public static final String PROCESSOR_TRAX = "trax";
-
-    /**
      * whether to suppress warnings.
      *
      * @since Ant 1.8.0
@@ -243,12 +243,6 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
     private TraceConfiguration traceConfiguration;
 
     /**
-     * Creates a new XSLTProcess Task.
-     */
-    public XSLTProcess() {
-    } //-- XSLTProcess
-
-    /**
      * Whether to style all files in the included directories as well;
      * optional, default is true.
      *
@@ -303,8 +297,8 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
      */
     public void addConfiguredStyle(final Resources rc) {
         if (rc.size() != 1) {
-            handleError("The style element must be specified with exactly one"
-                        + " nested resource.");
+            handleError(
+                "The style element must be specified with exactly one nested 
resource.");
         } else {
             setXslResource(rc.iterator().next());
         }
@@ -345,13 +339,8 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
         }
         final File savedBaseDir = baseDir;
 
-        DirectoryScanner scanner;
-        String[]         list;
-        String[]         dirs;
-
         final String baseMessage =
-            "specify the stylesheet either as a filename in style attribute "
-            + "or as a nested resource";
+            "specify the stylesheet either as a filename in style attribute or 
as a nested resource";
 
         if (xslResource == null && xslFile == null) {
             handleError(baseMessage);
@@ -395,8 +384,7 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
                      * the wrong version has been used.
                      */
                     if (alternative.exists()) {
-                        log("DEPRECATED - the 'style' attribute should be "
-                            + "relative to the project's");
+                        log("DEPRECATED - the 'style' attribute should be 
relative to the project's");
                         log("             basedir, not the tasks's basedir.");
                         stylesheet = alternative;
                     }
@@ -427,33 +415,30 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
             //-- make sure destination directory exists...
             checkDest();
 
+
             if (useImplicitFileset) {
-                scanner = getDirectoryScanner(baseDir);
+                DirectoryScanner scanner = getDirectoryScanner(baseDir);
                 log("Transforming into " + destDir, Project.MSG_INFO);
 
                 // Process all the files marked for styling
-                list = scanner.getIncludedFiles();
-                for (int i = 0; i < list.length; ++i) {
-                    process(baseDir, list[i], destDir, styleResource);
+                for (String element : scanner.getIncludedFiles()) {
+                    process(baseDir, element, destDir, styleResource);
                 }
                 if (performDirectoryScan) {
                     // Process all the directories marked for styling
-                    dirs = scanner.getIncludedDirectories();
-                    for (int j = 0; j < dirs.length; ++j) {
-                        list = new File(baseDir, dirs[j]).list();
-                        for (int i = 0; i < list.length; ++i) {
-                            process(baseDir, dirs[j] + File.separator + 
list[i], destDir,
+                    for (String dir : scanner.getIncludedDirectories()) {
+                        for (String element : new File(baseDir, dir).list()) {
+                            process(baseDir, dir + File.separator + element, 
destDir,
                                     styleResource);
                         }
                     }
                 }
-            } else { // only resource collections, there better be some
-                if (resources.size() == 0) {
-                    if (failOnNoResources) {
-                        handleError("no resources specified");
-                    }
-                    return;
+            } else if (resources.isEmpty()) {
+                // only resource collections, there better be some
+                if (failOnNoResources) {
+                    handleError("no resources specified");
                 }
+                return;
             }
             processResources(styleResource);
         } finally {
@@ -678,8 +663,7 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
      */
     public TraceConfiguration createTrace() {
         if (traceConfiguration != null) {
-            throw new BuildException("can't have more than one trace"
-                                     + " configuration");
+            throw new BuildException("can't have more than one trace 
configuration");
         }
         traceConfiguration = new TraceConfiguration();
         return traceConfiguration;
@@ -703,12 +687,12 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
      * @exception Exception if the processor cannot be loaded.
      */
     private void resolveProcessor(final String proc) throws Exception {
-        if (proc.equals(PROCESSOR_TRAX)) {
+        if (PROCESSOR_TRAX.equals(proc)) {
             liaison = new org.apache.tools.ant.taskdefs.optional.TraXLiaison();
         } else {
             //anything else is a classname
-            final Class clazz = loadClass(proc);
-            liaison = (XSLTLiaison) clazz.newInstance();
+            final Class<? extends XSLTLiaison> clazz = 
loadClass(proc).asSubclass(XSLTLiaison.class);
+            liaison = clazz.newInstance();
         }
     }
 
@@ -721,7 +705,7 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
      * @return the requested class.
      * @exception Exception if the class could not be loaded.
      */
-    private Class loadClass(final String classname) throws 
ClassNotFoundException {
+    private Class<?> loadClass(final String classname) throws 
ClassNotFoundException {
         setupLoader();
         if (loader == null) {
             return Class.forName(classname);
@@ -811,29 +795,25 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
             throws BuildException {
 
         File   outF = null;
-        File   inF = null;
 
         try {
             final long styleSheetLastModified = stylesheet.getLastModified();
-            inF = new File(baseDir, xmlFile);
+            File inF = new File(baseDir, xmlFile);
 
             if (inF.isDirectory()) {
                 log("Skipping " + inF + " it is a directory.", 
Project.MSG_VERBOSE);
                 return;
             }
-            FileNameMapper mapper = null;
-            if (mapperElement != null) {
-                mapper = mapperElement.getImplementation();
-            } else {
-                mapper = new StyleMapper();
-            }
+            FileNameMapper mapper = mapperElement == null ? new StyleMapper()
+                : mapperElement.getImplementation();
 
             final String[] outFileName = mapper.mapFileName(xmlFile);
             if (outFileName == null || outFileName.length == 0) {
                 log("Skipping " + inFile + " it cannot get mapped to output.", 
Project.MSG_VERBOSE);
                 return;
-            } else if (outFileName.length > 1) {
-                log("Skipping " + inFile + " its mapping is ambiguos.", 
Project.MSG_VERBOSE);
+            }
+            if (outFileName.length > 1) {
+                log("Skipping " + inFile + " its mapping is ambiguous.", 
Project.MSG_VERBOSE);
                 return;
             }
             outF = new File(destDir, outFileName[0]);
@@ -931,8 +911,8 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
      * Get an enumeration on the outputproperties.
      * @return the outputproperties
      */
-    public Enumeration getOutputProperties() {
-        return outputProperties.elements();
+    public Enumeration<OutputProperty> getOutputProperties() {
+        return Collections.enumeration(outputProperties);
     }
 
     /**
@@ -1175,7 +1155,7 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
      */
     public OutputProperty createOutputProperty() {
         final OutputProperty p = new OutputProperty();
-        outputProperties.addElement(p);
+        outputProperties.add(p);
         return p;
     }
 
@@ -1236,11 +1216,8 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
 
         xpathFactory = XPathFactory.newInstance();
         xpath = xpathFactory.newXPath();
-        xpath.setXPathVariableResolver(new XPathVariableResolver() {
-            public Object resolveVariable(final QName variableName) {
-                return getProject().getProperty(variableName.toString());
-            }
-        });
+        xpath.setXPathVariableResolver(
+            variableName -> getProject().getProperty(variableName.toString()));
     }
 
     /**
@@ -1300,16 +1277,15 @@ public class XSLTProcess extends MatchingTask 
implements XSLTLogger {
                 if (p.shouldUse()) {
                     final Object evaluatedParam = evaluateParam(p);
                     if (liaison instanceof XSLTLiaison4) {
-                        ((XSLTLiaison4)liaison).addParam(p.getName(), 
evaluatedParam);
+                        ((XSLTLiaison4) liaison).addParam(p.getName(),
+                            evaluatedParam);
+                    } else if (evaluatedParam == null || evaluatedParam 
instanceof String) {
+                        liaison.addParam(p.getName(), (String)evaluatedParam);
                     } else {
-                        if (evaluatedParam == null || evaluatedParam 
instanceof String) {
-                            liaison.addParam(p.getName(), 
(String)evaluatedParam);
-                        } else {
-                            log("XSLTLiaison '" + liaison.getClass().getName()
-                                    + "' supports only String parameters. 
Converting parameter '" + p.getName()
-                                    + "' to its String value '" + 
evaluatedParam, Project.MSG_WARN);
-                            liaison.addParam(p.getName(), 
String.valueOf(evaluatedParam));
-                        }
+                        log("XSLTLiaison '" + liaison.getClass().getName()
+                                + "' supports only String parameters. 
Converting parameter '" + p.getName()
+                                + "' to its String value '" + evaluatedParam, 
Project.MSG_WARN);
+                        liaison.addParam(p.getName(), 
String.valueOf(evaluatedParam));
                     }
                 }
             }
@@ -1336,7 +1312,7 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
 
         ParamType type;
 
-        if (typeName == null || "".equals(typeName)) {
+        if (typeName == null || typeName.isEmpty()) {
             type = ParamType.STRING; // String is default
         } else {
             try {
@@ -1361,11 +1337,10 @@ public class XSLTProcess extends MatchingTask 
implements XSLTLogger {
                 final QName xpathType = ParamType.XPATH_TYPES.get(type);
                 if (xpathType == null) {
                     throw new IllegalArgumentException("Invalid XSLT parameter 
type: " + typeName);
-                } else {
-                    final XPathExpression xpe = xpath.compile(expression);
-                    // null = evaluate XPath on empty XML document
-                    return xpe.evaluate((Object) null, xpathType);
                 }
+                final XPathExpression xpe = xpath.compile(expression);
+                // null = evaluate XPath on empty XML document
+                return xpe.evaluate((Object) null, xpathType);
         }
     }
 
@@ -1432,9 +1407,8 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
     protected void handleError(final Throwable ex) {
         if (failOnError) {
             throw new BuildException(ex);
-        } else {
-            log("Caught an exception: " + ex, Project.MSG_WARN);
         }
+        log("Caught an exception: " + ex, Project.MSG_WARN);
     }
 
     /**
@@ -1447,10 +1421,9 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
     protected void handleTransformationError(final Exception ex) {
         if (failOnError && failOnTransformationError) {
             throw new BuildException(ex);
-        } else {
-            log("Caught an error during transformation: " + ex,
-                Project.MSG_WARN);
         }
+        log("Caught an error during transformation: " + ex,
+            Project.MSG_WARN);
     }
 
     /**
@@ -1465,12 +1438,12 @@ public class XSLTProcess extends MatchingTask 
implements XSLTLogger {
         /**
          * the list of factory attributes to use for TraXLiaison
          */
-        private final List<Attribute> attributes = new ArrayList<Attribute>();
+        private final List<Attribute> attributes = new ArrayList<>();
 
         /**
          * the list of factory features to use for TraXLiaison
          */
-        private final List<Feature> features = new ArrayList<Feature>();
+        private final List<Feature> features = new ArrayList<>();
 
         /**
          * @return the name of the factory.
@@ -1499,7 +1472,7 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
          * return the attribute elements.
          * @return the enumeration of attributes
          */
-        public Enumeration getAttributes() {
+        public Enumeration<Attribute> getAttributes() {
             return Collections.enumeration(attributes);
         }
 
@@ -1528,8 +1501,7 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
          *  <li>http://xml.apache.org/xalan/features/incremental (true|false) 
</li>
          * </ul>
          */
-        public static class Attribute
-            extends ProjectComponent
+        public static class Attribute extends ProjectComponent
             implements DynamicConfigurator {
 
             /** attribute name, mostly processor specific */
@@ -1558,6 +1530,7 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
              * @return null
              * @throws BuildException never
              */
+            @Override
             public Object createDynamicElement(final String name) throws 
BuildException {
                 return null;
             }
@@ -1569,6 +1542,7 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
              * @param value the value of the attribute
              * @throws BuildException on error
              */
+            @Override
             public void setDynamicAttribute(final String name, final String 
value) throws BuildException {
                 // only 'name' and 'value' exist.
                 if ("name".equalsIgnoreCase(name)) {
@@ -1582,7 +1556,7 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
                         this.value = Boolean.FALSE;
                     } else {
                         try {
-                            this.value = new Integer(value);
+                            this.value = Integer.valueOf(value);
                         } catch (final NumberFormatException e) {
                             this.value = value;
                         }
@@ -1595,7 +1569,7 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
                                                              new 
Reference(getProject(),
                                                                            
value));
                 } else {
-                    throw new BuildException("Unsupported attribute: " + name);
+                    throw new BuildException("Unsupported attribute: %s", 
name);
                 }
             }
         } // -- class Attribute
@@ -1608,7 +1582,9 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
             private String name;
             private boolean value;
 
-            public Feature() { }
+            public Feature() {
+            }
+
             public Feature(String name, boolean value) {
                 this.name = name;
                 this.value = value;
@@ -1654,10 +1630,15 @@ public class XSLTProcess extends MatchingTask 
implements XSLTLogger {
      * @since Ant 1.6.2
      */
     private class StyleMapper implements FileNameMapper {
+        @Override
         public void setFrom(final String from) {
         }
+
+        @Override
         public void setTo(final String to) {
         }
+
+        @Override
         public String[] mapFileName(String xmlFile) {
             final int dotPos = xmlFile.lastIndexOf('.');
             if (dotPos > 0) {
@@ -1758,7 +1739,7 @@ public class XSLTProcess extends MatchingTask implements 
XSLTLogger {
         /**
          * The stream to write traces to.
          */
-        public java.io.OutputStream getOutputStream() {
+        public OutputStream getOutputStream() {
             return new LogOutputStream(XSLTProcess.this);
         }
     }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/taskdefs/XmlProperty.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/XmlProperty.java 
b/src/main/org/apache/tools/ant/taskdefs/XmlProperty.java
index ffd89d1..9ebfc83 100644
--- a/src/main/org/apache/tools/ant/taskdefs/XmlProperty.java
+++ b/src/main/org/apache/tools/ant/taskdefs/XmlProperty.java
@@ -19,7 +19,9 @@ package org.apache.tools.ant.taskdefs;
 
 import java.io.File;
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.Hashtable;
+import java.util.Map;
 
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -175,19 +177,6 @@ import org.xml.sax.SAXException;
  * @ant.task name="xmlproperty" category="xml"
  */
 public class XmlProperty extends org.apache.tools.ant.Task {
-
-    private Resource src;
-    private String prefix = "";
-    private boolean keepRoot = true;
-    private boolean validate = false;
-    private boolean collapseAttributes = false;
-    private boolean semanticAttributes = false;
-    private boolean includeSemanticAttribute = false;
-    private File rootDirectory = null;
-    private Hashtable addedAttributes = new Hashtable();
-    private XMLCatalog xmlCatalog = new XMLCatalog();
-    private String delimiter = ",";
-
     private static final String ID = "id";
     private static final String REF_ID = "refid";
     private static final String LOCATION = "location";
@@ -200,17 +189,22 @@ public class XmlProperty extends 
org.apache.tools.ant.Task {
 
     private static final FileUtils FILE_UTILS = FileUtils.getFileUtils();
 
-    /**
-     * Constructor.
-     */
-    public XmlProperty() {
-        super();
-    }
+    private Resource src;
+    private String prefix = "";
+    private boolean keepRoot = true;
+    private boolean validate = false;
+    private boolean collapseAttributes = false;
+    private boolean semanticAttributes = false;
+    private boolean includeSemanticAttribute = false;
+    private File rootDirectory = null;
+    private Map<String, String> addedAttributes = new Hashtable<>();
+    private XMLCatalog xmlCatalog = new XMLCatalog();
+    private String delimiter = ",";
 
     /**
      * Initializes the task.
      */
-
+    @Override
     public void init() {
         super.init();
         xmlCatalog.setProject(getProject());
@@ -229,6 +223,7 @@ public class XmlProperty extends org.apache.tools.ant.Task {
      * @todo validate the source file is valid before opening, print a better 
error message
      * @todo add a verbose level log message listing the name of the file 
being loaded
      */
+    @Override
     public void execute() throws BuildException {
         Resource r = getResource();
 
@@ -245,7 +240,7 @@ public class XmlProperty extends org.apache.tools.ant.Task {
               factory.setNamespaceAware(false);
               DocumentBuilder builder = factory.newDocumentBuilder();
               builder.setEntityResolver(getEntityResolver());
-              Document document = null;
+              Document document;
               FileProvider fp = src.as(FileProvider.class);
               if (fp != null) {
                   document = builder.parse(fp.getFile());
@@ -258,7 +253,7 @@ public class XmlProperty extends org.apache.tools.ant.Task {
               // This task is allow to override its own properties
               // but not other properties.  So we need to keep track
               // of which properties we've added.
-              addedAttributes = new Hashtable();
+              addedAttributes = new Hashtable<>();
 
               if (keepRoot) {
                   addNodeRecursively(topElement, prefix, null);
@@ -377,23 +372,23 @@ public class XmlProperty extends 
org.apache.tools.ant.Task {
                      * semantic meaning) then deal with it
                      * appropriately.
                      */
-                    if (nodeName.equals(ID)) {
+                    if (ID.equals(nodeName)) {
                         // ID has already been found above.
                         continue;
                     }
-                    if (containingPath != null && nodeName.equals(PATH)) {
+                    if (containingPath != null && PATH.equals(nodeName)) {
                         // A "path" attribute for a node within a Path object.
                         containingPath.setPath(attributeValue);
                     } else if (containingPath != null
-                               && container instanceof Path && 
nodeName.equals(REF_ID)) {
+                               && container instanceof Path && 
REF_ID.equals(nodeName)) {
                         // A "refid" attribute for a node within a Path object.
                         containingPath.setPath(attributeValue);
                     } else if (containingPath != null && container instanceof 
Path
-                               && nodeName.equals(LOCATION)) {
+                               && LOCATION.equals(nodeName)) {
                         // A "location" attribute for a node within a
                         // Path object.
                         
containingPath.setLocation(resolveFile(attributeValue));
-                    } else if (nodeName.equals(PATHID)) {
+                    } else if (PATHID.equals(nodeName)) {
                         // A node identifying a new path
                         if (container != null) {
                             throw new BuildException("XmlProperty does not 
support nested paths");
@@ -429,7 +424,7 @@ public class XmlProperty extends org.apache.tools.ant.Task {
                 && node.getFirstChild().getNodeType() == 
Node.CDATA_SECTION_NODE) {
 
             nodeText = node.getFirstChild().getNodeValue();
-            if ("".equals(nodeText) && !semanticEmptyOverride) {
+            if (nodeText.isEmpty() && !semanticEmptyOverride) {
                 emptyNode = true;
             }
         } else if (node.getNodeType() == Node.ELEMENT_NODE
@@ -440,7 +435,7 @@ public class XmlProperty extends org.apache.tools.ant.Task {
         } else if (node.getNodeType() == Node.ELEMENT_NODE
                && node.getChildNodes().getLength() == 1
                && node.getFirstChild().getNodeType() == Node.TEXT_NODE
-               && "".equals(node.getFirstChild().getNodeValue())
+               && node.getFirstChild().getNodeValue().isEmpty()
                && !semanticEmptyOverride) {
             nodeText = "";
             emptyNode = true;
@@ -450,7 +445,7 @@ public class XmlProperty extends org.apache.tools.ant.Task {
             if (semanticAttributes && id == null && container instanceof 
String) {
                 id = (String) container;
             }
-            if (nodeText.trim().length() != 0 || emptyNode) {
+            if (!nodeText.trim().isEmpty() || emptyNode) {
                 addProperty(prefix, nodeText, id);
             }
         }
@@ -458,7 +453,7 @@ public class XmlProperty extends org.apache.tools.ant.Task {
         // children to reference if needed.  Path objects are
         // definitely used by child path elements, and ID may be used
         // for a child text node.
-        return (addedPath != null ? addedPath : id);
+        return addedPath != null ? addedPath : id;
     }
 
     /**
@@ -481,7 +476,7 @@ public class XmlProperty extends org.apache.tools.ant.Task {
             // when we read them, though (instead of keeping them
             // outside of the project and batch adding them at the end)
             // to allow other properties to reference them.
-            value = (String) addedAttributes.get(name) + getDelimiter() + 
value;
+            value = addedAttributes.get(name) + getDelimiter() + value;
             getProject().setProperty(name, value);
             addedAttributes.put(name, value);
         } else if (getProject().getProperty(name) == null) {
@@ -508,7 +503,7 @@ public class XmlProperty extends org.apache.tools.ant.Task {
         if (semanticAttributes) {
             // Never include the "refid" attribute as part of the
             // attribute name.
-            if (attributeName.equals(REF_ID)) {
+            if (REF_ID.equals(attributeName)) {
                 return "";
             }
             // Otherwise, return it appended unless property to hide it is set.
@@ -524,12 +519,7 @@ public class XmlProperty extends org.apache.tools.ant.Task 
{
      * Return whether the provided attribute name is recognized or not.
      */
     private static boolean isSemanticAttribute (String attributeName) {
-        for (int i = 0; i < ATTRIBUTES.length; i++) {
-            if (attributeName.equals(ATTRIBUTES[i])) {
-                return true;
-            }
-        }
-        return false;
+        return Arrays.asList(ATTRIBUTES).contains(attributeName);
     }
 
     /**
@@ -549,11 +539,11 @@ public class XmlProperty extends 
org.apache.tools.ant.Task {
         if (semanticAttributes) {
             String attributeName = attributeNode.getNodeName();
             nodeValue = getProject().replaceProperties(nodeValue);
-            if (attributeName.equals(LOCATION)) {
+            if (LOCATION.equals(attributeName)) {
                 File f = resolveFile(nodeValue);
                 return f.getPath();
             }
-            if (attributeName.equals(REF_ID)) {
+            if (REF_ID.equals(attributeName)) {
                 Object ref = getProject().getReference(nodeValue);
                 if (ref != null) {
                     return ref.toString();

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/taskdefs/Zip.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/Zip.java 
b/src/main/org/apache/tools/ant/taskdefs/Zip.java
index 1a17bfc..ff72014 100644
--- a/src/main/org/apache/tools/ant/taskdefs/Zip.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Zip.java
@@ -28,12 +28,13 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
-import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Hashtable;
+import java.util.List;
 import java.util.Map;
 import java.util.Stack;
 import java.util.Vector;
+import java.util.stream.Stream;
 import java.util.zip.CRC32;
 
 import org.apache.tools.ant.BuildException;
@@ -43,7 +44,6 @@ import org.apache.tools.ant.Project;
 import org.apache.tools.ant.types.ArchiveFileSet;
 import org.apache.tools.ant.types.EnumeratedAttribute;
 import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.types.PatternSet;
 import org.apache.tools.ant.types.Resource;
 import org.apache.tools.ant.types.ResourceCollection;
 import org.apache.tools.ant.types.ZipFileSet;
@@ -84,13 +84,24 @@ public class Zip extends MatchingTask {
     private static final int ROUNDUP_MILLIS = ZIP_FILE_TIMESTAMP_GRANULARITY - 
1;
     // CheckStyle:VisibilityModifier OFF - bc
 
+    private static final FileUtils FILE_UTILS = FileUtils.getFileUtils();
+
+    // For directories:
+    private static final long EMPTY_CRC = new CRC32 ().getValue ();
+
+    private static final ResourceSelector MISSING_SELECTOR =
+            target -> !target.isExists();
+
+    private static final ResourceUtils.ResourceSelectorProvider
+        MISSING_DIR_PROVIDER = sr -> MISSING_SELECTOR;
+
     protected File zipFile;
     // use to scan own archive
     private ZipScanner zs;
     private File baseDir;
-    protected Hashtable<String, String> entries = new Hashtable<String, 
String>();
-    private final Vector<FileSet> groupfilesets = new Vector<FileSet>();
-    private final Vector<ZipFileSet> filesetsFromGroupfilesets = new 
Vector<ZipFileSet>();
+    protected Hashtable<String, String> entries = new Hashtable<>();
+    private final List<FileSet> groupfilesets = new Vector<>();
+    private final List<ZipFileSet> filesetsFromGroupfilesets = new Vector<>();
     protected String duplicate = "add";
     private boolean doCompress = true;
     private boolean doUpdate = false;
@@ -99,27 +110,10 @@ public class Zip extends MatchingTask {
     private boolean doFilesonly = false;
     protected String archiveType = "zip";
 
-    // For directories:
-    private static final long EMPTY_CRC = new CRC32 ().getValue ();
     protected String emptyBehavior = "skip";
-    private final Vector<ResourceCollection> resources = new 
Vector<ResourceCollection>();
-    protected Hashtable<String, String> addedDirs = new Hashtable<String, 
String>();
-    private final Vector<String> addedFiles = new Vector<String>();
-
-    private static final ResourceSelector MISSING_SELECTOR =
-        new ResourceSelector() {
-            public boolean isSelected(final Resource target) {
-                return !target.isExists();
-            }
-        };
-
-    private static final ResourceUtils.ResourceSelectorProvider
-        MISSING_DIR_PROVIDER = new ResourceUtils.ResourceSelectorProvider() {
-                public ResourceSelector
-                    getTargetSelectorForSource(final Resource sr) {
-                    return MISSING_SELECTOR;
-                }
-            };
+    private final List<ResourceCollection> resources = new Vector<>();
+    protected Hashtable<String, String> addedDirs = new Hashtable<>();
+    private final List<String> addedFiles = new Vector<>();
 
     /**
      * If this flag is true, execute() will run most operations twice,
@@ -152,8 +146,6 @@ public class Zip extends MatchingTask {
         return !doubleFilePass || skipWriting;
     }
 
-    private static final FileUtils FILE_UTILS = FileUtils.getFileUtils();
-
     // CheckStyle:VisibilityModifier ON
 
     // This boolean is set if the task detects that the
@@ -363,7 +355,7 @@ public class Zip extends MatchingTask {
      * @param set the group (a fileset) to add
      */
     public void addZipGroupFileset(final FileSet set) {
-        groupfilesets.addElement(set);
+        groupfilesets.add(set);
     }
 
     /**
@@ -390,7 +382,7 @@ public class Zip extends MatchingTask {
          */
         @Override
         public String[] getValues() {
-            return new String[] {"fail", "skip", "create"};
+            return new String[] { "fail", "skip", "create" };
         }
     }
 
@@ -627,20 +619,17 @@ public class Zip extends MatchingTask {
         processGroupFilesets();
 
         // collect filesets to pass them to getResourcesToAdd
-        final Vector<ResourceCollection> vfss = new 
Vector<ResourceCollection>();
+        final List<ResourceCollection> vfss = new ArrayList<>();
         if (baseDir != null) {
-            final FileSet fs = (FileSet) getImplicitFileSet().clone();
+            final FileSet fs = getImplicitFileSet().clone();
             fs.setDir(baseDir);
-            vfss.addElement(fs);
-        }
-        final int size = resources.size();
-        for (int i = 0; i < size; i++) {
-            final ResourceCollection rc = resources.elementAt(i);
-            vfss.addElement(rc);
+            vfss.add(fs);
         }
+        vfss.addAll(resources);
+
+        final ResourceCollection[] fss =
+            vfss.toArray(new ResourceCollection[vfss.size()]);
 
-        final ResourceCollection[] fss = new ResourceCollection[vfss.size()];
-        vfss.copyInto(fss);
         boolean success = false;
         try {
             // can also handle empty archives
@@ -654,8 +643,9 @@ public class Zip extends MatchingTask {
             final File parent = zipFile.getParentFile();
             if (parent != null && !parent.isDirectory()
                 && !(parent.mkdirs() || parent.isDirectory())) {
-                throw new BuildException("Failed to create missing parent"
-                                         + " directory for " + zipFile);
+                throw new BuildException(
+                    "Failed to create missing parent directory for %s",
+                    zipFile);
             }
 
             updatedFile = true;
@@ -706,32 +696,25 @@ public class Zip extends MatchingTask {
                     oldFiles.setSrc(renamedFile);
                     oldFiles.setDefaultexcludes(false);
 
-                    final int addSize = addedFiles.size();
-                    for (int i = 0; i < addSize; i++) {
-                        final PatternSet.NameEntry ne = 
oldFiles.createExclude();
-                        ne.setName(addedFiles.elementAt(i));
+                    for (String addedFile : addedFiles) {
+                        oldFiles.createExclude().setName(addedFile);
                     }
                     final DirectoryScanner ds =
                         oldFiles.getDirectoryScanner(getProject());
                     ((ZipScanner) ds).setEncoding(encoding);
 
-                    final String[] f = ds.getIncludedFiles();
-                    Resource[] r = new Resource[f.length];
-                    for (int i = 0; i < f.length; i++) {
-                        r[i] = ds.getResource(f[i]);
-                    }
+                    Stream<String> includedResourceNames =
+                        Stream.of(ds.getIncludedFiles());
 
                     if (!doFilesonly) {
-                        final String[] d = ds.getIncludedDirectories();
-                        final Resource[] dr = new Resource[d.length];
-                        for (int i = 0; i < d.length; i++) {
-                            dr[i] = ds.getResource(d[i]);
-                        }
-                        final Resource[] tmp = r;
-                        r = new Resource[tmp.length + dr.length];
-                        System.arraycopy(dr, 0, r, 0, dr.length);
-                        System.arraycopy(tmp, 0, r, dr.length, tmp.length);
+                        includedResourceNames =
+                            Stream.concat(includedResourceNames,
+                                Stream.of(ds.getIncludedDirectories()));
                     }
+
+                    Resource[] r = includedResourceNames.map(ds::getResource)
+                        .toArray(Resource[]::new);
+
                     addResources(oldFiles, r, zOut);
                 }
                 if (zOut != null) {
@@ -783,16 +766,10 @@ public class Zip extends MatchingTask {
             "zip", ".tmp", zipFile.getParentFile(), true, false);
         try {
             FILE_UTILS.rename(zipFile, renamedFile);
-        } catch (final SecurityException e) {
-            throw new BuildException(
-                "Not allowed to rename old file ("
-                + zipFile.getAbsolutePath()
-                + ") to temporary file");
-        } catch (final IOException e) {
+        } catch (final SecurityException | IOException e) {
             throw new BuildException(
-                "Unable to rename old file ("
-                + zipFile.getAbsolutePath()
-                + ") to temporary file");
+                "Unable to rename old file (%s) to temporary file",
+                zipFile.getAbsolutePath());
         }
         return renamedFile;
     }
@@ -823,24 +800,23 @@ public class Zip extends MatchingTask {
 
     /** Check the attributes and elements */
     private void checkAttributesAndElements() {
-        if (baseDir == null && resources.size() == 0
-            && groupfilesets.size() == 0 && "zip".equals(archiveType)) {
-            throw new BuildException("basedir attribute must be set, "
-                                     + "or at least one "
-                                     + "resource collection must be given!");
+        if (baseDir == null && resources.isEmpty() && groupfilesets.isEmpty()
+            && "zip".equals(archiveType)) {
+            throw new BuildException(
+                "basedir attribute must be set, or at least one resource 
collection must be given!");
         }
 
         if (zipFile == null) {
-            throw new BuildException("You must specify the "
-                                     + archiveType + " file to create!");
+            throw new BuildException("You must specify the %s file to create!",
+                archiveType);
         }
 
         if (zipFile.exists() && !zipFile.isFile()) {
-            throw new BuildException(zipFile + " is not a file.");
+            throw new BuildException("%s is not a file.", zipFile);
         }
 
         if (zipFile.exists() && !zipFile.canWrite()) {
-            throw new BuildException(zipFile + " is read-only.");
+            throw new BuildException("%s is read-only.", zipFile);
         }
     }
 
@@ -858,23 +834,18 @@ public class Zip extends MatchingTask {
     /** Process groupfilesets */
     private void processGroupFilesets() {
         // Add the files found in groupfileset to fileset
-        final int size = groupfilesets.size();
-        for (int i = 0; i < size; i++) {
-
+        for (FileSet fs : groupfilesets) {
             logWhenWriting("Processing groupfileset ", Project.MSG_VERBOSE);
-            final FileSet fs = groupfilesets.elementAt(i);
             final FileScanner scanner = fs.getDirectoryScanner(getProject());
-            final String[] files = scanner.getIncludedFiles();
             final File basedir = scanner.getBasedir();
-            for (int j = 0; j < files.length; j++) {
-
-                logWhenWriting("Adding file " + files[j] + " to fileset",
+            for (String file : scanner.getIncludedFiles()) {
+                logWhenWriting("Adding file " + file + " to fileset",
                                Project.MSG_VERBOSE);
                 final ZipFileSet zf = new ZipFileSet();
                 zf.setProject(getProject());
-                zf.setSrc(new File(basedir, files[j]));
+                zf.setSrc(new File(basedir, file));
                 add(zf);
-                filesetsFromGroupfilesets.addElement(zf);
+                filesetsFromGroupfilesets.add(zf);
             }
         }
     }
@@ -918,17 +889,16 @@ public class Zip extends MatchingTask {
         }
 
         if (prefix.length() > 0 && fullpath.length() > 0) {
-            throw new BuildException("Both prefix and fullpath attributes must"
-                                     + " not be set on the same fileset.");
+            throw new BuildException(
+                "Both prefix and fullpath attributes must not be set on the 
same fileset.");
         }
 
         if (resources.length != 1 && fullpath.length() > 0) {
-            throw new BuildException("fullpath attribute may only be specified"
-                                     + " for filesets that specify a single"
-                                     + " file.");
+            throw new BuildException(
+                "fullpath attribute may only be specified for filesets that 
specify a single file.");
         }
 
-        if (prefix.length() > 0) {
+        if (!prefix.isEmpty()) {
             if (!prefix.endsWith("/") && !prefix.endsWith("\\")) {
                 prefix += "/";
             }
@@ -947,26 +917,26 @@ public class Zip extends MatchingTask {
                 zf = new ZipFile(zfs.getSrc(getProject()), encoding);
             }
 
-            for (int i = 0; i < resources.length; i++) {
-                String name = null;
-                if (fullpath.length() > 0) {
-                    name = fullpath;
+            for (Resource resource : resources) {
+                String name;
+                if (fullpath.isEmpty()) {
+                    name = resource.getName();
                 } else {
-                    name = resources[i].getName();
+                    name = fullpath;
                 }
                 name = name.replace(File.separatorChar, '/');
 
-                if ("".equals(name)) {
+                if (name.isEmpty()) {
                     continue;
                 }
 
-                if (resources[i].isDirectory()) {
+                if (resource.isDirectory()) {
                     if (doFilesonly) {
                         continue;
                     }
                     final int thisDirMode = zfs != null && 
zfs.hasDirModeBeenSet()
-                        ? dirMode : getUnixMode(resources[i], zf, dirMode);
-                    addDirectoryResource(resources[i], name, prefix,
+                        ? dirMode : getUnixMode(resource, zf, dirMode);
+                    addDirectoryResource(resource, name, prefix,
                                          base, zOut,
                                          dirMode, thisDirMode);
 
@@ -976,14 +946,14 @@ public class Zip extends MatchingTask {
 
                     if (dealingWithFiles) {
                         final File f = FILE_UTILS.resolveFile(base,
-                                                        
resources[i].getName());
+                                                        resource.getName());
                         zipFile(f, zOut, prefix + name, fileMode);
                     } else {
                         final int thisFileMode =
                             zfs != null && zfs.hasFileModeBeenSet()
-                            ? fileMode : getUnixMode(resources[i], zf,
+                            ? fileMode : getUnixMode(resource, zf,
                                                      fileMode);
-                        addResource(resources[i], name, prefix,
+                        addResource(resource, name, prefix,
                                     zOut, thisFileMode, zf,
                                     zfs == null
                                     ? null : zfs.getSrc(getProject()));
@@ -1011,7 +981,7 @@ public class Zip extends MatchingTask {
             name = name + "/";
         }
 
-        final int nextToLastSlash = name.lastIndexOf("/", name.length() - 2);
+        final int nextToLastSlash = name.lastIndexOf('/', name.length() - 2);
         if (nextToLastSlash != -1) {
             addParentDirs(base, name.substring(0, nextToLastSlash + 1),
                           zOut, prefix, defaultDirMode);
@@ -1057,25 +1027,18 @@ public class Zip extends MatchingTask {
                 if (keepCompression) {
                     doCompress = (ze.getMethod() == ZipEntry.DEFLATED);
                 }
-                InputStream is = null;
-                try {
-                    is = zf.getInputStream(ze);
+                try (InputStream is = zf.getInputStream(ze)) {
                     zipFile(is, zOut, prefix + name, ze.getTime(),
                             fromArchive, mode, ze.getExtraFields(true));
                 } finally {
                     doCompress = oldCompress;
-                    FileUtils.close(is);
                 }
             }
         } else {
-            InputStream is = null;
-            try {
-                is = r.getInputStream();
+            try (InputStream is = r.getInputStream()) {
                 zipFile(is, zOut, prefix + name, r.getLastModified(),
                         fromArchive, mode, r instanceof ZipResource
                         ? ((ZipResource) r).getExtraFields() : null);
-            } finally {
-                FileUtils.close(is);
             }
         }
     }
@@ -1099,15 +1062,14 @@ public class Zip extends MatchingTask {
             addResources((FileSet) rc, resources, zOut);
             return;
         }
-        for (int i = 0; i < resources.length; i++) {
-            final Resource resource = resources[i];
+        for (final Resource resource : resources) {
             String name = resource.getName();
             if (name == null) {
                 continue;
             }
             name = name.replace(File.separatorChar, '/');
 
-            if ("".equals(name)) {
+            if (name.isEmpty()) {
                 continue;
             }
             if (resource.isDirectory() && doFilesonly) {
@@ -1174,9 +1136,7 @@ public class Zip extends MatchingTask {
             log("Note: creating empty " + archiveType + " archive " + zipFile,
                 Project.MSG_INFO);
         }
-        OutputStream os = null;
-        try {
-            os = Files.newOutputStream(zipFile.toPath());
+        try (OutputStream os = Files.newOutputStream(zipFile.toPath())) {
             // CheckStyle:MagicNumber OFF
             // Cf. PKZIP specification.
             final byte[] empty = new byte[22];
@@ -1191,8 +1151,6 @@ public class Zip extends MatchingTask {
             throw new BuildException("Could not create empty ZIP archive "
                                      + "(" + ioe.getMessage() + ")", ioe,
                                      getLocation());
-        } finally {
-            FileUtils.close(os);
         }
         return true;
     }
@@ -1241,13 +1199,13 @@ public class Zip extends MatchingTask {
                                              final File zipFile,
                                              final boolean needsUpdate)
         throws BuildException {
-        final ArrayList<ResourceCollection> filesets = new 
ArrayList<ResourceCollection>();
-        final ArrayList<ResourceCollection> rest = new 
ArrayList<ResourceCollection>();
-        for (int i = 0; i < rcs.length; i++) {
-            if (rcs[i] instanceof FileSet) {
-                filesets.add(rcs[i]);
+        final List<ResourceCollection> filesets = new ArrayList<>();
+        final List<ResourceCollection> rest = new ArrayList<>();
+        for (ResourceCollection rc : rcs) {
+            if (rc instanceof FileSet) {
+                filesets.add(rc);
             } else {
-                rest.add(rcs[i]);
+                rest.add(rc);
             }
         }
         final ResourceCollection[] rc =
@@ -1349,7 +1307,7 @@ public class Zip extends MatchingTask {
                     return new ArchiveState(true, initialResources);
                 }
 
-                if (emptyBehavior.equals("skip")) {
+                if ("skip".equals(emptyBehavior)) {
                     if (doUpdate) {
                         logWhenWriting(archiveType + " archive " + zipFile
                                        + " not updated because no new files 
were"
@@ -1360,7 +1318,7 @@ public class Zip extends MatchingTask {
                                        + " because no files were included.",
                                        Project.MSG_WARN);
                     }
-                } else if (emptyBehavior.equals("fail")) {
+                } else if ("fail".equals(emptyBehavior)) {
                     throw new BuildException("Cannot create " + archiveType
                                              + " archive " + zipFile
                                              + ": no files were included.",
@@ -1521,8 +1479,8 @@ public class Zip extends MatchingTask {
                 final FileProvider fp =
                     initialResources[i][j].as(FileProvider.class);
                 if (fp != null && zipFile.equals(fp.getFile())) {
-                    throw new BuildException("A zip file cannot include "
-                                             + "itself", getLocation());
+                    throw new BuildException("A zip file cannot include 
itself",
+                        getLocation());
                 }
             }
 
@@ -1559,8 +1517,8 @@ public class Zip extends MatchingTask {
                 ResourceUtils.selectSources(this, u, mapper,
                                             getZipScanner(),
                                             MISSING_DIR_PROVIDER);
-            if (rc.size() > 0) {
-                final ArrayList<Resource> newer = new ArrayList<Resource>();
+            if (!rc.isEmpty()) {
+                final List<Resource> newer = new ArrayList<>();
                 newer.addAll(Arrays.asList(((Union) rc).listResources()));
                 newer.addAll(Arrays.asList(result));
                 result = newer.toArray(result);
@@ -1583,32 +1541,28 @@ public class Zip extends MatchingTask {
             boolean skipEmptyNames = true;
             if (filesets[i] instanceof ZipFileSet) {
                 final ZipFileSet zfs = (ZipFileSet) filesets[i];
-                skipEmptyNames = zfs.getPrefix(getProject()).equals("")
-                    && zfs.getFullpath(getProject()).equals("");
+                skipEmptyNames = zfs.getPrefix(getProject()).isEmpty()
+                    && zfs.getFullpath(getProject()).isEmpty();
             }
             final DirectoryScanner rs =
                 filesets[i].getDirectoryScanner(getProject());
             if (rs instanceof ZipScanner) {
                 ((ZipScanner) rs).setEncoding(encoding);
             }
-            final Vector<Resource> resources = new Vector<Resource>();
+            final List<Resource> resources = new Vector<>();
             if (!doFilesonly) {
-                final String[] directories = rs.getIncludedDirectories();
-                for (int j = 0; j < directories.length; j++) {
-                    if (!"".equals(directories[j]) || !skipEmptyNames) {
-                        resources.addElement(rs.getResource(directories[j]));
+                for (String d : rs.getIncludedDirectories()) {
+                    if (!(d.isEmpty() && skipEmptyNames)) {
+                        resources.add(rs.getResource(d));
                     }
                 }
             }
-            final String[] files = rs.getIncludedFiles();
-            for (int j = 0; j < files.length; j++) {
-                if (!"".equals(files[j]) || !skipEmptyNames) {
-                    resources.addElement(rs.getResource(files[j]));
+            for (String f : rs.getIncludedFiles()) {
+                if (!(f.isEmpty() && skipEmptyNames)) {
+                    resources.add(rs.getResource(f));
                 }
             }
-
-            result[i] = new Resource[resources.size()];
-            resources.copyInto(result[i]);
+            result[i] = resources.toArray(new Resource[resources.size()]);
         }
         return result;
     }
@@ -1624,25 +1578,19 @@ public class Zip extends MatchingTask {
     protected Resource[][] grabNonFileSetResources(final ResourceCollection[] 
rcs) {
         final Resource[][] result = new Resource[rcs.length][];
         for (int i = 0; i < rcs.length; i++) {
-            final ArrayList<Resource> dirs = new ArrayList<Resource>();
-            final ArrayList<Resource> files = new ArrayList<Resource>();
+            final List<Resource> dirs = new ArrayList<>();
+            final List<Resource> files = new ArrayList<>();
             for (final Resource r : rcs[i]) {
-                if (r.isExists()) {
-                    if (r.isDirectory()) {
-                        dirs.add(r);
-                    } else {
-                        files.add(r);
-                    }
+                if (r.isDirectory()) {
+                    dirs.add(r);
+                } else if (r.isExists()) {
+                    files.add(r);
                 }
             }
             // make sure directories are in alpha-order - this also
             // ensures parents come before their children
-            Collections.sort(dirs, new Comparator<Resource>() {
-                    public int compare(final Resource r1, final Resource r2) {
-                        return r1.getName().compareTo(r2.getName());
-                    }
-                });
-            final ArrayList<Resource> rs = new ArrayList<Resource>(dirs);
+            Collections.sort(dirs, Comparator.comparing(Resource::getName));
+            final List<Resource> rs = new ArrayList<>(dirs);
             rs.addAll(files);
             result[i] = rs.toArray(new Resource[rs.size()]);
         }
@@ -1677,8 +1625,8 @@ public class Zip extends MatchingTask {
     protected void zipDir(final File dir, final ZipOutputStream zOut, final 
String vPath,
                           final int mode, final ZipExtraField[] extra)
         throws IOException {
-        zipDir(dir == null ? (Resource) null : new FileResource(dir),
-               zOut, vPath, mode, extra);
+        zipDir(dir == null ? null : new FileResource(dir), zOut, vPath, mode,
+            extra);
     }
 
     /**
@@ -1739,7 +1687,7 @@ public class Zip extends MatchingTask {
      * support a new parameter (extra fields to preserve) without
      * breaking subclasses that override the old method signature.
      */
-    private static final ThreadLocal<ZipExtraField[]> CURRENT_ZIP_EXTRA = new 
ThreadLocal<ZipExtraField[]>();
+    private static final ThreadLocal<ZipExtraField[]> CURRENT_ZIP_EXTRA = new 
ThreadLocal<>();
 
     /**
      * Provides the extra fields for the zip entry currently being
@@ -1781,19 +1729,19 @@ public class Zip extends MatchingTask {
 
         if (entries.containsKey(vPath)) {
 
-            if (duplicate.equals("preserve")) {
+            if ("preserve".equals(duplicate)) {
                 logWhenWriting(vPath + " already added, skipping",
                                Project.MSG_INFO);
                 return;
-            } else if (duplicate.equals("fail")) {
-                throw new BuildException("Duplicate file " + vPath
-                                         + " was found and the duplicate "
-                                         + "attribute is 'fail'.");
-            } else {
-                // duplicate equal to add, so we continue
-                logWhenWriting("duplicate file " + vPath
-                               + " found, adding.", Project.MSG_VERBOSE);
             }
+            if ("fail".equals(duplicate)) {
+                throw new BuildException(
+                    "Duplicate file %s was found and the duplicate attribute 
is 'fail'.",
+                    vPath);
+            }
+            // duplicate equal to add, so we continue
+            logWhenWriting("duplicate file " + vPath
+                           + " found, adding.", Project.MSG_VERBOSE);
         } else {
             logWhenWriting("adding entry " + vPath, Project.MSG_VERBOSE);
         }
@@ -1861,7 +1809,7 @@ public class Zip extends MatchingTask {
                 count = in.read(buffer, 0, buffer.length);
             } while (count != -1);
         }
-        addedFiles.addElement(vPath);
+        addedFiles.add(vPath);
     }
 
     /**
@@ -1937,7 +1885,7 @@ public class Zip extends MatchingTask {
                                        final int dirMode)
         throws IOException {
         if (!doFilesonly) {
-            final Stack<String> directories = new Stack<String>();
+            final Stack<String> directories = new Stack<>();
             int slashPos = entry.length();
 
             while ((slashPos = entry.lastIndexOf('/', slashPos - 1)) != -1) {
@@ -1950,7 +1898,7 @@ public class Zip extends MatchingTask {
 
             while (!directories.isEmpty()) {
                 final String dir = directories.pop();
-                File f = null;
+                File f;
                 if (baseDir != null) {
                     f = new File(baseDir, dir);
                 } else {
@@ -1977,16 +1925,12 @@ public class Zip extends MatchingTask {
      */
     protected void cleanUp() {
         addedDirs.clear();
-        addedFiles.removeAllElements();
+        addedFiles.clear();
         entries.clear();
         addingNewFiles = false;
         doUpdate = savedDoUpdate;
-        final Enumeration<ZipFileSet> e = filesetsFromGroupfilesets.elements();
-        while (e.hasMoreElements()) {
-            final ZipFileSet zf = e.nextElement();
-            resources.removeElement(zf);
-        }
-        filesetsFromGroupfilesets.removeAllElements();
+        filesetsFromGroupfilesets.forEach(resources::remove);
+        filesetsFromGroupfilesets.clear();
         HAVE_NON_FILE_SET_RESOURCES_TO_ADD.set(Boolean.FALSE);
     }
 
@@ -1999,10 +1943,10 @@ public class Zip extends MatchingTask {
      * @see #cleanUp
      */
     public void reset() {
-        resources.removeAllElements();
+        resources.clear();
         zipFile = null;
         baseDir = null;
-        groupfilesets.removeAllElements();
+        groupfilesets.clear();
         duplicate = "add";
         archiveType = "zip";
         doCompress = true;
@@ -2020,8 +1964,8 @@ public class Zip extends MatchingTask {
      * @since Ant 1.5.2
      */
     protected static final boolean isEmpty(final Resource[][] r) {
-        for (int i = 0; i < r.length; i++) {
-            if (r[i].length > 0) {
+        for (Resource[] element : r) {
+            if (element.length > 0) {
                 return false;
             }
         }
@@ -2036,19 +1980,18 @@ public class Zip extends MatchingTask {
      */
     protected Resource[] selectFileResources(final Resource[] orig) {
         return selectResources(orig,
-                               new ResourceSelector() {
-                                   public boolean isSelected(final Resource r) 
{
-                                       if (!r.isDirectory()) {
-                                           return true;
-                                       } else if (doFilesonly) {
-                                           logWhenWriting("Ignoring directory "
-                                                          + r.getName()
-                                                          + " as only files 
will"
-                                                          + " be added.",
-                                                          Project.MSG_VERBOSE);
-                                       }
-                                       return false;
+                               r -> {
+                                   if (!r.isDirectory()) {
+                                       return true;
+                                   }
+                                   if (doFilesonly) {
+                                       logWhenWriting("Ignoring directory "
+                                                      + r.getName()
+                                                      + " as only files will"
+                                                      + " be added.",
+                                                      Project.MSG_VERBOSE);
                                    }
+                                   return false;
                                });
     }
 
@@ -2059,12 +2002,7 @@ public class Zip extends MatchingTask {
      * @since Ant 1.8.0
      */
     protected Resource[] selectDirectoryResources(final Resource[] orig) {
-        return selectResources(orig,
-                               new ResourceSelector() {
-                                   public boolean isSelected(final Resource r) 
{
-                                       return r.isDirectory();
-                                   }
-                               });
+        return selectResources(orig, Resource::isDirectory);
     }
 
     /**
@@ -2078,18 +2016,9 @@ public class Zip extends MatchingTask {
         if (orig.length == 0) {
             return orig;
         }
-
-        final ArrayList<Resource> v = new ArrayList<Resource>(orig.length);
-        for (int i = 0; i < orig.length; i++) {
-            if (selector.isSelected(orig[i])) {
-                v.add(orig[i]);
-            }
-        }
-
-        if (v.size() != orig.length) {
-            return v.toArray(new Resource[v.size()]);
-        }
-        return orig;
+        Resource[] result = Stream.of(orig).filter(selector::isSelected)
+            .toArray(Resource[]::new);
+        return result.length == orig.length ? orig : result;
     }
 
     /**
@@ -2115,7 +2044,7 @@ public class Zip extends MatchingTask {
         /** {@inheritDoc} */
         @Override
         public String[] getValues() {
-            return new String[] {"add", "preserve", "fail"};
+            return new String[] { "add", "preserve", "fail" };
         }
     }
 
@@ -2158,11 +2087,9 @@ public class Zip extends MatchingTask {
             if (resourcesToAdd == null)  {
                 return true;
             }
-            for (int counter = 0; counter < resourcesToAdd.length; counter++) {
-                if (resourcesToAdd[counter] != null) {
-                    if (resourcesToAdd[counter].length > 0) {
-                        return false;
-                    }
+            for (Resource[] element : resourcesToAdd) {
+                if (element != null && element.length > 0) {
+                    return false;
                 }
             }
             return true;
@@ -2176,7 +2103,7 @@ public class Zip extends MatchingTask {
      * @since Ant 1.8.0
      */
     public static final class UnicodeExtraField extends EnumeratedAttribute {
-        private static final Map<String, UnicodeExtraFieldPolicy> POLICIES = 
new HashMap<String, UnicodeExtraFieldPolicy>();
+        private static final Map<String, UnicodeExtraFieldPolicy> POLICIES = 
new HashMap<>();
         private static final String NEVER_KEY = "never";
         private static final String ALWAYS_KEY = "always";
         private static final String N_E_KEY = "not-encodeable";
@@ -2210,7 +2137,6 @@ public class Zip extends MatchingTask {
         }
     }
 
-
     /**
      * The choices for Zip64 extensions.
      *
@@ -2238,7 +2164,7 @@ public class Zip extends MatchingTask {
      * @since Ant 1.9.1
      */
     public static final class Zip64ModeAttribute extends EnumeratedAttribute {
-        private static final Map<String, Zip64Mode> MODES = new 
HashMap<String, Zip64Mode>();
+        private static final Map<String, Zip64Mode> MODES = new HashMap<>();
 
         private static final String NEVER_KEY = "never";
         private static final String ALWAYS_KEY = "always";
@@ -2251,7 +2177,7 @@ public class Zip extends MatchingTask {
 
         @Override
         public String[] getValues() {
-            return new String[] {NEVER_KEY, ALWAYS_KEY, A_N_KEY};
+            return new String[] { NEVER_KEY, ALWAYS_KEY, A_N_KEY };
         }
 
         public static final Zip64ModeAttribute NEVER =

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java
----------------------------------------------------------------------
diff --git 
a/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java 
b/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java
index 8712715..a1fe5c8 100644
--- 
a/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java
+++ 
b/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java
@@ -96,69 +96,59 @@ public final class CompilerAdapterFactory {
      * @since Ant 1.8.0
      */
     public static CompilerAdapter getCompiler(String compilerType, Task task,
-                                              Path classpath)
-        throws BuildException {
-            if (compilerType.equalsIgnoreCase("jikes")) {
-                return new Jikes();
-            }
-            if (compilerType.equalsIgnoreCase("extjavac")) {
-                return new JavacExternal();
-            }
-            if (compilerType.equalsIgnoreCase("classic")
-                || compilerType.equalsIgnoreCase("javac1.1")
-                || compilerType.equalsIgnoreCase("javac1.2")) {
-                task.log("This version of java does "
-                                         + "not support the classic "
-                                         + "compiler; upgrading to modern",
-                                         Project.MSG_WARN);
-                compilerType = "modern";
-            }
-            //on java<=1.3 the modern falls back to classic if it is not found
-            //but on java>=1.4 we just bail out early
-            if (compilerType.equalsIgnoreCase("modern")
-                || compilerType.equalsIgnoreCase("javac1.3")
-                || compilerType.equalsIgnoreCase("javac1.4")
-                || compilerType.equalsIgnoreCase("javac1.5")
-                || compilerType.equalsIgnoreCase("javac1.6")
-                || compilerType.equalsIgnoreCase("javac1.7")
-                || compilerType.equalsIgnoreCase("javac1.8")
-                || compilerType.equalsIgnoreCase("javac1.9")
-                || compilerType.equalsIgnoreCase("javac9")) {
-                // does the modern compiler exist?
-                if (doesModernCompilerExist()) {
-                    return new Javac13();
-                } else {
-                    throw new BuildException("Unable to find a javac "
-                                             + "compiler;\n"
-                                             + MODERN_COMPILER
-                                             + " is not on the "
-                                             + "classpath.\n"
-                                             + "Perhaps JAVA_HOME does not"
-                                             + " point to the JDK.\n"
-                            + "It is currently set to \""
-                            + JavaEnvUtils.getJavaHome()
-                            + "\"");
-                }
+        Path classpath) throws BuildException {
+        if ("jikes".equalsIgnoreCase(compilerType)) {
+            return new Jikes();
+        }
+        if ("extjavac".equalsIgnoreCase(compilerType)) {
+            return new JavacExternal();
+        }
+        if ("classic".equalsIgnoreCase(compilerType)
+            || "javac1.1".equalsIgnoreCase(compilerType)
+            || "javac1.2".equalsIgnoreCase(compilerType)) {
+            task.log(
+                "This version of java does not support the classic compiler; 
upgrading to modern",
+                Project.MSG_WARN);
+            compilerType = "modern";
+        }
+        //on java<=1.3 the modern falls back to classic if it is not found
+        //but on java>=1.4 we just bail out early
+        if ("modern".equalsIgnoreCase(compilerType)
+            || "javac1.3".equalsIgnoreCase(compilerType)
+            || "javac1.4".equalsIgnoreCase(compilerType)
+            || "javac1.5".equalsIgnoreCase(compilerType)
+            || "javac1.6".equalsIgnoreCase(compilerType)
+            || "javac1.7".equalsIgnoreCase(compilerType)
+            || "javac1.8".equalsIgnoreCase(compilerType)
+            || "javac1.9".equalsIgnoreCase(compilerType)
+            || "javac9".equalsIgnoreCase(compilerType)) {
+            // does the modern compiler exist?
+            if (doesModernCompilerExist()) {
+                return new Javac13();
             }
+            throw new BuildException(
+                "Unable to find a javac compiler;\n%s is not on the 
classpath.\nPerhaps JAVA_HOME does not point to the JDK.\nIt is currently set 
to \"%s\"",
+                MODERN_COMPILER, JavaEnvUtils.getJavaHome());
+        }
 
-            if (compilerType.equalsIgnoreCase("jvc")
-                || compilerType.equalsIgnoreCase("microsoft")) {
-                return new Jvc();
-            }
-            if (compilerType.equalsIgnoreCase("kjc")) {
-                return new Kjc();
-            }
-            if (compilerType.equalsIgnoreCase("gcj")) {
-                return new Gcj();
-            }
-            if (compilerType.equalsIgnoreCase("sj")
-                || compilerType.equalsIgnoreCase("symantec")) {
-                return new Sj();
-            }
-            return resolveClassName(compilerType,
-                                    // Memory-Leak in line below
-                                
task.getProject().createClassLoader(classpath));
+        if ("jvc".equalsIgnoreCase(compilerType)
+            || "microsoft".equalsIgnoreCase(compilerType)) {
+            return new Jvc();
         }
+        if ("kjc".equalsIgnoreCase(compilerType)) {
+            return new Kjc();
+        }
+        if ("gcj".equalsIgnoreCase(compilerType)) {
+            return new Gcj();
+        }
+        if ("sj".equalsIgnoreCase(compilerType)
+            || "symantec".equalsIgnoreCase(compilerType)) {
+            return new Sj();
+        }
+        return resolveClassName(compilerType,
+            // Memory-Leak in line below
+            task.getProject().createClassLoader(classpath));
+    }
 
     /**
      * query for the Modern compiler existing
@@ -194,7 +184,7 @@ public final class CompilerAdapterFactory {
     private static CompilerAdapter resolveClassName(String className,
                                                     ClassLoader loader)
         throws BuildException {
-        return (CompilerAdapter) ClasspathUtils.newInstance(className,
+        return ClasspathUtils.newInstance(className,
                 loader != null ? loader :
                 CompilerAdapterFactory.class.getClassLoader(),
                 CompilerAdapter.class);

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
----------------------------------------------------------------------
diff --git 
a/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java 
b/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
index 82373a9..f33c4a5 100644
--- 
a/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
+++ 
b/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
@@ -18,13 +18,13 @@
 
 package org.apache.tools.ant.taskdefs.compilers;
 
-//Java5 style
-//import static org.apache.tools.ant.util.StringUtils.LINE_SEP;
-
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Location;
@@ -61,6 +61,10 @@ public abstract class DefaultCompilerAdapter
 
     private static final FileUtils FILE_UTILS = FileUtils.getFileUtils();
 
+    //must keep for subclass BC, though unused:
+    // CheckStyle:ConstantNameCheck OFF - bc
+    protected static final String lSep = StringUtils.LINE_SEP;
+
     protected Path src;
     protected File destDir;
     protected String encoding;
@@ -88,10 +92,6 @@ public abstract class DefaultCompilerAdapter
     protected File[] compileList;
     protected Javac attributes;
 
-    //must keep for subclass BC, though unused:
-    // CheckStyle:ConstantNameCheck OFF - bc
-    protected static final String lSep = StringUtils.LINE_SEP;
-
     // CheckStyle:ConstantNameCheck ON
     // CheckStyle:VisibilityModifier ON
 
@@ -101,6 +101,7 @@ public abstract class DefaultCompilerAdapter
      *
      * @param attributes a configured Javac task.
      */
+    @Override
     public void setJavac(final Javac attributes) {
         this.attributes = attributes;
         src = attributes.getSrcdir();
@@ -147,8 +148,9 @@ public abstract class DefaultCompilerAdapter
      * but specialized compilers can recognize multiple kinds
      * of files.
      */
+    @Override
     public String[] getSupportedFileExtensions() {
-        return new String[] {"java"};
+        return new String[] { "java" };
     }
 
     /**
@@ -254,7 +256,7 @@ public abstract class DefaultCompilerAdapter
         final Path classpath = getCompileClasspath();
         // For -sourcepath, use the "sourcepath" value if present.
         // Otherwise default to the "srcdir" value.
-        Path sourcepath = null;
+        Path sourcepath;
         if (compileSourcepath != null) {
             sourcepath = compileSourcepath;
         } else {
@@ -264,9 +266,9 @@ public abstract class DefaultCompilerAdapter
         final String memoryParameterPrefix = assumeJava11() ? "-J-" : "-J-X";
         if (memoryInitialSize != null) {
             if (!attributes.isForkedJavac()) {
-                attributes.log("Since fork is false, ignoring "
-                               + "memoryInitialSize setting.",
-                               Project.MSG_WARN);
+                attributes.log(
+                    "Since fork is false, ignoring memoryInitialSize setting.",
+                    Project.MSG_WARN);
             } else {
                 cmd.createArgument().setValue(memoryParameterPrefix
                                               + "ms" + memoryInitialSize);
@@ -275,9 +277,9 @@ public abstract class DefaultCompilerAdapter
 
         if (memoryMaximumSize != null) {
             if (!attributes.isForkedJavac()) {
-                attributes.log("Since fork is false, ignoring "
-                               + "memoryMaximumSize setting.",
-                               Project.MSG_WARN);
+                attributes.log(
+                    "Since fork is false, ignoring memoryMaximumSize setting.",
+                    Project.MSG_WARN);
             } else {
                 cmd.createArgument().setValue(memoryParameterPrefix
                                               + "mx" + memoryMaximumSize);
@@ -303,11 +305,7 @@ public abstract class DefaultCompilerAdapter
         // as well as "bootclasspath" and "extdirs"
         if (assumeJava11()) {
             final Path cp = new Path(project);
-
-            final Path bp = getBootClassPath();
-            if (bp.size() > 0) {
-                cp.append(bp);
-            }
+            Optional.ofNullable(getBootClassPath()).ifPresent(cp::append);
 
             if (extdirs != null) {
                 cp.addExtdirs(extdirs);
@@ -330,13 +328,13 @@ public abstract class DefaultCompilerAdapter
                 }
 
                 final Path bp = getBootClassPath();
-                if (bp.size() > 0) {
+                if (!bp.isEmpty()) {
                     cmd.createArgument().setValue("-bootclasspath");
                     cmd.createArgument().setPath(bp);
                 }
             }
 
-            if (extdirs != null && extdirs.size() > 0) {
+            if (!(extdirs == null || extdirs.isEmpty())) {
                 cmd.createArgument().setValue("-extdirs");
                 cmd.createArgument().setPath(extdirs);
             }
@@ -370,8 +368,9 @@ public abstract class DefaultCompilerAdapter
             } else if (assumeJava12()) {
                 cmd.createArgument().setValue("-Xdepend");
             } else {
-                attributes.log("depend attribute is not supported by the "
-                               + "modern compiler", Project.MSG_WARN);
+                attributes.log(
+                    "depend attribute is not supported by the modern compiler",
+                    Project.MSG_WARN);
             }
         }
 
@@ -397,8 +396,8 @@ public abstract class DefaultCompilerAdapter
             final String s = attributes.getSource();
             if (release == null || !assumeJava19()) {
                 if (release != null) {
-                    attributes.log("Support for javac --release has been added"
-                                   + " in Java9 ignoring it");
+                    attributes.log(
+                        "Support for javac --release has been added in Java9 
ignoring it");
                 }
                 if (s != null) {
                     cmd.createArgument().setValue("-source");
@@ -409,34 +408,34 @@ public abstract class DefaultCompilerAdapter
                 }
             } else { // Java 9+ and release has been set
                 if (t != null || s != null || getBootClassPath().size() > 0) {
-                    attributes.log("Ignoring source, target and bootclasspath"
-                                   + " as release has been set",
-                                   Project.MSG_WARN);
+                    attributes.log(
+                        "Ignoring source, target and bootclasspath as release 
has been set",
+                        Project.MSG_WARN);
                 }
                 cmd.createArgument().setValue("--release");
                 cmd.createArgument().setValue(release);
             }
         }
         final Path msp = getModulesourcepath();
-        if (msp.size() > 0) {
+        if (!msp.isEmpty()) {
             cmd.createArgument().setValue("--module-source-path");
             cmd.createArgument().setPath(msp);
         }
         final Path mp = getModulepath();
-        if (mp.size() > 0) {
+        if (!mp.isEmpty()) {
             cmd.createArgument().setValue("--module-path");
             cmd.createArgument().setPath(mp);
         }
         final Path ump = getUpgrademodulepath();
-        if (ump.size() > 0) {
+        if (!ump.isEmpty()) {
             cmd.createArgument().setValue("--upgrade-module-path");
             cmd.createArgument().setPath(ump);
         }
         if (attributes.getNativeHeaderDir() != null) {
             if (assumeJava13() || assumeJava14() || assumeJava15()
                 || assumeJava16() || assumeJava17()) {
-                attributes.log("Support for javac -h has been added in Java8,"
-                               + " ignoring it");
+                attributes.log(
+                    "Support for javac -h has been added in Java8, ignoring 
it");
             } else {
                 cmd.createArgument().setValue("-h");
                 cmd.createArgument().setFile(attributes.getNativeHeaderDir());
@@ -486,25 +485,19 @@ public abstract class DefaultCompilerAdapter
      */
     protected void logAndAddFilesToCompile(final Commandline cmd) {
         attributes.log("Compilation " + cmd.describeArguments(),
-                       Project.MSG_VERBOSE);
+            Project.MSG_VERBOSE);
 
-        final StringBuffer niceSourceList = new StringBuffer("File");
-        if (compileList.length != 1) {
-            niceSourceList.append("s");
-        }
-        niceSourceList.append(" to be compiled:");
+        attributes.log(
+            String.format("%s to be compiled:",
+                compileList.length == 1 ? "File" : "Files"),
+            Project.MSG_VERBOSE);
 
-        niceSourceList.append(StringUtils.LINE_SEP);
-
-        for (int i = 0; i < compileList.length; i++) {
-            final String arg = compileList[i].getAbsolutePath();
-            cmd.createArgument().setValue(arg);
-            niceSourceList.append("    ");
-            niceSourceList.append(arg);
-            niceSourceList.append(StringUtils.LINE_SEP);
-        }
-
-        attributes.log(niceSourceList.toString(), Project.MSG_VERBOSE);
+        attributes.log(
+            Stream.of(compileList).map(File::getAbsolutePath)
+                .peek(arg -> cmd.createArgument().setValue(arg))
+                .map(arg -> "    " + arg)
+                .collect(Collectors.joining(StringUtils.LINE_SEP)),
+            Project.MSG_VERBOSE);
     }
 
     /**
@@ -554,29 +547,30 @@ public abstract class DefaultCompilerAdapter
              */
             if (Commandline.toString(args).length() > COMMAND_LINE_LIMIT
                 && firstFileName >= 0) {
-                BufferedWriter out = null;
                 try {
                     tmpFile = FILE_UTILS.createTempFile(
                         "files", "", getJavac().getTempdir(), true, true);
-                    out = new BufferedWriter(new FileWriter(tmpFile));
-                    for (int i = firstFileName; i < args.length; i++) {
-                        if (quoteFiles && args[i].indexOf(" ") > -1) {
-                            args[i] = args[i].replace(File.separatorChar, '/');
-                            out.write("\"" + args[i] + "\"");
-                        } else {
-                            out.write(args[i]);
+                    try (BufferedWriter out =
+                        new BufferedWriter(new FileWriter(tmpFile))) {
+                        for (int i = firstFileName; i < args.length; i++) {
+                            if (quoteFiles && args[i].indexOf(' ') > -1) {
+                                args[i] =
+                                    args[i].replace(File.separatorChar, '/');
+                                out.write("\"" + args[i] + "\"");
+                            } else {
+                                out.write(args[i]);
+                            }
+                            out.newLine();
                         }
-                        out.newLine();
+                        out.flush();
+                        commandArray = new String[firstFileName + 1];
+                        System.arraycopy(args, 0, commandArray, 0,
+                            firstFileName);
+                        commandArray[firstFileName] = "@" + tmpFile;
                     }
-                    out.flush();
-                    commandArray = new String[firstFileName + 1];
-                    System.arraycopy(args, 0, commandArray, 0, firstFileName);
-                    commandArray[firstFileName] = "@" + tmpFile;
                 } catch (final IOException e) {
                     throw new BuildException("Error creating temporary file",
                                              e, location);
-                } finally {
-                    FileUtils.close(out);
                 }
             } else {
                 commandArray = args;
@@ -705,6 +699,7 @@ public abstract class DefaultCompilerAdapter
      * @since Ant 1.9.4
      * @deprecated use #assumeJava9 instead
      */
+    @Deprecated
     protected boolean assumeJava19() {
         return assumeJavaXY("javac1.9", JavaEnvUtils.JAVA_9)
             || assumeJavaXY("javac9", JavaEnvUtils.JAVA_9);
@@ -814,24 +809,22 @@ public abstract class DefaultCompilerAdapter
         if (t.startsWith("1.")) {
             t = t.substring(2);
         }
-        return t.equals("1") || t.equals("2") || t.equals("3") || t.equals("4")
-            || ((t.equals("5") || t.equals("6"))
+        return "1".equals(t) || "2".equals(t) || "3".equals(t) || "4".equals(t)
+            || (("5".equals(t) || "6".equals(t))
                 && !assumeJava15() && !assumeJava16())
-            || (t.equals("7") && !assumeJava17())
-            || (t.equals("8") && !assumeJava18())
-            || (t.equals("9") && !assumeJava9());
+            || ("7".equals(t) && !assumeJava17())
+            || ("8".equals(t) && !assumeJava18())
+            || ("9".equals(t) && !assumeJava9());
     }
 
-
     /**
-     * Turn the task's attribute for -source into soemthing that is
+     * Turn the task's attribute for -source into something that is
      * understood by all javac's after 1.4.
      *
      * <p>support for -source 1.1 and -source 1.2 has been added with
      * JDK 1.4.2 but isn't present in 1.5.0+</p>
      */
     private String adjustSourceValue(final String source) {
-        return (source.equals("1.1") || source.equals("1.2")) ? "1.3" : source;
+        return "1.1".equals(source) || "1.2".equals(source) ? "1.3" : source;
     }
 }
-

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/taskdefs/compilers/Gcj.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/compilers/Gcj.java 
b/src/main/org/apache/tools/ant/taskdefs/compilers/Gcj.java
index 3167cc2..b1c60a2 100644
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/Gcj.java
+++ b/src/main/org/apache/tools/ant/taskdefs/compilers/Gcj.java
@@ -31,16 +31,19 @@ import org.apache.tools.ant.types.Path;
  * @since Ant 1.4
  */
 public class Gcj extends DefaultCompilerAdapter {
+    private static final String [] CONFLICT_WITH_DASH_C = {
+        "-o" , "--main=", "-D", "-fjni", "-L"
+    };
 
     /**
      * Performs a compile using the gcj compiler.
      * @return true if the compilation succeeded
      * @throws BuildException on error
      */
+    @Override
     public boolean execute() throws BuildException {
-        Commandline cmd;
         attributes.log("Using gcj compiler", Project.MSG_VERBOSE);
-        cmd = setupGCJCommand();
+        Commandline cmd = setupGCJCommand();
 
         int firstFileName = cmd.size();
         logAndAddFilesToCompile(cmd);
@@ -60,7 +63,7 @@ public class Gcj extends DefaultCompilerAdapter {
         // gcj doesn't support bootclasspath dir (-bootclasspath)
         // so we'll emulate it for compatibility and convenience.
         Path p = getBootClassPath();
-        if (p.size() > 0) {
+        if (!p.isEmpty()) {
             classpath.append(p);
         }
 
@@ -89,8 +92,8 @@ public class Gcj extends DefaultCompilerAdapter {
 
             if (!destDir.exists()
                 && !(destDir.mkdirs() || destDir.isDirectory())) {
-                throw new BuildException("Can't make output directories. "
-                                         + "Maybe permission is wrong. ");
+                throw new BuildException(
+                    "Can't make output directories. Maybe permission is 
wrong.");
             }
         }
 
@@ -153,8 +156,4 @@ public class Gcj extends DefaultCompilerAdapter {
         return nativeBuild;
     }
 
-    private static final String [] CONFLICT_WITH_DASH_C = {
-        "-o" , "--main=", "-D", "-fjni", "-L"
-    };
-
 }

Reply via email to