You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by mb...@apache.org on 2017/04/13 15:16:03 UTC

[03/34] ant git commit: java 5-8

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/FileUtils.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/FileUtils.java b/src/main/org/apache/tools/ant/util/FileUtils.java
index 11ae06b..8bbdf91 100644
--- a/src/main/org/apache/tools/ant/util/FileUtils.java
+++ b/src/main/org/apache/tools/ant/util/FileUtils.java
@@ -37,19 +37,20 @@ import java.nio.file.StandardOpenOption;
 import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Random;
 import java.util.Stack;
 import java.util.StringTokenizer;
 import java.util.Vector;
 import java.util.jar.JarFile;
+import java.util.stream.Collectors;
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.PathTokenizer;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.launch.Locator;
 import org.apache.tools.ant.taskdefs.condition.Os;
+import org.apache.tools.ant.types.FilterChain;
 import org.apache.tools.ant.types.FilterSetCollection;
 import org.apache.tools.ant.types.resources.FileResource;
 
@@ -112,6 +113,7 @@ public class FileUtils {
      *             Use getFileUtils instead,
      * FileUtils do not have state.
      */
+    @Deprecated
     public static FileUtils newFileUtils() {
         return new FileUtils();
     }
@@ -275,7 +277,7 @@ public class FileUtils {
      * @since Ant 1.5
      */
     public void copyFile(String sourceFile, String destFile,
-                         FilterSetCollection filters, Vector filterChains,
+                         FilterSetCollection filters, Vector<FilterChain> filterChains,
                          boolean overwrite, boolean preserveLastModified,
                          String encoding, Project project) throws IOException {
         copyFile(new File(sourceFile), new File(destFile), filters, filterChains, overwrite,
@@ -305,7 +307,7 @@ public class FileUtils {
      * @since Ant 1.6
      */
     public void copyFile(String sourceFile, String destFile,
-                         FilterSetCollection filters, Vector filterChains,
+                         FilterSetCollection filters, Vector<FilterChain> filterChains,
                          boolean overwrite, boolean preserveLastModified,
                          String inputEncoding, String outputEncoding,
                          Project project) throws IOException {
@@ -440,7 +442,7 @@ public class FileUtils {
      * @since Ant 1.5
      */
     public void copyFile(File sourceFile, File destFile,
-                         FilterSetCollection filters, Vector filterChains,
+                         FilterSetCollection filters, Vector<FilterChain> filterChains,
                          boolean overwrite, boolean preserveLastModified,
                          String encoding, Project project) throws IOException {
         copyFile(sourceFile, destFile, filters, filterChains,
@@ -476,7 +478,7 @@ public class FileUtils {
      * @since Ant 1.6
      */
     public void copyFile(File sourceFile, File destFile,
-            FilterSetCollection filters, Vector filterChains,
+            FilterSetCollection filters, Vector<FilterChain> filterChains,
             boolean overwrite, boolean preserveLastModified,
             String inputEncoding, String outputEncoding,
             Project project) throws IOException {
@@ -514,7 +516,7 @@ public class FileUtils {
      * @since Ant 1.8
      */
     public void copyFile(File sourceFile, File destFile,
-                         FilterSetCollection filters, Vector filterChains,
+                         FilterSetCollection filters, Vector<FilterChain> filterChains,
                          boolean overwrite, boolean preserveLastModified,
                          boolean append,
                          String inputEncoding, String outputEncoding,
@@ -554,7 +556,7 @@ public class FileUtils {
      * @since Ant 1.8.2
      */
     public void copyFile(File sourceFile, File destFile,
-                         FilterSetCollection filters, Vector filterChains,
+                         FilterSetCollection filters, Vector<FilterChain> filterChains,
                          boolean overwrite, boolean preserveLastModified,
                          boolean append,
                          String inputEncoding, String outputEncoding,
@@ -698,10 +700,10 @@ public class FileUtils {
      * @see PathTokenizer
      */
     public static String translatePath(String toProcess) {
-        if (toProcess == null || toProcess.length() == 0) {
+        if (toProcess == null || toProcess.isEmpty()) {
             return "";
         }
-        StringBuffer path = new StringBuffer(toProcess.length() + EXPAND_SPACE);
+        StringBuilder path = new StringBuilder(toProcess.length() + EXPAND_SPACE);
         PathTokenizer tokenizer = new PathTokenizer(toProcess);
         while (tokenizer.hasMoreTokens()) {
             String pathComponent = tokenizer.nextToken();
@@ -735,7 +737,7 @@ public class FileUtils {
      * @throws java.lang.NullPointerException if path is null.
      */
     public File normalize(final String path) {
-        Stack s = new Stack();
+        Stack<String> s = new Stack<>();
         String[] dissect = dissect(path);
         s.push(dissect[0]);
 
@@ -755,7 +757,7 @@ public class FileUtils {
                 s.push(thisToken);
             }
         }
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         final int size = s.size();
         for (int i = 0; i < size; i++) {
             if (i > 1) {
@@ -783,7 +785,7 @@ public class FileUtils {
         if (!isAbsolutePath(path)) {
             throw new BuildException(path + " is not an absolute path");
         }
-        String root = null;
+        String root;
         int colon = path.indexOf(':');
         if (colon > 0 && (ON_DOS || ON_NETWARE)) {
 
@@ -836,7 +838,7 @@ public class FileUtils {
                 && !name.regionMatches(true, name.length() - 4, ".DIR", 0, 4);
         // CheckStyle:MagicNumber ON
         String device = null;
-        StringBuffer directory = null;
+        StringBuilder directory = null;
         String file = null;
 
         int index = 0;
@@ -849,13 +851,13 @@ public class FileUtils {
             device = path.substring(1, index++);
         }
         if (isDirectory) {
-            directory = new StringBuffer(path.substring(index).replace(File.separatorChar, '.'));
+            directory = new StringBuilder(path.substring(index).replace(File.separatorChar, '.'));
         } else {
             int dirEnd = path.lastIndexOf(File.separatorChar, path.length());
             if (dirEnd == -1 || dirEnd < index) {
                 file = path.substring(index);
             } else {
-                directory = new StringBuffer(path.substring(index, dirEnd).
+                directory = new StringBuilder(path.substring(index, dirEnd).
                                              replace(File.separatorChar, '.'));
                 index = dirEnd + 1;
                 if (path.length() > index) {
@@ -897,6 +899,7 @@ public class FileUtils {
      * boolean, boolean) instead.
      * @return a File reference to the new, nonexistent temporary file.
      */
+    @Deprecated
     public File createTempFile(String prefix, String suffix, File parentDir) {
         return createTempFile(prefix, suffix, parentDir, false, false);
     }
@@ -926,7 +929,7 @@ public class FileUtils {
      */
     public File createTempFile(String prefix, String suffix, File parentDir,
             boolean deleteOnExit, boolean createFile) {
-        File result = null;
+        File result;
         String parent = (parentDir == null)
                 ? System.getProperty("java.io.tmpdir")
                 : parentDir.getPath();
@@ -987,6 +990,7 @@ public class FileUtils {
      * boolean, boolean) instead.
      * @return a File reference to the new, nonexistent temporary file.
      */
+    @Deprecated
     public File createTempFile(String prefix, String suffix,
             File parentDir, boolean deleteOnExit) {
         return createTempFile(prefix, suffix, parentDir, deleteOnExit, false);
@@ -1032,8 +1036,9 @@ public class FileUtils {
      * @since 1.10
      * @deprecated since 1.7. Just use {@link File#getParentFile} directly.
      */
+    @Deprecated
     public File getParentFile(File f) {
-        return (f == null) ? null : f.getParentFile();
+        return f == null ? null : f.getParentFile();
     }
 
     /**
@@ -1062,17 +1067,17 @@ public class FileUtils {
     public static String readFully(Reader rdr, int bufferSize)
         throws IOException {
         if (bufferSize <= 0) {
-            throw new IllegalArgumentException("Buffer size must be greater "
-                                               + "than 0");
+            throw new IllegalArgumentException(
+                "Buffer size must be greater than 0");
         }
         final char[] buffer = new char[bufferSize];
         int bufferLength = 0;
-        StringBuffer textBuffer = null;
+        StringBuilder textBuffer = null;
         while (bufferLength != -1) {
             bufferLength = rdr.read(buffer);
             if (bufferLength > 0) {
-                textBuffer = (textBuffer == null) ? new StringBuffer() : textBuffer;
-                textBuffer.append(new String(buffer, 0, bufferLength));
+                textBuffer = (textBuffer == null) ? new StringBuilder() : textBuffer;
+                textBuffer.append(buffer, 0, bufferLength);
             }
         }
         return (textBuffer == null) ? null : textBuffer.toString();
@@ -1138,6 +1143,7 @@ public class FileUtils {
      * @since Ant 1.5
      * @deprecated use SymbolicLinkUtils instead
      */
+    @Deprecated
     public boolean isSymbolicLink(File parent, String name)
         throws IOException {
         SymbolicLinkUtils u = SymbolicLinkUtils.getSymbolicLinkUtils();
@@ -1375,11 +1381,8 @@ public class FileUtils {
             return false;
         }
         final String localFileName = localFile.getName();
-        FilenameFilter ff = new FilenameFilter () {
-            public boolean accept(File dir, String name) {
-                return name.equalsIgnoreCase(localFileName) && (!name.equals(localFileName));
-            }
-        };
+        FilenameFilter ff = (dir, name) -> name.equalsIgnoreCase(localFileName)
+            && (!name.equals(localFileName));
         String[] names = localFile.getParentFile().list(ff);
         return names != null && names.length == 1;
     }
@@ -1506,7 +1509,6 @@ public class FileUtils {
                     JarURLConnection juc = (JarURLConnection) conn;
                     JarFile jf = juc.getJarFile();
                     jf.close();
-                    jf = null;
                 } else if (conn instanceof HttpURLConnection) {
                     ((HttpURLConnection) conn).disconnect();
                 }
@@ -1623,7 +1625,7 @@ public class FileUtils {
             // Do nothing
         }
 
-        List relativePathStack = new ArrayList();
+        List<String> relativePathStack = new ArrayList<>();
 
         // if "from" part is longer, fill it up with ".."
         // to reach path which is equal to both paths
@@ -1661,7 +1663,7 @@ public class FileUtils {
      *
      * @since Ant 1.7
      */
-    public static String getPath(List pathStack) {
+    public static String getPath(List<String> pathStack) {
         // can safely use '/' because Windows understands '/' as separator
         return getPath(pathStack, '/');
     }
@@ -1675,18 +1677,8 @@ public class FileUtils {
      *
      * @since Ant 1.7
      */
-    public static String getPath(final List pathStack, final char separatorChar) {
-        final StringBuffer buffer = new StringBuffer();
-
-        final Iterator iter = pathStack.iterator();
-        if (iter.hasNext()) {
-            buffer.append(iter.next());
-        }
-        while (iter.hasNext()) {
-            buffer.append(separatorChar);
-            buffer.append(iter.next());
-        }
-        return buffer.toString();
+    public static String getPath(final List<String> pathStack, final char separatorChar) {
+        return pathStack.stream().collect(Collectors.joining(Character.toString(separatorChar)));
     }
 
     /**
@@ -1700,6 +1692,7 @@ public class FileUtils {
     public String getDefaultEncoding() {
         InputStreamReader is = new InputStreamReader(
             new InputStream() { //NOSONAR
+                @Override
                 public int read() {
                     return -1;
                 }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/FirstMatchMapper.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/FirstMatchMapper.java b/src/main/org/apache/tools/ant/util/FirstMatchMapper.java
index b0e47f2..0b5a53de 100644
--- a/src/main/org/apache/tools/ant/util/FirstMatchMapper.java
+++ b/src/main/org/apache/tools/ant/util/FirstMatchMapper.java
@@ -17,7 +17,7 @@
  */
 package org.apache.tools.ant.util;
 
-import java.util.Iterator;
+import java.util.Objects;
 
 /**
  * A <code>ContainerMapper</code> that returns the results of its
@@ -28,17 +28,11 @@ import java.util.Iterator;
 public class FirstMatchMapper extends ContainerMapper {
 
     /** {@inheritDoc}. */
+    @Override
     public String[] mapFileName(String sourceFileName) {
-        for (Iterator iter = getMappers().iterator(); iter.hasNext();) {
-            FileNameMapper mapper = (FileNameMapper) iter.next();
-            if (mapper != null) {
-                String[] mapped = mapper.mapFileName(sourceFileName);
-                if (mapped != null) {
-                    return mapped;
-                }
-            }
-        }
-        return null;
+        return getMappers().stream().filter(Objects::nonNull)
+            .map(m -> m.mapFileName(sourceFileName)).filter(Objects::nonNull)
+            .findFirst().orElse(null);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/FlatFileNameMapper.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/FlatFileNameMapper.java b/src/main/org/apache/tools/ant/util/FlatFileNameMapper.java
index 420ccc6..8465c78 100644
--- a/src/main/org/apache/tools/ant/util/FlatFileNameMapper.java
+++ b/src/main/org/apache/tools/ant/util/FlatFileNameMapper.java
@@ -32,6 +32,7 @@ public class FlatFileNameMapper implements FileNameMapper {
      * Ignored.
      * @param from ignored.
      */
+    @Override
     public void setFrom(String from) {
     }
 
@@ -39,6 +40,7 @@ public class FlatFileNameMapper implements FileNameMapper {
      * Ignored.
      * @param to ignored.
      */
+    @Override
     public void setTo(String to) {
     }
 
@@ -48,7 +50,8 @@ public class FlatFileNameMapper implements FileNameMapper {
      * @param sourceFileName the name to map.
      * @return the file name in a one-element array.
      */
+    @Override
     public String[] mapFileName(String sourceFileName) {
-        return new String[] {new java.io.File(sourceFileName).getName()};
+        return new String[] { new java.io.File(sourceFileName).getName() };
     }
 }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/GlobPatternMapper.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/GlobPatternMapper.java b/src/main/org/apache/tools/ant/util/GlobPatternMapper.java
index da2a0f1..4d2d5cc 100644
--- a/src/main/org/apache/tools/ant/util/GlobPatternMapper.java
+++ b/src/main/org/apache/tools/ant/util/GlobPatternMapper.java
@@ -107,42 +107,42 @@ public class GlobPatternMapper implements FileNameMapper {
      * Sets the &quot;from&quot; pattern. Required.
      * @param from a string
      */
+    @Override
     public void setFrom(String from) {
-        if (from != null) {
-            int index = from.lastIndexOf("*");
-            if (index == -1) {
-                fromPrefix = from;
-                fromPostfix = "";
-            } else {
-                fromPrefix = from.substring(0, index);
-                fromPostfix = from.substring(index + 1);
-                fromContainsStar = true;
-            }
-            prefixLength = fromPrefix.length();
-            postfixLength = fromPostfix.length();
-        } else {
+        if (from == null) {
             throw new BuildException("this mapper requires a 'from' attribute");
         }
+        int index = from.lastIndexOf('*');
+        if (index < 0) {
+            fromPrefix = from;
+            fromPostfix = "";
+        } else {
+            fromPrefix = from.substring(0, index);
+            fromPostfix = from.substring(index + 1);
+            fromContainsStar = true;
+        }
+        prefixLength = fromPrefix.length();
+        postfixLength = fromPostfix.length();
     }
 
     /**
      * Sets the &quot;to&quot; pattern. Required.
      * @param to a string
      */
+    @Override
     public void setTo(String to) {
-        if (to != null) {
-            int index = to.lastIndexOf("*");
-            if (index == -1) {
-                toPrefix = to;
-                toPostfix = "";
-            } else {
-                toPrefix = to.substring(0, index);
-                toPostfix = to.substring(index + 1);
-                toContainsStar = true;
-            }
-        } else {
+        if (to == null) {
             throw new BuildException("this mapper requires a 'to' attribute");
         }
+        int index = to.lastIndexOf('*');
+        if (index < 0 ) {
+            toPrefix = to;
+            toPostfix = "";
+        } else {
+            toPrefix = to.substring(0, index);
+            toPostfix = to.substring(index + 1);
+            toContainsStar = true;
+        }
     }
 
     /**
@@ -152,6 +152,7 @@ public class GlobPatternMapper implements FileNameMapper {
      * @param sourceFileName the filename to map
      * @return a list of converted filenames
      */
+    @Override
     public String[] mapFileName(String sourceFileName) {
         String modName = modifyName(sourceFileName);
         if (fromPrefix == null

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/IdentityMapper.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/IdentityMapper.java b/src/main/org/apache/tools/ant/util/IdentityMapper.java
index 22c6c7e..548803d 100644
--- a/src/main/org/apache/tools/ant/util/IdentityMapper.java
+++ b/src/main/org/apache/tools/ant/util/IdentityMapper.java
@@ -31,6 +31,7 @@ public class IdentityMapper implements FileNameMapper {
      * Ignored.
      * @param from ignored.
      */
+    @Override
     public void setFrom(String from) {
     }
 
@@ -38,6 +39,7 @@ public class IdentityMapper implements FileNameMapper {
      * Ignored.
      * @param to ignored.
      */
+    @Override
     public void setTo(String to) {
     }
 
@@ -46,7 +48,8 @@ public class IdentityMapper implements FileNameMapper {
      * @param sourceFileName the name to map.
      * @return the source filename in a one-element array.
      */
+    @Override
     public String[] mapFileName(String sourceFileName) {
-        return new String[] {sourceFileName};
+        return new String[] { sourceFileName };
     }
 }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/IdentityStack.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/IdentityStack.java b/src/main/org/apache/tools/ant/util/IdentityStack.java
index ac806d7..56e9f7b 100644
--- a/src/main/org/apache/tools/ant/util/IdentityStack.java
+++ b/src/main/org/apache/tools/ant/util/IdentityStack.java
@@ -40,7 +40,7 @@ public class IdentityStack<E> extends Stack<E> {
         if (s instanceof IdentityStack) {
             return (IdentityStack<E>) s;
         }
-        IdentityStack<E> result = new IdentityStack<E>();
+        IdentityStack<E> result = new IdentityStack<>();
         if (s != null) {
             result.addAll(s);
         }
@@ -69,6 +69,7 @@ public class IdentityStack<E> extends Stack<E> {
      * @return true if the stack contains the object.
      * @see java.util.Vector#contains(Object)
      */
+    @Override
     public synchronized boolean contains(Object o) {
         return indexOf(o) >= 0;
     }
@@ -80,6 +81,7 @@ public class IdentityStack<E> extends Stack<E> {
      * @return the position of the object, -1 if not found.
      * @see java.util.Vector#indexOf(Object, int)
      */
+    @Override
     public synchronized int indexOf(Object o, int pos) {
         final int size = size();
         for (int i = pos; i < size; i++) {
@@ -97,6 +99,7 @@ public class IdentityStack<E> extends Stack<E> {
      * @return the position of the object, -1 if not found.
      * @see java.util.Vector#indexOf(Object, int)
      */
+    @Override
     public synchronized int lastIndexOf(Object o, int pos) {
         for (int i = pos; i >= 0; i--) {
             if (get(i) == o) {
@@ -106,22 +109,25 @@ public class IdentityStack<E> extends Stack<E> {
         return -1;
     }
 
+    @Override
     public synchronized boolean removeAll(Collection<?> c) {
-        if (!(c instanceof Set)) {
-            c = new HashSet(c);
+        if (!(c instanceof Set<?>)) {
+            c = new HashSet<>(c);
         }
         return super.removeAll(c);
     }
 
-    public synchronized boolean retainAll(Collection c) {
-        if (!(c instanceof Set)) {
-            c = new HashSet(c);
+    @Override
+    public synchronized boolean retainAll(Collection<?> c) {
+        if (!(c instanceof Set<?>)) {
+            c = new HashSet<>(c);
         }
         return super.retainAll(c);
     }
 
+    @Override
     public synchronized boolean containsAll(Collection<?> c) {
-        IdentityHashMap map = new IdentityHashMap();
+        IdentityHashMap<Object, Boolean> map = new IdentityHashMap<>();
         for (Object e : this) {
             map.put(e, Boolean.TRUE);
         }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/JAXPUtils.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/JAXPUtils.java b/src/main/org/apache/tools/ant/util/JAXPUtils.java
index 76460ae..2af9f8e 100644
--- a/src/main/org/apache/tools/ant/util/JAXPUtils.java
+++ b/src/main/org/apache/tools/ant/util/JAXPUtils.java
@@ -232,9 +232,8 @@ public class JAXPUtils {
         Exception nested = e.getException();
         if (nested != null) {
             return new BuildException(nested);
-        } else {
-            return new BuildException(e);
         }
+        return new BuildException(e);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/JavaEnvUtils.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/JavaEnvUtils.java b/src/main/org/apache/tools/ant/util/JavaEnvUtils.java
index 84e82fd..ea21b6b 100644
--- a/src/main/org/apache/tools/ant/util/JavaEnvUtils.java
+++ b/src/main/org/apache/tools/ant/util/JavaEnvUtils.java
@@ -448,7 +448,7 @@ public final class JavaEnvUtils {
      */
 
     private static void buildJrePackages() {
-        jrePackages = new Vector<String>();
+        jrePackages = new Vector<>();
         switch(javaVersionNumber) {
             case VERSION_9:
             case VERSION_1_8:
@@ -502,7 +502,7 @@ public final class JavaEnvUtils {
      * @return a list of test classes depending on the java version.
      */
     public static Vector<String> getJrePackageTestCases() {
-        Vector<String> tests = new Vector<String>();
+        Vector<String> tests = new Vector<>();
         tests.addElement("java.lang.Object");
         switch(javaVersionNumber) {
             case VERSION_9:
@@ -577,15 +577,11 @@ public final class JavaEnvUtils {
     public static File createVmsJavaOptionFile(String[] cmd)
             throws IOException {
         File script = FILE_UTILS.createTempFile("ANT", ".JAVA_OPTS", null, false, true);
-        BufferedWriter out = null;
-        try {
-            out = new BufferedWriter(new FileWriter(script));
+        try (BufferedWriter out = new BufferedWriter(new FileWriter(script))) {
             for (int i = 0; i < cmd.length; i++) {
                 out.write(cmd[i]);
                 out.newLine();
             }
-        } finally {
-            FileUtils.close(out);
         }
         return script;
     }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/LayoutPreservingProperties.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/LayoutPreservingProperties.java b/src/main/org/apache/tools/ant/util/LayoutPreservingProperties.java
index 853bec2..f4f2fe7 100644
--- a/src/main/org/apache/tools/ant/util/LayoutPreservingProperties.java
+++ b/src/main/org/apache/tools/ant/util/LayoutPreservingProperties.java
@@ -27,10 +27,12 @@ import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.PrintStream;
 import java.io.PushbackReader;
+import java.io.Serializable;
 import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
 import java.util.Properties;
 
 /**
@@ -78,6 +80,8 @@ import java.util.Properties;
  * although the key-value pair <code>beta=two</code> is removed.</p>
  */
 public class LayoutPreservingProperties extends Properties {
+    private static final long serialVersionUID = 1L;
+
     private String LS = StringUtils.LINE_SEP;
 
     /**
@@ -85,12 +89,12 @@ public class LayoutPreservingProperties extends Properties {
      * of. Comments and blank lines are logical lines; they are not
      * removed.
      */
-    private ArrayList logicalLines = new ArrayList();
+    private List<LogicalLine> logicalLines = new ArrayList<>();
 
     /**
      * Position in the <code>logicalLines</code> list, keyed by property name.
      */
-    private HashMap keyedPairLines = new HashMap();
+    private Map<String, Integer> keyedPairLines = new HashMap<>();
 
     /**
      * Flag to indicate that, when we remove a property from the file, we
@@ -175,14 +179,14 @@ public class LayoutPreservingProperties extends Properties {
         value = escapeValue(value);
 
         if (keyedPairLines.containsKey(key)) {
-            final Integer i = (Integer) keyedPairLines.get(key);
+            final Integer i = keyedPairLines.get(key);
             final Pair p = (Pair) logicalLines.get(i.intValue());
             p.setValue(value);
         } else {
             key = escapeName(key);
             final Pair p = new Pair(key, value);
             p.setNew(true);
-            keyedPairLines.put(key, new Integer(logicalLines.size()));
+            keyedPairLines.put(key, Integer.valueOf(logicalLines.size()));
             logicalLines.add(p);
         }
     }
@@ -197,7 +201,7 @@ public class LayoutPreservingProperties extends Properties {
     @Override
     public Object remove(final Object key) {
         final Object obj = super.remove(key);
-        final Integer i = (Integer) keyedPairLines.remove(key);
+        final Integer i = keyedPairLines.remove(key);
         if (null != i) {
             if (removeComments) {
                 removeCommentsEndingAt(i.intValue());
@@ -208,14 +212,14 @@ public class LayoutPreservingProperties extends Properties {
     }
 
     @Override
-    public Object clone() {
+    public LayoutPreservingProperties clone() {
         final LayoutPreservingProperties dolly =
             (LayoutPreservingProperties) super.clone();
-        dolly.keyedPairLines = (HashMap) this.keyedPairLines.clone();
-        dolly.logicalLines = (ArrayList) this.logicalLines.clone();
+        dolly.keyedPairLines = new HashMap<>(this.keyedPairLines);
+        dolly.logicalLines = new ArrayList<>(this.logicalLines);
         final int size = dolly.logicalLines.size();
         for (int j = 0; j < size; j++) {
-            final LogicalLine line = (LogicalLine) dolly.logicalLines.get(j);
+            final LogicalLine line = dolly.logicalLines.get(j);
             if (line instanceof Pair) {
                 final Pair p = (Pair) line;
                 dolly.logicalLines.set(j, p.clone());
@@ -232,9 +236,7 @@ public class LayoutPreservingProperties extends Properties {
      */
     public void listLines(final PrintStream out) {
         out.println("-- logical lines --");
-        final Iterator i = logicalLines.iterator();
-        while (i.hasNext()) {
-            final LogicalLine line = (LogicalLine) i.next();
+        for (LogicalLine line : logicalLines) {
             if (line instanceof Blank) {
                 out.println("blank:   \"" + line + "\"");
             } else if (line instanceof Comment) {
@@ -288,11 +290,9 @@ public class LayoutPreservingProperties extends Properties {
         osw.write("#" + DateUtils.getDateForHeader() + LS);
 
         boolean writtenSep = false;
-        for (final Iterator i = logicalLines.subList(skipLines, totalLines).iterator();
-             i.hasNext();) {
-            final LogicalLine line = (LogicalLine) i.next();
+        for (LogicalLine line : logicalLines.subList(skipLines, totalLines)) {
             if (line instanceof Pair) {
-                if (((Pair)line).isNew()) {
+                if (((Pair) line).isNew()) {
                     if (!writtenSep) {
                         osw.write(LS);
                         writtenSep = true;
@@ -317,7 +317,7 @@ public class LayoutPreservingProperties extends Properties {
         final InputStreamReader isr = new InputStreamReader(is, ResourceUtils.ISO_8859_1);
         final PushbackReader pbr = new PushbackReader(isr, 1);
 
-        if (logicalLines.size() > 0) {
+        if (!logicalLines.isEmpty()) {
             // we add a blank line for spacing
             logicalLines.add(new Blank());
         }
@@ -327,8 +327,8 @@ public class LayoutPreservingProperties extends Properties {
 
         boolean continuation = false;
         boolean comment = false;
-        final StringBuffer fileBuffer = new StringBuffer();
-        final StringBuffer logicalLineBuffer = new StringBuffer();
+        final StringBuilder fileBuffer = new StringBuilder();
+        final StringBuilder logicalLineBuffer = new StringBuilder();
         while (s != null) {
             fileBuffer.append(s).append(LS);
 
@@ -349,7 +349,7 @@ public class LayoutPreservingProperties extends Properties {
             logicalLineBuffer.append(s);
 
             if (!continuation) {
-                LogicalLine line = null;
+                LogicalLine line;
                 if (comment) {
                     line = new Comment(logicalLineBuffer.toString());
                 } else if (logicalLineBuffer.toString().trim().length() == 0) {
@@ -384,7 +384,7 @@ public class LayoutPreservingProperties extends Properties {
      * @since Ant 1.8.2
      */
     private String readFirstLine(final PushbackReader r) throws IOException {
-        final StringBuffer sb = new StringBuffer(80);
+        final StringBuilder sb = new StringBuilder(80);
         int ch = r.read();
         boolean hasCR = false;
         // when reaching EOF before the first EOL, assume native line
@@ -454,13 +454,14 @@ public class LayoutPreservingProperties extends Properties {
         final char[] ch = new char[s.length() + 1];
         s.getChars(0, s.length(), ch, 0);
         ch[s.length()] = '\n';
-        final StringBuffer buffy = new StringBuffer(s.length());
+        final StringBuilder buffy = new StringBuilder(s.length());
         for (int i = 0; i < ch.length; i++) {
             char c = ch[i];
             if (c == '\n') {
                 // we have hit out end-of-string marker
                 break;
-            } else if (c == '\\') {
+            }
+            if (c == '\\') {
                 // possibly an escape sequence
                 c = ch[++i];
                 if (c == 'n') {
@@ -540,7 +541,7 @@ public class LayoutPreservingProperties extends Properties {
         s.getChars(0, s.length(), ch, 0);
         final String forEscaping = "\t\f\r\n\\:=#!";
         final String escaped = "tfrn\\:=#!";
-        final StringBuffer buffy = new StringBuffer(s.length());
+        final StringBuilder buffy = new StringBuilder(s.length());
         boolean leadingSpace = true;
         for (int i = 0; i < ch.length; i++) {
             final char c = ch[i];
@@ -571,7 +572,7 @@ public class LayoutPreservingProperties extends Properties {
      */
     private String escapeUnicode(final char ch) {
         return "\\" + UnicodeUtil.EscapeUnicode(ch);
-        }
+    }
 
     /**
      * Remove the comments in the leading up the {@link logicalLines}
@@ -618,7 +619,9 @@ public class LayoutPreservingProperties extends Properties {
     /**
      * A logical line of the properties input stream.
      */
-    private abstract static class LogicalLine {
+    private abstract static class LogicalLine implements Serializable {
+        private static final long serialVersionUID = 1L;
+
         private String text;
 
         public LogicalLine(final String text) {
@@ -639,6 +642,8 @@ public class LayoutPreservingProperties extends Properties {
      * A blank line of the input stream.
      */
     private static class Blank extends LogicalLine {
+        private static final long serialVersionUID = 1L;
+
         public Blank() {
             super("");
         }
@@ -648,6 +653,8 @@ public class LayoutPreservingProperties extends Properties {
      * A comment line of the input stream.
      */
     private class Comment extends LogicalLine {
+        private static final long serialVersionUID = 1L;
+
         public Comment(final String text) {
             super(text);
         }
@@ -659,6 +666,8 @@ public class LayoutPreservingProperties extends Properties {
      * line.
      */
     private static class Pair extends LogicalLine implements Cloneable {
+        private static final long serialVersionUID = 1L;
+
         private String name;
         private String value;
         private boolean added;
@@ -676,6 +685,7 @@ public class LayoutPreservingProperties extends Properties {
             return name;
         }
 
+        @SuppressWarnings("unused")
         public String getValue() {
             return value;
         }
@@ -694,10 +704,10 @@ public class LayoutPreservingProperties extends Properties {
         }
 
         @Override
-        public Object clone() {
-            Object dolly = null;
+        public Pair clone() {
+            Pair dolly = null;
             try {
-                dolly = super.clone();
+                dolly = (Pair) super.clone();
             } catch (final CloneNotSupportedException e) {
                 // should be fine
                 e.printStackTrace(); //NOSONAR
@@ -711,10 +721,10 @@ public class LayoutPreservingProperties extends Properties {
             if (pos == -1) {
                 // trim leading whitespace only
                 name = text;
-                value = null;
+                setValue(null);
             } else {
                 name = text.substring(0, pos);
-                value = text.substring(pos+1, text.length());
+                setValue(text.substring(pos+1, text.length()));
             }
             // trim leading whitespace only
             name = stripStart(name, " \t\f");

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/LazyFileOutputStream.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/LazyFileOutputStream.java b/src/main/org/apache/tools/ant/util/LazyFileOutputStream.java
index 781d0c7..cd7801d 100644
--- a/src/main/org/apache/tools/ant/util/LazyFileOutputStream.java
+++ b/src/main/org/apache/tools/ant/util/LazyFileOutputStream.java
@@ -107,6 +107,7 @@ public class LazyFileOutputStream extends OutputStream {
      * Close the file.
      * @throws IOException if there is an error.
      */
+    @Override
     public synchronized void close() throws IOException {
         if (alwaysCreate && !closed) {
             ensureOpened();
@@ -122,6 +123,7 @@ public class LazyFileOutputStream extends OutputStream {
      * @param b the bytearray to write.
      * @throws IOException if there is a problem.
      */
+    @Override
     public void write(byte[] b) throws IOException {
         write(b, 0, b.length);
     }
@@ -133,6 +135,7 @@ public class LazyFileOutputStream extends OutputStream {
      * @param len    the number of bytes to write.
      * @throws IOException if there is a problem.
      */
+    @Override
     public synchronized void write(byte[] b, int offset, int len)
         throws IOException {
         ensureOpened();
@@ -144,6 +147,7 @@ public class LazyFileOutputStream extends OutputStream {
      * @param b the byte to write.
      * @throws IOException if there is a problem.
      */
+    @Override
     public synchronized void write(int b) throws IOException {
         ensureOpened();
         fos.write(b);

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/LazyHashtable.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/LazyHashtable.java b/src/main/org/apache/tools/ant/util/LazyHashtable.java
index 1df953c..9ef9091 100644
--- a/src/main/org/apache/tools/ant/util/LazyHashtable.java
+++ b/src/main/org/apache/tools/ant/util/LazyHashtable.java
@@ -28,6 +28,7 @@ import java.util.Hashtable;
  *
  * @since Ant 1.6
  */
+@Deprecated
 public class LazyHashtable extends Hashtable {
     // CheckStyle:VisibilityModifier OFF - bc
     protected boolean initAllDone = false;

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/LeadPipeInputStream.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/LeadPipeInputStream.java b/src/main/org/apache/tools/ant/util/LeadPipeInputStream.java
index 0081912..fa82a00 100644
--- a/src/main/org/apache/tools/ant/util/LeadPipeInputStream.java
+++ b/src/main/org/apache/tools/ant/util/LeadPipeInputStream.java
@@ -81,6 +81,7 @@ public class LeadPipeInputStream extends PipedInputStream {
      * @return the byte (0 to 255) or -1 if there are no more.
      * @throws IOException if there is an error.
      */
+    @Override
     public synchronized int read() throws IOException {
         int result = -1;
         try {

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/LineTokenizer.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/LineTokenizer.java b/src/main/org/apache/tools/ant/util/LineTokenizer.java
index 778606d..89d0b97 100644
--- a/src/main/org/apache/tools/ant/util/LineTokenizer.java
+++ b/src/main/org/apache/tools/ant/util/LineTokenizer.java
@@ -54,19 +54,19 @@ public class LineTokenizer extends ProjectComponent
      * @exception IOException if an error occurs reading
      */
     public String getToken(Reader in) throws IOException {
-        int ch = -1;
-        if (pushed != NOT_A_CHAR) {
+        int ch;
+        if (pushed == NOT_A_CHAR) {
+            ch = in.read();
+        } else {
             ch = pushed;
             pushed = NOT_A_CHAR;
-        } else {
-            ch = in.read();
         }
         if (ch == -1) {
             return null;
         }
 
         lineEnd = "";
-        StringBuffer line = new StringBuffer();
+        StringBuilder line = new StringBuilder();
 
         int state = 0;
         while (ch != -1) {
@@ -104,11 +104,9 @@ public class LineTokenizer extends ProjectComponent
     /**
      * @return the line ending character(s) for the current line
      */
+    @Override
     public String getPostToken() {
-        if (includeDelims) {
-            return "";
-        }
-        return lineEnd;
+        return includeDelims ? "" : lineEnd;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/LinkedHashtable.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/LinkedHashtable.java b/src/main/org/apache/tools/ant/util/LinkedHashtable.java
index 73fc83c..4f73273 100644
--- a/src/main/org/apache/tools/ant/util/LinkedHashtable.java
+++ b/src/main/org/apache/tools/ant/util/LinkedHashtable.java
@@ -43,89 +43,106 @@ public class LinkedHashtable<K, V> extends Hashtable<K, V> {
     private final LinkedHashMap<K, V> map;
 
     public LinkedHashtable() {
-        map = new LinkedHashMap<K, V>();
+        map = new LinkedHashMap<>();
     }
 
     public LinkedHashtable(int initialCapacity) {
-        map = new LinkedHashMap<K, V>(initialCapacity);
+        map = new LinkedHashMap<>(initialCapacity);
     }
 
     public LinkedHashtable(int initialCapacity, float loadFactor) {
-        map = new LinkedHashMap<K, V>(initialCapacity, loadFactor);
+        map = new LinkedHashMap<>(initialCapacity, loadFactor);
     }
 
     public LinkedHashtable(Map<K, V> m) {
-        map = new LinkedHashMap<K, V>(m);
+        map = new LinkedHashMap<>(m);
     }
 
     public synchronized void clear() {
         map.clear();
     }
 
+    @Override
     public boolean contains(Object value) {
         return containsKey(value);
     }
 
+    @Override
     public synchronized boolean containsKey(Object value) {
         return map.containsKey(value);
     }
 
+    @Override
     public synchronized boolean containsValue(Object value) {
         return map.containsValue(value);
     }
 
+    @Override
     public Enumeration<V> elements() {
         return CollectionUtils.asEnumeration(values().iterator());
     }
 
+    @Override
     public synchronized Set<Map.Entry<K, V>> entrySet() {
         return map.entrySet();
     }
 
+    @Override
     public synchronized boolean equals(Object o) {
         return map.equals(o);
     }
 
+    @Override
     public synchronized V get(Object k) {
         return map.get(k);
     }
 
+    @Override
     public synchronized int hashCode() {
         return map.hashCode();
     }
 
+    @Override
     public synchronized boolean isEmpty() {
         return map.isEmpty();
     }
 
+    @Override
     public Enumeration<K> keys() {
         return CollectionUtils.asEnumeration(keySet().iterator());
     }
 
+    @Override
     public synchronized Set<K> keySet() {
         return map.keySet();
     }
 
+    @Override
     public synchronized V put(K k, V v) {
         return map.put(k, v);
     }
 
+    @Override
     public synchronized void putAll(Map<? extends K, ? extends V> m) {
         map.putAll(m);
     }
 
+    @Override
     public synchronized V remove(Object k) {
         return map.remove(k);
     }
 
+    @Override
     public synchronized int size() {
         return map.size();
     }
 
+    @Override
     public synchronized String toString() {
         return map.toString();
     }
 
+    @Override
     public synchronized Collection<V> values() {
         return map.values();
     }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/LoaderUtils.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/LoaderUtils.java b/src/main/org/apache/tools/ant/util/LoaderUtils.java
index e0514f6..799feb5 100644
--- a/src/main/org/apache/tools/ant/util/LoaderUtils.java
+++ b/src/main/org/apache/tools/ant/util/LoaderUtils.java
@@ -94,7 +94,7 @@ public class LoaderUtils {
      *
      * @since Ant 1.6
      */
-    public static File getClassSource(Class c) {
+    public static File getClassSource(Class<?> c) {
         return normalizeSource(Locator.getClassSource(c));
     }
 

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/MergingMapper.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/MergingMapper.java b/src/main/org/apache/tools/ant/util/MergingMapper.java
index 7f158db..9298a73 100644
--- a/src/main/org/apache/tools/ant/util/MergingMapper.java
+++ b/src/main/org/apache/tools/ant/util/MergingMapper.java
@@ -44,6 +44,7 @@ public class MergingMapper implements FileNameMapper {
      * Ignored.
      * @param from ignored.
      */
+    @Override
     public void setFrom(String from) {
     }
 
@@ -51,6 +52,7 @@ public class MergingMapper implements FileNameMapper {
      * Sets the name of the merged file.
      * @param to the name of the merged file.
      */
+    @Override
     public void setTo(String to) {
         mergedFile = new String[] {to};
     }
@@ -60,6 +62,7 @@ public class MergingMapper implements FileNameMapper {
      * @param sourceFileName ignored.
      * @return a one-element array containing the merged filename.
      */
+    @Override
     public String[] mapFileName(String sourceFileName) {
         return mergedFile;
     }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/OutputStreamFunneler.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/OutputStreamFunneler.java b/src/main/org/apache/tools/ant/util/OutputStreamFunneler.java
index 9b4cef3..84e0a0a 100644
--- a/src/main/org/apache/tools/ant/util/OutputStreamFunneler.java
+++ b/src/main/org/apache/tools/ant/util/OutputStreamFunneler.java
@@ -44,6 +44,7 @@ public class OutputStreamFunneler {
             }
         }
 
+        @Override
         public void flush() throws IOException {
             synchronized (OutputStreamFunneler.this) {
                 dieIfClosed();
@@ -51,6 +52,7 @@ public class OutputStreamFunneler {
             }
         }
 
+        @Override
         public void write(int b) throws IOException {
             synchronized (OutputStreamFunneler.this) {
                 dieIfClosed();
@@ -58,6 +60,7 @@ public class OutputStreamFunneler {
             }
         }
 
+        @Override
         public void write(byte[] b) throws IOException {
             synchronized (OutputStreamFunneler.this) {
                 dieIfClosed();
@@ -65,6 +68,7 @@ public class OutputStreamFunneler {
             }
         }
 
+        @Override
         public void write(byte[] b, int off, int len) throws IOException {
             synchronized (OutputStreamFunneler.this) {
                 dieIfClosed();
@@ -72,6 +76,7 @@ public class OutputStreamFunneler {
             }
         }
 
+        @Override
         public void close() throws IOException {
             release(this);
         }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/PackageNameMapper.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/PackageNameMapper.java b/src/main/org/apache/tools/ant/util/PackageNameMapper.java
index 3025667..e50906d 100644
--- a/src/main/org/apache/tools/ant/util/PackageNameMapper.java
+++ b/src/main/org/apache/tools/ant/util/PackageNameMapper.java
@@ -37,6 +37,7 @@ public class PackageNameMapper extends GlobPatternMapper {
      *@param  name  Source filename
      *@return       Replaced variable part
      */
+    @Override
     protected String extractVariablePart(String name) {
         String var = name.substring(prefixLength,
                 name.length() - postfixLength);

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/PropertyOutputStream.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/PropertyOutputStream.java b/src/main/org/apache/tools/ant/util/PropertyOutputStream.java
index 59a1b7e..6fdfdbd 100644
--- a/src/main/org/apache/tools/ant/util/PropertyOutputStream.java
+++ b/src/main/org/apache/tools/ant/util/PropertyOutputStream.java
@@ -19,13 +19,15 @@
 package org.apache.tools.ant.util;
 
 import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
 
 import org.apache.tools.ant.Project;
+import org.apache.tools.ant.types.resources.PropertyResource;
 
 /**
- * Exception thrown when an attempt is made to get an OutputStream
- * from an immutable Resource.
+ * {@link OutputStream} that writes an Ant property.
  * @since Ant 1.7
+ * @see PropertyResource#getOutputStream()
  */
 public class PropertyOutputStream extends ByteArrayOutputStream {
     private Project project;
@@ -58,6 +60,7 @@ public class PropertyOutputStream extends ByteArrayOutputStream {
     /**
      * Close the PropertyOutputStream, storing the property.
      */
+    @Override
     public void close() {
         if (project != null && property != null) {
             String s = new String(toByteArray());

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/ProxySetup.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/ProxySetup.java b/src/main/org/apache/tools/ant/util/ProxySetup.java
index ea69e72..60f9eb7 100644
--- a/src/main/org/apache/tools/ant/util/ProxySetup.java
+++ b/src/main/org/apache/tools/ant/util/ProxySetup.java
@@ -95,7 +95,7 @@ public class ProxySetup {
      * is set, use that instead. Else set to "true".
      */
     public void enableProxies() {
-        if (!(getSystemProxySetting() != null)) {
+        if (getSystemProxySetting() == null) {
             String proxies = owner.getProperty(USE_SYSTEM_PROXIES);
             if (proxies == null || Project.toBoolean(proxies)) {
                 proxies = "true";

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/ReaderInputStream.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/ReaderInputStream.java b/src/main/org/apache/tools/ant/util/ReaderInputStream.java
index f327b77..be3523d 100644
--- a/src/main/org/apache/tools/ant/util/ReaderInputStream.java
+++ b/src/main/org/apache/tools/ant/util/ReaderInputStream.java
@@ -60,9 +60,8 @@ public class ReaderInputStream extends InputStream {
         this(reader);
         if (encoding == null) {
             throw new IllegalArgumentException("encoding must not be null");
-        } else {
-            this.encoding = encoding;
         }
+        this.encoding = encoding;
     }
 
     /**
@@ -72,6 +71,7 @@ public class ReaderInputStream extends InputStream {
      *
      * @exception IOException if the original <code>Reader</code> fails to be read
      */
+    @Override
     public synchronized int read() throws IOException {
         if (in == null) {
             throw new IOException("Stream Closed");
@@ -104,6 +104,7 @@ public class ReaderInputStream extends InputStream {
      *         the end of the stream
      * @exception IOException if an error occurs
      */
+    @Override
     public synchronized int read(byte[] b, int off, int len)
         throws IOException {
         if (in == null) {
@@ -144,6 +145,7 @@ public class ReaderInputStream extends InputStream {
      * @param limit the maximum limit of bytes that can be read before the
      *              mark position becomes invalid
      */
+    @Override
     public synchronized void mark(final int limit) {
         try {
             in.mark(limit);
@@ -152,11 +154,11 @@ public class ReaderInputStream extends InputStream {
         }
     }
 
-
     /**
      * @return   the current number of bytes ready for reading
      * @exception IOException if an error occurs
      */
+    @Override
     public synchronized int available() throws IOException {
         if (in == null) {
             throw new IOException("Stream Closed");
@@ -173,6 +175,7 @@ public class ReaderInputStream extends InputStream {
     /**
      * @return false - mark is not supported
      */
+    @Override
     public boolean markSupported () {
         return false;   // would be imprecise
     }
@@ -182,6 +185,7 @@ public class ReaderInputStream extends InputStream {
      *
      * @exception IOException if the Reader fails to be reset
      */
+    @Override
     public synchronized void reset() throws IOException {
         if (in == null) {
             throw new IOException("Stream Closed");
@@ -195,6 +199,7 @@ public class ReaderInputStream extends InputStream {
      *
      * @exception IOException if the original Reader fails to be closed
      */
+    @Override
     public synchronized void close() throws IOException {
         if (in != null) {
             in.close();

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/ReflectUtil.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/ReflectUtil.java b/src/main/org/apache/tools/ant/util/ReflectUtil.java
index ed8b47a..27ba8ce 100644
--- a/src/main/org/apache/tools/ant/util/ReflectUtil.java
+++ b/src/main/org/apache/tools/ant/util/ReflectUtil.java
@@ -21,6 +21,8 @@ import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.util.function.Predicate;
+import java.util.stream.Stream;
 
 import org.apache.tools.ant.BuildException;
 
@@ -60,12 +62,11 @@ public class ReflectUtil {
      * @param methodName the name of the method to call
      * @return the object returned by the method
      */
-    public static Object invoke(Object obj, String methodName) {
+    @SuppressWarnings("unchecked")
+    public static <T> T invoke(Object obj, String methodName) {
         try {
-            Method method;
-            method = obj.getClass().getMethod(
-                        methodName, (Class[]) null);
-            return method.invoke(obj, (Object[]) null);
+            Method method = obj.getClass().getMethod(methodName);
+            return (T) method.invoke(obj);
         } catch (Exception t) {
             throwBuildException(t);
             return null; // NotReached
@@ -80,12 +81,11 @@ public class ReflectUtil {
      * @param methodName the name of the method to call
      * @return the object returned by the method
      */
-    public static Object invokeStatic(Object obj, String methodName) {
+    @SuppressWarnings("unchecked")
+    public static <T> T invokeStatic(Object obj, String methodName) {
         try {
-            Method method;
-            method = ((Class<?>) obj).getMethod(
-                    methodName, (Class[]) null);
-            return method.invoke(obj, (Object[]) null);
+            Method method = ((Class<?>) obj).getMethod(methodName);
+            return (T) method.invoke(obj);
         }  catch (Exception t) {
             throwBuildException(t);
             return null; // NotReached
@@ -100,13 +100,12 @@ public class ReflectUtil {
      * @param arg        the value of the argument.
      * @return the object returned by the method
      */
-    public static Object invoke(
+    @SuppressWarnings("unchecked")
+    public static <T> T invoke(
         Object obj, String methodName, Class<?> argType, Object arg) {
         try {
-            Method method;
-            method = obj.getClass().getMethod(
-                methodName, new Class[] {argType});
-            return method.invoke(obj, new Object[] {arg});
+            Method method = obj.getClass().getMethod(methodName, argType);
+            return (T) method.invoke(obj, arg);
         } catch (Exception t) {
             throwBuildException(t);
             return null; // NotReached
@@ -123,14 +122,14 @@ public class ReflectUtil {
      * @param arg2       the value of the second argument.
      * @return the object returned by the method
      */
-    public static Object invoke(
+    @SuppressWarnings("unchecked")
+    public static <T> T invoke(
         Object obj, String methodName, Class<?> argType1, Object arg1,
         Class<?> argType2, Object arg2) {
         try {
-            Method method;
-            method = obj.getClass().getMethod(
-                methodName, new Class[] {argType1, argType2});
-            return method.invoke(obj, new Object[] {arg1, arg2});
+            Method method =
+                obj.getClass().getMethod(methodName, argType1, argType2);
+            return (T) method.invoke(obj, arg1, arg2);
         } catch (Exception t) {
             throwBuildException(t);
             return null; // NotReached
@@ -144,12 +143,13 @@ public class ReflectUtil {
      * @return the value of the field.
      * @throws BuildException if there is an error.
      */
-    public static Object getField(Object obj, String fieldName)
+    @SuppressWarnings("unchecked")
+    public static <T> T getField(Object obj, String fieldName)
         throws BuildException {
         try {
             Field field = obj.getClass().getDeclaredField(fieldName);
             field.setAccessible(true);
-            return field.get(obj);
+            return (T) field.get(obj);
         } catch (Exception t) {
             throwBuildException(t);
             return null; // NotReached
@@ -182,9 +182,8 @@ public class ReflectUtil {
                 return (BuildException) t2;
             }
             return new BuildException(t2);
-        } else {
-            return new BuildException(t);
         }
+        return new BuildException(t);
     }
 
     /**
@@ -198,13 +197,8 @@ public class ReflectUtil {
     public static boolean respondsTo(Object o, String methodName)
         throws BuildException {
         try {
-            Method[] methods = o.getClass().getMethods();
-            for (int i = 0; i < methods.length; i++) {
-                if (methods[i].getName().equals(methodName)) {
-                    return true;
-                }
-            }
-            return false;
+            return Stream.of(o.getClass().getMethods()).map(Method::getName)
+                .anyMatch(Predicate.isEqual(methodName));
         } catch (Exception t) {
             throw toBuildException(t);
         }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/ReflectWrapper.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/ReflectWrapper.java b/src/main/org/apache/tools/ant/util/ReflectWrapper.java
index e34363e..f803c88 100644
--- a/src/main/org/apache/tools/ant/util/ReflectWrapper.java
+++ b/src/main/org/apache/tools/ant/util/ReflectWrapper.java
@@ -28,6 +28,7 @@ import java.lang.reflect.Constructor;
 
 public class ReflectWrapper {
     private Object obj;
+
     /**
      * Construct a wrapped object using the no arg constructor.
      * @param loader the classloader to use to construct the class.
@@ -35,11 +36,9 @@ public class ReflectWrapper {
      */
     public ReflectWrapper(ClassLoader loader, String name) {
         try {
-            Class clazz;
-            clazz = Class.forName(name, true, loader);
-            Constructor constructor;
-            constructor = clazz.getConstructor((Class[]) null);
-            obj = constructor.newInstance((Object[]) null);
+            Class<?> clazz = Class.forName(name, true, loader);
+            Constructor<?> constructor = clazz.getConstructor();
+            obj = constructor.newInstance();
         } catch (Exception t) {
             ReflectUtil.throwBuildException(t);
         }
@@ -56,8 +55,9 @@ public class ReflectWrapper {
     /**
      * @return the wrapped object.
      */
-    public Object getObject() {
-        return obj;
+    @SuppressWarnings("unchecked")
+    public <T> T getObject() {
+        return (T) obj;
     }
 
     /**
@@ -65,7 +65,7 @@ public class ReflectWrapper {
      * @param methodName the name of the method to call
      * @return the object returned by the method
      */
-    public Object invoke(String methodName) {
+    public <T> T invoke(String methodName) {
         return ReflectUtil.invoke(obj, methodName);
     }
 
@@ -76,8 +76,7 @@ public class ReflectWrapper {
      * @param arg        the value of the argument.
      * @return the object returned by the method
      */
-    public Object invoke(
-        String methodName, Class argType, Object arg) {
+    public <T> T invoke(String methodName, Class<?> argType, Object arg) {
         return ReflectUtil.invoke(obj, methodName, argType, arg);
     }
 
@@ -90,10 +89,9 @@ public class ReflectWrapper {
      * @param arg2       the value of the second argument.
      * @return the object returned by the method
      */
-    public Object invoke(
-        String methodName, Class argType1, Object arg1,
-        Class argType2, Object arg2) {
-        return ReflectUtil.invoke(
-            obj, methodName, argType1, arg1, argType2, arg2);
+    public <T> T invoke(String methodName, Class<?> argType1, Object arg1,
+        Class<?> argType2, Object arg2) {
+        return ReflectUtil.invoke(obj, methodName, argType1, arg1, argType2,
+            arg2);
     }
 }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/RegexpPatternMapper.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/RegexpPatternMapper.java b/src/main/org/apache/tools/ant/util/RegexpPatternMapper.java
index fa620d9..5974847 100644
--- a/src/main/org/apache/tools/ant/util/RegexpPatternMapper.java
+++ b/src/main/org/apache/tools/ant/util/RegexpPatternMapper.java
@@ -18,7 +18,7 @@
 
 package org.apache.tools.ant.util;
 
-import java.util.Vector;
+import java.util.List;
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.util.regexp.RegexpMatcher;
@@ -77,18 +77,18 @@ public class RegexpPatternMapper implements FileNameMapper {
      * @param from the from pattern.
      * @throws BuildException on error.
      */
+    @Override
     public void setFrom(String from) throws BuildException {
-        if (from != null) {
-            try {
-                reg.setPattern(from);
-            } catch (NoClassDefFoundError e) {
-                // depending on the implementation the actual RE won't
-                // get instantiated in the constructor.
-                throw new BuildException("Cannot load regular expression matcher",
-                                         e);
-            }
-        } else {
+        if (from == null) {
             throw new BuildException("this mapper requires a 'from' attribute");
+        } 
+        try {
+            reg.setPattern(from);
+        } catch (NoClassDefFoundError e) {
+            // depending on the implementation the actual RE won't
+            // get instantiated in the constructor.
+            throw new BuildException("Cannot load regular expression matcher",
+                e);
         }
     }
 
@@ -97,12 +97,12 @@ public class RegexpPatternMapper implements FileNameMapper {
      * @param to the to pattern.
      * @throws BuildException on error.
      */
+    @Override
     public void setTo(String to) {
-        if (to != null) {
-            this.to = to.toCharArray();
-        } else {
+        if (to == null) {
             throw new BuildException("this mapper requires a 'to' attribute");
         }
+        this.to = to.toCharArray();
     }
 
     /**
@@ -113,6 +113,7 @@ public class RegexpPatternMapper implements FileNameMapper {
      * @return a one-element array containing the translated file or
      *         null if the to pattern did not match
      */
+    @Override
     public String[] mapFileName(String sourceFileName) {
         if (handleDirSep) {
             if (sourceFileName.indexOf("\\") != -1) {
@@ -123,7 +124,7 @@ public class RegexpPatternMapper implements FileNameMapper {
             || !reg.matches(sourceFileName, regexpOptions)) {
             return null;
         }
-        return new String[] {replaceReferences(sourceFileName)};
+        return new String[] { replaceReferences(sourceFileName) };
     }
 
     /**
@@ -133,7 +134,7 @@ public class RegexpPatternMapper implements FileNameMapper {
      * @return the translated file name.
      */
     protected String replaceReferences(String source) {
-        Vector v = reg.getGroups(source, regexpOptions);
+        List<String> v = reg.getGroups(source, regexpOptions);
 
         result.setLength(0);
         for (int i = 0; i < to.length; i++) {
@@ -141,7 +142,7 @@ public class RegexpPatternMapper implements FileNameMapper {
                 if (++i < to.length) {
                     int value = Character.digit(to[i], DECIMAL);
                     if (value > -1) {
-                        result.append((String) v.elementAt(value));
+                        result.append(v.get(value));
                     } else {
                         result.append(to[i]);
                     }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/ResourceUtils.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/ResourceUtils.java b/src/main/org/apache/tools/ant/util/ResourceUtils.java
index c4532a7..9b246a0 100644
--- a/src/main/org/apache/tools/ant/util/ResourceUtils.java
+++ b/src/main/org/apache/tools/ant/util/ResourceUtils.java
@@ -28,6 +28,7 @@ import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.Reader;
 import java.nio.channels.FileChannel;
+import java.nio.charset.Charset;
 import java.nio.file.StandardOpenOption;
 import java.util.Arrays;
 import java.util.Vector;
@@ -35,6 +36,7 @@ import java.util.Vector;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.ProjectComponent;
 import org.apache.tools.ant.filters.util.ChainReaderHelper;
+import org.apache.tools.ant.types.FilterChain;
 import org.apache.tools.ant.types.FilterSetCollection;
 import org.apache.tools.ant.types.Resource;
 import org.apache.tools.ant.types.ResourceCollection;
@@ -142,24 +144,8 @@ public class ResourceUtils {
                                                             final ResourceFactory targets,
                                                             final long granularity) {
         logFuture(logTo, source, granularity);
-        final ResourceSelectorProvider p =
-            new ResourceSelectorProvider() {
-                public ResourceSelector
-                    getTargetSelectorForSource(final Resource sr) {
-                    return new ResourceSelector() {
-                        public boolean isSelected(final Resource target) {
-                            /* Extra I/O, probably wasted:
-                               if (target.isDirectory()) {
-                               return false;
-                               }
-                            */
-                            return SelectorUtils.isOutOfDate(sr, target,
-                                                             granularity);
-                        }
-                    };
-                }
-            };
-        return selectSources(logTo, source, mapper, targets, p);
+        return selectSources(logTo, source, mapper, targets,
+            sr -> target -> SelectorUtils.isOutOfDate(sr, target, granularity));
     }
 
     /**
@@ -181,7 +167,7 @@ public class ResourceUtils {
                                                    final FileNameMapper mapper,
                                                    final ResourceFactory targets,
                                                    final ResourceSelectorProvider selector) {
-        if (source.size() == 0) {
+        if (source.isEmpty()) {
             logTo.log("No sources found.", Project.MSG_VERBOSE);
             return Resources.NONE;
         }
@@ -301,7 +287,7 @@ public class ResourceUtils {
      * @since Ant 1.7
      */
     public static void copyResource(final Resource source, final Resource dest,
-                             final FilterSetCollection filters, final Vector filterChains,
+                             final FilterSetCollection filters, final Vector<FilterChain> filterChains,
                              final boolean overwrite, final boolean preserveLastModified,
                              final String inputEncoding, final String outputEncoding,
                              final Project project)
@@ -338,7 +324,7 @@ public class ResourceUtils {
      * @since Ant 1.8
      */
     public static void copyResource(final Resource source, final Resource dest,
-                            final FilterSetCollection filters, final Vector filterChains,
+                            final FilterSetCollection filters, final Vector<FilterChain> filterChains,
                             final boolean overwrite, final boolean preserveLastModified,
                                     final boolean append,
                             final String inputEncoding, final String outputEncoding,
@@ -378,7 +364,7 @@ public class ResourceUtils {
      * @since Ant 1.8.2
      */
     public static void copyResource(final Resource source, final Resource dest,
-                            final FilterSetCollection filters, final Vector filterChains,
+                            final FilterSetCollection filters, final Vector<FilterChain> filterChains,
                             final boolean overwrite, final boolean preserveLastModified,
                                     final boolean append,
                                     final String inputEncoding, final String outputEncoding,
@@ -391,8 +377,8 @@ public class ResourceUtils {
         final boolean filterSetsAvailable = (filters != null
                                              && filters.hasFilters());
         final boolean filterChainsAvailable = (filterChains != null
-                                               && filterChains.size() > 0);
-        String effectiveInputEncoding = null;
+                                               && !filterChains.isEmpty());
+        String effectiveInputEncoding;
         if (source instanceof StringResource) {
             effectiveInputEncoding = ((StringResource) source).getEncoding();
         } else {
@@ -405,25 +391,25 @@ public class ResourceUtils {
         if (destFile != null && destFile.isFile() && !destFile.canWrite()) {
             if (!force) {
                 throw new ReadOnlyTargetFileException(destFile);
-            } else if (!FILE_UTILS.tryHardToDelete(destFile)) {
-                throw new IOException("failed to delete read-only "
-                                      + "destination file " + destFile);
+            }
+            if (!FILE_UTILS.tryHardToDelete(destFile)) {
+                throw new IOException(
+                    "failed to delete read-only destination file " + destFile);
             }
         }
 
         if (filterSetsAvailable) {
             copyWithFilterSets(source, dest, filters, filterChains,
-                               filterChainsAvailable, append,
-                               effectiveInputEncoding, outputEncoding,
-                               project);
+                               append, effectiveInputEncoding,
+                               outputEncoding, project);
         } else if (filterChainsAvailable
                    || (effectiveInputEncoding != null
                        && !effectiveInputEncoding.equals(outputEncoding))
                    || (effectiveInputEncoding == null && outputEncoding != null)) {
             copyWithFilterChainsOrTranscoding(source, dest, filterChains,
-                                              filterChainsAvailable, append,
-                                              effectiveInputEncoding,
-                                              outputEncoding, project);
+                                              append, effectiveInputEncoding,
+                                              outputEncoding,
+                                              project);
         } else {
             boolean copied = false;
             if (source.as(FileProvider.class) != null
@@ -561,9 +547,8 @@ public class ResourceUtils {
         if (fileProvider instanceof FileResource || fileProvider == null) {
             return (FileResource) fileProvider;
         }
-        final FileResource result = new FileResource(fileProvider.getFile());
-        result.setProject(Project.getProject(fileProvider));
-        return result;
+        return new FileResource(Project.getProject(fileProvider),
+            fileProvider.getFile());
     }
 
     /**
@@ -582,11 +567,9 @@ public class ResourceUtils {
      * @since Ant 1.7
      */
     private static int binaryCompare(final Resource r1, final Resource r2) throws IOException {
-        InputStream in1 = null;
-        InputStream in2 = null;
-        try {
-            in1 = new BufferedInputStream(r1.getInputStream());
-            in2 = new BufferedInputStream(r2.getInputStream());
+        try (InputStream in1 = new BufferedInputStream(r1.getInputStream());
+                InputStream in2 =
+                    new BufferedInputStream(r2.getInputStream())) {
 
             for (int b1 = in1.read(); b1 != -1; b1 = in1.read()) {
                 final int b2 = in2.read();
@@ -595,9 +578,6 @@ public class ResourceUtils {
                 }
             }
             return in2.read() == -1 ? 0 : -1;
-        } finally {
-            FileUtils.close(in1);
-            FileUtils.close(in2);
         }
     }
 
@@ -612,11 +592,10 @@ public class ResourceUtils {
      * @since Ant 1.7
      */
     private static int textCompare(final Resource r1, final Resource r2) throws IOException {
-        BufferedReader in1 = null;
-        BufferedReader in2 = null;
-        try {
-            in1 = new BufferedReader(new InputStreamReader(r1.getInputStream()));
-            in2 = new BufferedReader(new InputStreamReader(r2.getInputStream()));
+        try (BufferedReader in1 =
+            new BufferedReader(new InputStreamReader(r1.getInputStream()));
+                BufferedReader in2 = new BufferedReader(
+                    new InputStreamReader(r2.getInputStream()))) {
 
             String expected = in1.readLine();
             while (expected != null) {
@@ -630,9 +609,6 @@ public class ResourceUtils {
                 expected = in1.readLine();
             }
             return in2.readLine() == null ? 0 : -1; //NOSONAR
-        } finally {
-            FileUtils.close(in1);
-            FileUtils.close(in2);
         }
     }
 
@@ -659,40 +635,18 @@ public class ResourceUtils {
 
     private static void copyWithFilterSets(final Resource source, final Resource dest,
                                            final FilterSetCollection filters,
-                                           final Vector filterChains,
-                                           final boolean filterChainsAvailable,
-                                           final boolean append, final String inputEncoding,
-                                           final String outputEncoding,
+                                           final Vector<FilterChain> filterChains,
+                                           final boolean append,
+                                           final String inputEncoding, final String outputEncoding,
                                            final Project project)
         throws IOException {
-        BufferedReader in = null;
-        BufferedWriter out = null;
-        try {
-            InputStreamReader isr = null;
-            if (inputEncoding == null) {
-                isr = new InputStreamReader(source.getInputStream());
-            } else {
-                isr = new InputStreamReader(source.getInputStream(),
-                                            inputEncoding);
-            }
-            in = new BufferedReader(isr);
-            final OutputStream os = getOutputStream(dest, append, project);
-            OutputStreamWriter osw;
-            if (outputEncoding == null) {
-                osw = new OutputStreamWriter(os);
-            } else {
-                osw = new OutputStreamWriter(os, outputEncoding);
-            }
-            out = new BufferedWriter(osw);
-            if (filterChainsAvailable) {
-                final ChainReaderHelper crh = new ChainReaderHelper();
-                crh.setBufferSize(FileUtils.BUF_SIZE);
-                crh.setPrimaryReader(in);
-                crh.setFilterChains(filterChains);
-                crh.setProject(project);
-                final Reader rdr = crh.getAssembledReader();
-                in = new BufferedReader(rdr);
-            }
+
+        try (Reader in = filterWith(project, inputEncoding, filterChains,
+            source.getInputStream());
+                BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
+                    getOutputStream(dest, append, project),
+                    charsetFor(outputEncoding)))) {
+
             final LineTokenizer lineTokenizer = new LineTokenizer();
             lineTokenizer.setIncludeDelims(true);
             String newline = null;
@@ -708,49 +662,40 @@ public class ResourceUtils {
                 }
                 line = lineTokenizer.getToken(in);
             }
-        } finally {
-            FileUtils.close(out);
-            FileUtils.close(in);
         }
     }
 
+    private static Reader filterWith(Project project, String encoding,
+        Vector<FilterChain> filterChains, InputStream input) {
+        Reader r = new InputStreamReader(input, charsetFor(encoding));
+        if (filterChains != null && !filterChains.isEmpty()) {
+            final ChainReaderHelper crh = new ChainReaderHelper();
+            crh.setBufferSize(FileUtils.BUF_SIZE);
+            crh.setPrimaryReader(r);
+            crh.setFilterChains(filterChains);
+            crh.setProject(project);
+            r = crh.getAssembledReader();
+        }
+        return new BufferedReader(r);
+    }
+
+    private static Charset charsetFor(String encoding) {
+        return encoding == null ? Charset.defaultCharset() : Charset.forName(encoding);
+    }
+
     private static void copyWithFilterChainsOrTranscoding(final Resource source,
                                                           final Resource dest,
-                                                          final Vector filterChains,
-                                                          final boolean filterChainsAvailable,
+                                                          final Vector<FilterChain> filterChains,
                                                           final boolean append,
                                                           final String inputEncoding,
                                                           final String outputEncoding,
                                                           final Project project)
         throws IOException {
-        BufferedReader in = null;
-        BufferedWriter out = null;
-        try {
-            InputStreamReader isr = null;
-            if (inputEncoding == null) {
-                isr = new InputStreamReader(source.getInputStream());
-            } else {
-                isr = new InputStreamReader(source.getInputStream(),
-                                            inputEncoding);
-            }
-            in = new BufferedReader(isr);
-            final OutputStream os = getOutputStream(dest, append, project);
-            OutputStreamWriter osw;
-            if (outputEncoding == null) {
-                osw = new OutputStreamWriter(os);
-            } else {
-                osw = new OutputStreamWriter(os, outputEncoding);
-            }
-            out = new BufferedWriter(osw);
-            if (filterChainsAvailable) {
-                final ChainReaderHelper crh = new ChainReaderHelper();
-                crh.setBufferSize(FileUtils.BUF_SIZE);
-                crh.setPrimaryReader(in);
-                crh.setFilterChains(filterChains);
-                crh.setProject(project);
-                final Reader rdr = crh.getAssembledReader();
-                in = new BufferedReader(rdr);
-            }
+        try (Reader in = filterWith(project, inputEncoding, filterChains,
+            source.getInputStream());
+                BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
+                    getOutputStream(dest, append, project),
+                    charsetFor(outputEncoding)))) {
             final char[] buffer = new char[FileUtils.BUF_SIZE];
             while (true) {
                 final int nRead = in.read(buffer, 0, buffer.length);
@@ -759,9 +704,6 @@ public class ResourceUtils {
                 }
                 out.write(buffer, 0, nRead);
             }
-        } finally {
-            FileUtils.close(out);
-            FileUtils.close(in);
         }
     }
 
@@ -776,35 +718,28 @@ public class ResourceUtils {
                                   + " for " + destFile);
         }
 
-        FileChannel srcChannel = null;
-        FileChannel destChannel = null;
-
-        try {
-            srcChannel = FileChannel.open(sourceFile.toPath(), StandardOpenOption.READ);
-            destChannel = FileChannel.open(destFile.toPath(), StandardOpenOption.CREATE,
-                StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE);
-
+        try (FileChannel srcChannel =
+            FileChannel.open(sourceFile.toPath(), StandardOpenOption.READ);
+                FileChannel destChannel = FileChannel.open(destFile.toPath(),
+                    StandardOpenOption.CREATE,
+                    StandardOpenOption.TRUNCATE_EXISTING,
+                    StandardOpenOption.WRITE)) {
             long position = 0;
             final long count = srcChannel.size();
             while (position < count) {
-                final long chunk = Math.min(MAX_IO_CHUNK_SIZE, count - position);
+                final long chunk =
+                    Math.min(MAX_IO_CHUNK_SIZE, count - position);
                 position +=
                     destChannel.transferFrom(srcChannel, position, chunk);
             }
-        } finally {
-            FileUtils.close(srcChannel);
-            FileUtils.close(destChannel);
         }
     }
 
     private static void copyUsingStreams(final Resource source, final Resource dest,
                                          final boolean append, final Project project)
         throws IOException {
-        InputStream in = null;
-        OutputStream out = null;
-        try {
-            in = source.getInputStream();
-            out = getOutputStream(dest, append, project);
+        try (InputStream in = source.getInputStream();
+                OutputStream out = getOutputStream(dest, append, project)) {
 
             final byte[] buffer = new byte[FileUtils.BUF_SIZE];
             int count = 0;
@@ -812,9 +747,6 @@ public class ResourceUtils {
                 out.write(buffer, 0, count);
                 count = in.read(buffer, 0, buffer.length);
             } while (count != -1);
-        } finally {
-            FileUtils.close(out);
-            FileUtils.close(in);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/util/ScriptFixBSFPath.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/ScriptFixBSFPath.java b/src/main/org/apache/tools/ant/util/ScriptFixBSFPath.java
index ca76e56..407c5c6 100644
--- a/src/main/org/apache/tools/ant/util/ScriptFixBSFPath.java
+++ b/src/main/org/apache/tools/ant/util/ScriptFixBSFPath.java
@@ -56,7 +56,7 @@ public class ScriptFixBSFPath {
             "xslt",       "org.apache.xpath.objects.XObject"};
 
     /** A map of languages for which the engine in located in bsf */
-    private static final Map BSF_LANGUAGE_MAP = new HashMap();
+    private static final Map<String, String> BSF_LANGUAGE_MAP = new HashMap<>();
     static {
         for (int i = 0; i < BSF_LANGUAGES.length; i = i + 2) {
             BSF_LANGUAGE_MAP.put(BSF_LANGUAGES[i], BSF_LANGUAGES[i + 1]);