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:06 UTC

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

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/FileResource.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/FileResource.java b/src/main/org/apache/tools/ant/types/resources/FileResource.java
index d427888..a1c410a 100644
--- a/src/main/org/apache/tools/ant/types/resources/FileResource.java
+++ b/src/main/org/apache/tools/ant/types/resources/FileResource.java
@@ -105,9 +105,10 @@ public class FileResource extends Resource implements Touchable, FileProvider,
      * Get the file represented by this FileResource.
      * @return the File.
      */
+    @Override
     public File getFile() {
         if (isReference()) {
-            return ((FileResource) getCheckedRef()).getFile();
+            return getCheckedRef().getFile();
         }
         dieOnCircularReference();
         synchronized (this) {
@@ -138,7 +139,7 @@ public class FileResource extends Resource implements Touchable, FileProvider,
      */
     public File getBaseDir() {
         if (isReference()) {
-            return ((FileResource) getCheckedRef()).getBaseDir();
+            return getCheckedRef().getBaseDir();
         }
         dieOnCircularReference();
         return baseDir;
@@ -148,6 +149,7 @@ public class FileResource extends Resource implements Touchable, FileProvider,
      * Overrides the super version.
      * @param r the Reference to set.
      */
+    @Override
     public void setRefid(Reference r) {
         if (file != null || baseDir != null) {
             throw tooManyAttributes();
@@ -161,9 +163,10 @@ public class FileResource extends Resource implements Touchable, FileProvider,
      * only will be returned.
      * @return the name of this resource.
      */
+    @Override
     public String getName() {
         if (isReference()) {
-            return ((Resource) getCheckedRef()).getName();
+            return getCheckedRef().getName();
         }
         File b = getBaseDir();
         return b == null ? getNotNullFile().getName()
@@ -174,8 +177,9 @@ public class FileResource extends Resource implements Touchable, FileProvider,
      * Learn whether this file exists.
      * @return true if this resource exists.
      */
+    @Override
     public boolean isExists() {
-        return isReference() ? ((Resource) getCheckedRef()).isExists()
+        return isReference() ? getCheckedRef().isExists()
             : getNotNullFile().exists();
     }
 
@@ -183,9 +187,10 @@ public class FileResource extends Resource implements Touchable, FileProvider,
      * Get the modification time in milliseconds since 01.01.1970 .
      * @return 0 if the resource does not exist.
      */
+    @Override
     public long getLastModified() {
         return isReference()
-            ? ((Resource) getCheckedRef()).getLastModified()
+            ? getCheckedRef().getLastModified()
             : getNotNullFile().lastModified();
     }
 
@@ -193,8 +198,9 @@ public class FileResource extends Resource implements Touchable, FileProvider,
      * Learn whether the resource is a directory.
      * @return boolean flag indicating if the resource is a directory.
      */
+    @Override
     public boolean isDirectory() {
-        return isReference() ? ((Resource) getCheckedRef()).isDirectory()
+        return isReference() ? getCheckedRef().isDirectory()
             : getNotNullFile().isDirectory();
     }
 
@@ -202,8 +208,9 @@ public class FileResource extends Resource implements Touchable, FileProvider,
      * Get the size of this Resource.
      * @return the size, as a long, 0 if the Resource does not exist.
      */
+    @Override
     public long getSize() {
-        return isReference() ? ((Resource) getCheckedRef()).getSize()
+        return isReference() ? getCheckedRef().getSize()
             : getNotNullFile().length();
     }
 
@@ -212,9 +219,9 @@ public class FileResource extends Resource implements Touchable, FileProvider,
      * @return an InputStream object.
      * @throws IOException if an error occurs.
      */
+    @Override
     public InputStream getInputStream() throws IOException {
-        return isReference()
-            ? ((Resource) getCheckedRef()).getInputStream()
+        return isReference() ? getCheckedRef().getInputStream()
             : Files.newInputStream(getNotNullFile().toPath());
     }
 
@@ -226,9 +233,10 @@ public class FileResource extends Resource implements Touchable, FileProvider,
      * @throws UnsupportedOperationException if OutputStreams are not
      *         supported for this Resource type.
      */
+    @Override
     public OutputStream getOutputStream() throws IOException {
         if (isReference()) {
-            return ((FileResource) getCheckedRef()).getOutputStream();
+            return getCheckedRef().getOutputStream();
         }
         return getOutputStream(false);
     }
@@ -236,9 +244,10 @@ public class FileResource extends Resource implements Touchable, FileProvider,
     /**
      * {@inheritDoc}
      */
+    @Override
     public OutputStream getAppendOutputStream() throws IOException {
         if (isReference()) {
-            return ((FileResource) getCheckedRef()).getAppendOutputStream();
+            return getCheckedRef().getAppendOutputStream();
         }
         return getOutputStream(true);
     }
@@ -264,9 +273,10 @@ public class FileResource extends Resource implements Touchable, FileProvider,
      * @return a negative integer, zero, or a positive integer as this FileResource
      *         is less than, equal to, or greater than the specified Resource.
      */
+    @Override
     public int compareTo(Resource another) {
         if (isReference()) {
-            return ((Resource) getCheckedRef()).compareTo(another);
+            return getCheckedRef().compareTo(another);
         }
         if (this.equals(another)) {
             return 0;
@@ -293,6 +303,7 @@ public class FileResource extends Resource implements Touchable, FileProvider,
      * @param another the other Object to compare.
      * @return true if another is a FileResource representing the same file.
      */
+    @Override
     public boolean equals(Object another) {
         if (this == another) {
             return true;
@@ -313,6 +324,7 @@ public class FileResource extends Resource implements Touchable, FileProvider,
      * Get the hash code for this Resource.
      * @return hash code as int.
      */
+    @Override
     public int hashCode() {
         if (isReference()) {
             return getCheckedRef().hashCode();
@@ -324,6 +336,7 @@ public class FileResource extends Resource implements Touchable, FileProvider,
      * Get the string representation of this Resource.
      * @return this FileResource formatted as a String.
      */
+    @Override
     public String toString() {
         if (isReference()) {
             return getCheckedRef().toString();
@@ -339,9 +352,10 @@ public class FileResource extends Resource implements Touchable, FileProvider,
      * Fulfill the ResourceCollection contract.
      * @return whether this Resource is a FileResource.
      */
+    @Override
     public boolean isFilesystemOnly() {
         if (isReference()) {
-            return ((FileResource) getCheckedRef()).isFilesystemOnly();
+            return getCheckedRef().isFilesystemOnly();
         }
         dieOnCircularReference();
         return true;
@@ -351,9 +365,10 @@ public class FileResource extends Resource implements Touchable, FileProvider,
      * Implement the Touchable interface.
      * @param modTime new last modification time.
      */
+    @Override
     public void touch(long modTime) {
         if (isReference()) {
-            ((FileResource) getCheckedRef()).touch(modTime);
+            getCheckedRef().touch(modTime);
             return;
         }
         if (!getNotNullFile().setLastModified(modTime)) {
@@ -382,6 +397,7 @@ public class FileResource extends Resource implements Touchable, FileProvider,
      * @throws BuildException if desired
      * @since Ant1.8
      */
+    @Override
     public Resource getResource(String path) {
         File newfile = FILE_UTILS.resolveFile(getFile(), path);
         FileResource fileResource = new FileResource(newfile);
@@ -390,4 +406,9 @@ public class FileResource extends Resource implements Touchable, FileProvider,
         }
         return fileResource;
     }
+    
+    @Override
+    protected FileResource getCheckedRef() {
+        return (FileResource) super.getCheckedRef();
+    }
 }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/FileResourceIterator.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/FileResourceIterator.java b/src/main/org/apache/tools/ant/types/resources/FileResourceIterator.java
index 6d8849c..2584117 100644
--- a/src/main/org/apache/tools/ant/types/resources/FileResourceIterator.java
+++ b/src/main/org/apache/tools/ant/types/resources/FileResourceIterator.java
@@ -114,6 +114,7 @@ public class FileResourceIterator implements Iterator<Resource> {
      * Find out whether this FileResourceIterator has more elements.
      * @return whether there are more Resources to iterate over.
      */
+    @Override
     public boolean hasNext() {
         return pos < files.length;
     }
@@ -122,6 +123,7 @@ public class FileResourceIterator implements Iterator<Resource> {
      * Get the next element from this FileResourceIterator.
      * @return the next Object.
      */
+    @Override
     public Resource next() {
         return nextResource();
     }
@@ -129,6 +131,7 @@ public class FileResourceIterator implements Iterator<Resource> {
     /**
      * Not implemented.
      */
+    @Override
     public void remove() {
         throw new UnsupportedOperationException();
     }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/Files.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/Files.java b/src/main/org/apache/tools/ant/types/resources/Files.java
index 521bcc8..00e5d4d 100644
--- a/src/main/org/apache/tools/ant/types/resources/Files.java
+++ b/src/main/org/apache/tools/ant/types/resources/Files.java
@@ -21,6 +21,7 @@ import java.io.File;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.Vector;
+import java.util.stream.Collectors;
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.DirectoryScanner;
@@ -39,11 +40,8 @@ import org.apache.tools.ant.types.selectors.FileSelector;
 public class Files extends AbstractSelectorContainer
     implements ResourceCollection {
 
-    private static final Iterator<Resource> EMPTY_ITERATOR
-        = Collections.<Resource>emptySet().iterator();
-
     private PatternSet defaultPatterns = new PatternSet();
-    private Vector<PatternSet> additionalPatterns = new Vector<PatternSet>();
+    private Vector<PatternSet> additionalPatterns = new Vector<>();
 
     private boolean useDefaultExcludes = true;
     private boolean caseSensitive = true;
@@ -82,6 +80,7 @@ public class Files extends AbstractSelectorContainer
      * @param r the <code>Reference</code> to use.
      * @throws BuildException if there is a problem.
      */
+    @Override
     public void setRefid(Reference r) throws BuildException {
         if (hasPatterns(defaultPatterns)) {
             throw tooManyAttributes();
@@ -258,7 +257,7 @@ public class Files extends AbstractSelectorContainer
      * @return the defaultexclusions value.
      */
     public synchronized boolean getDefaultexcludes() {
-        return (isReference())
+        return isReference()
             ? getRef().getDefaultexcludes() : useDefaultExcludes;
     }
 
@@ -280,7 +279,7 @@ public class Files extends AbstractSelectorContainer
      * collection is case-sensitive.
      */
     public synchronized boolean isCaseSensitive() {
-        return (isReference())
+        return isReference()
             ? getRef().isCaseSensitive() : caseSensitive;
     }
 
@@ -302,7 +301,7 @@ public class Files extends AbstractSelectorContainer
      *         should be followed.
      */
     public synchronized boolean isFollowSymlinks() {
-        return (isReference())
+        return isReference()
             ? getRef().isFollowSymlinks() : followSymlinks;
     }
 
@@ -310,6 +309,7 @@ public class Files extends AbstractSelectorContainer
      * Fulfill the ResourceCollection contract.
      * @return an Iterator of Resources.
      */
+    @Override
     public synchronized Iterator<Resource> iterator() {
         if (isReference()) {
             return getRef().iterator();
@@ -319,7 +319,7 @@ public class Files extends AbstractSelectorContainer
         int fct = ds.getIncludedFilesCount();
         int dct = ds.getIncludedDirsCount();
         if (fct + dct == 0) {
-            return EMPTY_ITERATOR;
+            return Collections.emptyIterator();
         }
         FileResourceIterator result = new FileResourceIterator(getProject());
         if (fct > 0) {
@@ -335,6 +335,7 @@ public class Files extends AbstractSelectorContainer
      * Fulfill the ResourceCollection contract.
      * @return number of elements as int.
      */
+    @Override
     public synchronized int size() {
         if (isReference()) {
             return getRef().size();
@@ -354,15 +355,8 @@ public class Files extends AbstractSelectorContainer
             return getRef().hasPatterns();
         }
         dieOnCircularReference();
-        if (hasPatterns(defaultPatterns)) {
-            return true;
-        }
-        for (PatternSet patternSet : additionalPatterns) {
-            if (hasPatterns(patternSet)) {
-                return true;
-            }
-        }
-        return false;
+        return hasPatterns(defaultPatterns)
+            || additionalPatterns.stream().anyMatch(this::hasPatterns);
     }
 
     /**
@@ -370,6 +364,7 @@ public class Files extends AbstractSelectorContainer
      *
      * @param selector the new <code>FileSelector</code> to add.
      */
+    @Override
     public synchronized void appendSelector(FileSelector selector) {
         if (isReference()) {
             throw noChildrenAllowed();
@@ -382,22 +377,13 @@ public class Files extends AbstractSelectorContainer
      * Format this Files collection as a String.
      * @return a descriptive <code>String</code>.
      */
+    @Override
     public String toString() {
         if (isReference()) {
             return getRef().toString();
         }
-        Iterator<Resource> i = iterator();
-        if (!i.hasNext()) {
-            return "";
-        }
-        StringBuffer sb = new StringBuffer();
-        while (i.hasNext()) {
-            if (sb.length() > 0) {
-                sb.append(File.pathSeparatorChar);
-            }
-            sb.append(i.next());
-        }
-        return sb.toString();
+        return isEmpty() ? "" : stream().map(Object::toString)
+            .collect(Collectors.joining(File.pathSeparator));
     }
 
     /**
@@ -405,7 +391,8 @@ public class Files extends AbstractSelectorContainer
      * (the list of selectors is a shallow clone of this instance's list).
      * @return a cloned Object.
      */
-    public synchronized Object clone() {
+    @Override
+    public synchronized Files clone() {
         if (isReference()) {
             return getRef().clone();
         }
@@ -451,11 +438,7 @@ public class Files extends AbstractSelectorContainer
         dieOnCircularReference();
         PatternSet ps = new PatternSet();
         ps.append(defaultPatterns, p);
-        final int count = additionalPatterns.size();
-        for (int i = 0; i < count; i++) {
-            Object o = additionalPatterns.elementAt(i);
-            ps.append((PatternSet) o, p);
-        }
+        additionalPatterns.forEach(pat -> ps.append(pat, p));
         return ps;
     }
 
@@ -464,6 +447,7 @@ public class Files extends AbstractSelectorContainer
      * @return true indicating that all elements of a Files collection
      *              will be FileResources.
      */
+    @Override
     public boolean isFilesystemOnly() {
         return true;
     }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/First.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/First.java b/src/main/org/apache/tools/ant/types/resources/First.java
index ea9e7d0..05cf1e2 100644
--- a/src/main/org/apache/tools/ant/types/resources/First.java
+++ b/src/main/org/apache/tools/ant/types/resources/First.java
@@ -17,10 +17,8 @@
  */
 package org.apache.tools.ant.types.resources;
 
-import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
+import java.util.stream.Collectors;
 
 import org.apache.tools.ant.types.Resource;
 
@@ -35,14 +33,10 @@ public class First extends SizeLimitCollection {
      * Take the first <code>count</code> elements.
      * @return a Collection of Resources.
      */
+    @Override
     protected Collection<Resource> getCollection() {
-        int ct = getValidCount();
-        Iterator<Resource> iter = getResourceCollection().iterator();
-        List<Resource> al = new ArrayList<Resource>(ct);
-        for (int i = 0; i < ct && iter.hasNext(); i++) {
-            al.add(iter.next());
-        }
-        return al;
+        return getResourceCollection().stream().limit(getValidCount())
+            .collect(Collectors.toList());
     }
 
 }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/GZipResource.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/GZipResource.java b/src/main/org/apache/tools/ant/types/resources/GZipResource.java
index 3f95a69..e37b539 100644
--- a/src/main/org/apache/tools/ant/types/resources/GZipResource.java
+++ b/src/main/org/apache/tools/ant/types/resources/GZipResource.java
@@ -23,6 +23,8 @@ import java.io.OutputStream;
 import java.util.zip.GZIPInputStream;
 import java.util.zip.GZIPOutputStream;
 
+import org.apache.tools.ant.types.ResourceCollection;
+
 /**
  * A GZip compressed resource.
  *
@@ -41,7 +43,7 @@ public class GZipResource extends CompressedResource {
      * Constructor with another resource to wrap.
      * @param other the resource to wrap.
      */
-    public GZipResource(org.apache.tools.ant.types.ResourceCollection other) {
+    public GZipResource(ResourceCollection other) {
         super(other);
     }
 
@@ -51,6 +53,7 @@ public class GZipResource extends CompressedResource {
      * @return the wrapped stream.
      * @throws IOException if there is a problem.
      */
+    @Override
     protected InputStream wrapStream(InputStream in) throws IOException {
         return new GZIPInputStream(in);
     }
@@ -61,7 +64,8 @@ public class GZipResource extends CompressedResource {
      * @return the wrapped stream.
      * @throws IOException if there is a problem.
      */
-     protected OutputStream wrapStream(OutputStream out) throws IOException {
+    @Override
+    protected OutputStream wrapStream(OutputStream out) throws IOException {
         return new GZIPOutputStream(out);
     }
 
@@ -69,6 +73,7 @@ public class GZipResource extends CompressedResource {
      * Get the name of the compression method.
      * @return the string "GZip".
      */
+    @Override
     protected String getCompressionName() {
         return "GZip";
     }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/Intersect.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/Intersect.java b/src/main/org/apache/tools/ant/types/resources/Intersect.java
index cdbeed0..667d259 100644
--- a/src/main/org/apache/tools/ant/types/resources/Intersect.java
+++ b/src/main/org/apache/tools/ant/types/resources/Intersect.java
@@ -22,11 +22,14 @@ import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.types.Resource;
 import org.apache.tools.ant.types.ResourceCollection;
 
+
 /**
  * ResourceCollection representing the intersection
  * of multiple nested ResourceCollections.
@@ -38,27 +41,23 @@ public class Intersect extends BaseResourceCollectionContainer {
      * Calculate the intersection of the nested ResourceCollections.
      * @return a Collection of Resources.
      */
+    @Override
     protected Collection<Resource> getCollection() {
         List<ResourceCollection> rcs = getResourceCollections();
         int size = rcs.size();
         if (size < 2) {
-            throw new BuildException("The intersection of " + size
-                + " resource collection" + ((size == 1) ? "" : "s")
-                + " is undefined.");
+            throw new BuildException(
+                "The intersection of %d resource %s is undefined.", size,
+                size == 1 ? "collection" : "collections");
         }
+
+        final Function<ResourceCollection, Set<Resource>> toSet =
+            c -> c.stream().collect(Collectors.toSet());
+
         Iterator<ResourceCollection> rc = rcs.iterator();
-        Set<Resource> s = new LinkedHashSet<Resource>(collect(rc.next()));
-        while (rc.hasNext()) {
-            s.retainAll(collect(rc.next()));
-        }
+        Set<Resource> s = new LinkedHashSet<>(toSet.apply(rc.next()));
+        rc.forEachRemaining(c -> s.retainAll(toSet.apply(c)));
         return s;
     }
 
-    private Set<Resource> collect(ResourceCollection rc) {
-        Set<Resource> result = new LinkedHashSet<Resource>();
-        for (Resource r : rc) {
-            result.add(r);
-        }
-        return result;
-    }
 }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/JavaConstantResource.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/JavaConstantResource.java b/src/main/org/apache/tools/ant/types/resources/JavaConstantResource.java
index e8c8f02..9ce721b 100644
--- a/src/main/org/apache/tools/ant/types/resources/JavaConstantResource.java
+++ b/src/main/org/apache/tools/ant/types/resources/JavaConstantResource.java
@@ -36,6 +36,7 @@ public class JavaConstantResource extends AbstractClasspathResource {
      * @return an open input stream for the resource
      * @throws IOException if an error occurs.
      */
+    @Override
     protected InputStream openInputStream(ClassLoader cl) throws IOException {
         String constant = getName();
         if (constant == null) {

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/JavaResource.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/JavaResource.java b/src/main/org/apache/tools/ant/types/resources/JavaResource.java
index a927d3f..d6467e8 100644
--- a/src/main/org/apache/tools/ant/types/resources/JavaResource.java
+++ b/src/main/org/apache/tools/ant/types/resources/JavaResource.java
@@ -79,20 +79,20 @@ public class JavaResource extends AbstractClasspathResource
      * Get the URL represented by this Resource.
      * @since Ant 1.8.0
      */
+    @Override
     public URL getURL() {
         if (isReference()) {
-            return ((JavaResource) getCheckedRef()).getURL();
+            return getCheckedRef().getURL();
         }
         AbstractClasspathResource.ClassLoaderWithFlag classLoader =
             getClassLoader();
         if (classLoader.getLoader() == null) {
             return ClassLoader.getSystemResource(getName());
-        } else {
-            try {
-                return classLoader.getLoader().getResource(getName());
-            } finally {
-                classLoader.cleanup();
-            }
+        }
+        try {
+            return classLoader.getLoader().getResource(getName());
+        } finally {
+            classLoader.cleanup();
         }
     }
 
@@ -103,9 +103,10 @@ public class JavaResource extends AbstractClasspathResource
      * JavaResource is less than, equal to, or greater than the
      * specified Resource.
      */
+    @Override
     public int compareTo(Resource another) {
         if (isReference()) {
-            return ((Resource) getCheckedRef()).compareTo(another);
+            return getCheckedRef().compareTo(another);
         }
         if (another.getClass().equals(getClass())) {
             JavaResource otherjr = (JavaResource) another;
@@ -138,4 +139,8 @@ public class JavaResource extends AbstractClasspathResource
         return super.compareTo(another);
     }
 
+    @Override
+    protected JavaResource getCheckedRef() {
+        return (JavaResource) super.getCheckedRef();
+    }
 }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/Last.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/Last.java b/src/main/org/apache/tools/ant/types/resources/Last.java
index 312271b..575e768 100644
--- a/src/main/org/apache/tools/ant/types/resources/Last.java
+++ b/src/main/org/apache/tools/ant/types/resources/Last.java
@@ -17,10 +17,9 @@
  */
 package org.apache.tools.ant.types.resources;
 
-import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Iterator;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
@@ -38,33 +37,29 @@ public class Last extends SizeLimitCollection {
      * Take the last <code>count</code> elements.
      * @return a Collection of Resources.
      */
+    @Override
     protected Collection<Resource> getCollection() {
         int count = getValidCount();
         ResourceCollection rc = getResourceCollection();
-        int i = count;
-        Iterator<Resource> iter = rc.iterator();
         int size = rc.size();
-        for (; i < size; i++) {
-            iter.next();
-        }
+        int skip = Math.max(0, size - count);
 
-        List<Resource> al = new ArrayList<Resource>(count);
-        for (; iter.hasNext(); i++) {
-            al.add(iter.next());
-        }
-        int found = al.size();
+        List<Resource> result =
+            rc.stream().skip(skip).collect(Collectors.toList());
+
+        int found = result.size();
         if (found == count || (size < count && found == size)) {
-            return al;
+            return result;
         }
-
         //mismatch:
-        String msg = "Resource collection " + rc + " reports size " + size
-            + " but returns " + i + " elements.";
+        String msg = String.format(
+            "Resource collection %s reports size %d but returns %d elements.",
+            rc, size, found + skip);
 
         //size was understated -> too many results; warn and continue:
         if (found > count) {
             log(msg, Project.MSG_WARN);
-            return al.subList(found - count, found);
+            return result.subList(found - count, found);
         }
         //size was overstated; we missed some and are now in error-land:
         throw new BuildException(msg);

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/LazyResourceCollectionWrapper.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/LazyResourceCollectionWrapper.java b/src/main/org/apache/tools/ant/types/resources/LazyResourceCollectionWrapper.java
index 4f9acd3..e7b2fca 100644
--- a/src/main/org/apache/tools/ant/types/resources/LazyResourceCollectionWrapper.java
+++ b/src/main/org/apache/tools/ant/types/resources/LazyResourceCollectionWrapper.java
@@ -21,6 +21,7 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 import java.util.NoSuchElementException;
+import java.util.function.Supplier;
 
 import org.apache.tools.ant.types.Resource;
 
@@ -32,24 +33,23 @@ public class LazyResourceCollectionWrapper extends
         AbstractResourceCollectionWrapper {
 
     /** List of cached resources */
-    private final List<Resource> cachedResources = new ArrayList<Resource>();
+    private final List<Resource> cachedResources = new ArrayList<>();
 
-    private FilteringIterator filteringIterator;
+    private Iterator<Resource> filteringIterator;
+
+    private final Supplier<Iterator<Resource>> filteringIteratorSupplier =
+        () -> new FilteringIterator(getResourceCollection().iterator());
 
     @Override
     protected Iterator<Resource> createIterator() {
-        Iterator<Resource> iterator;
         if (isCache()) {
             if (filteringIterator == null) {
                 // no worry of thread safety here, see function's contract
-                filteringIterator = new FilteringIterator(
-                        getResourceCollection().iterator());
+                filteringIterator = filteringIteratorSupplier.get();
             }
-            iterator = new CachedIterator(filteringIterator);
-        } else {
-            iterator = new FilteringIterator(getResourceCollection().iterator());
+            return new CachedIterator(filteringIterator);
         }
-        return iterator;
+        return filteringIteratorSupplier.get();
     }
 
     @Override
@@ -84,10 +84,11 @@ public class LazyResourceCollectionWrapper extends
 
         protected final Iterator<Resource> it;
 
-        public FilteringIterator(final Iterator<Resource> it) {
+        FilteringIterator(final Iterator<Resource> it) {
             this.it = it;
         }
 
+        @Override
         public boolean hasNext() {
             if (ended) {
                 return false;
@@ -105,6 +106,7 @@ public class LazyResourceCollectionWrapper extends
             return true;
         }
 
+        @Override
         public Resource next() {
             if (!hasNext()) {
                 throw new UnsupportedOperationException();
@@ -114,9 +116,6 @@ public class LazyResourceCollectionWrapper extends
             return r;
         }
 
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
     }
 
     /**
@@ -125,7 +124,7 @@ public class LazyResourceCollectionWrapper extends
      */
     private class CachedIterator implements Iterator<Resource> {
 
-        int cusrsor = 0;
+        int cursor = 0;
 
         private final Iterator<Resource> it;
 
@@ -140,10 +139,11 @@ public class LazyResourceCollectionWrapper extends
             this.it = it;
         }
 
+        @Override
         public boolean hasNext() {
             synchronized (cachedResources) {
                 // have we already cached the next entry ?
-                if (cachedResources.size() > cusrsor) {
+                if (cachedResources.size() > cursor) {
                     return true;
                 }
                 // does the wrapped iterator any more resource ?
@@ -157,6 +157,7 @@ public class LazyResourceCollectionWrapper extends
             return true;
         }
 
+        @Override
         public Resource next() {
             // first check that we have some to deliver
             if (!hasNext()) {
@@ -165,10 +166,11 @@ public class LazyResourceCollectionWrapper extends
             synchronized (cachedResources) {
                 // return the cached entry as hasNext should have put one for
                 // this iterator
-                return cachedResources.get(cusrsor++);
+                return cachedResources.get(cursor++);
             }
         }
 
+        @Override
         public void remove() {
             throw new UnsupportedOperationException();
         }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/LogOutputResource.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/LogOutputResource.java b/src/main/org/apache/tools/ant/types/resources/LogOutputResource.java
index cd19c9c..1e91a88 100644
--- a/src/main/org/apache/tools/ant/types/resources/LogOutputResource.java
+++ b/src/main/org/apache/tools/ant/types/resources/LogOutputResource.java
@@ -55,6 +55,7 @@ public class LogOutputResource extends Resource implements Appendable {
     /**
      * {@inheritDoc}
      */
+    @Override
     public OutputStream getAppendOutputStream() throws IOException {
         return outputStream;
     }
@@ -62,6 +63,7 @@ public class LogOutputResource extends Resource implements Appendable {
     /**
      * {@inheritDoc}
      */
+    @Override
     public OutputStream getOutputStream() throws IOException {
         return outputStream;
     }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/MappedResourceCollection.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/MappedResourceCollection.java b/src/main/org/apache/tools/ant/types/resources/MappedResourceCollection.java
index 2f1a926..13d84d1 100644
--- a/src/main/org/apache/tools/ant/types/resources/MappedResourceCollection.java
+++ b/src/main/org/apache/tools/ant/types/resources/MappedResourceCollection.java
@@ -18,10 +18,11 @@
 package org.apache.tools.ant.types.resources;
 
 import java.io.File;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.Stack;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
@@ -121,10 +122,10 @@ public class MappedResourceCollection
     /**
      * {@inheritDoc}
      */
+    @Override
     public boolean isFilesystemOnly() {
         if (isReference()) {
-            return ((MappedResourceCollection) getCheckedRef())
-                .isFilesystemOnly();
+            return getCheckedRef().isFilesystemOnly();
         }
         checkInitialized();
         return false;
@@ -133,9 +134,10 @@ public class MappedResourceCollection
     /**
      * {@inheritDoc}
      */
+    @Override
     public int size() {
         if (isReference()) {
-            return ((MappedResourceCollection) getCheckedRef()).size();
+            return getCheckedRef().size();
         }
         checkInitialized();
         return cacheCollection().size();
@@ -144,9 +146,10 @@ public class MappedResourceCollection
     /**
      * {@inheritDoc}
      */
+    @Override
     public Iterator<Resource> iterator() {
         if (isReference()) {
-            return ((MappedResourceCollection) getCheckedRef()).iterator();
+            return getCheckedRef().iterator();
         }
         checkInitialized();
         return cacheCollection().iterator();
@@ -156,6 +159,7 @@ public class MappedResourceCollection
      * Overrides the base version.
      * @param r the Reference to set.
      */
+    @Override
     public void setRefid(Reference r) {
         if (nested != null || mapper != null) {
             throw tooManyAttributes();
@@ -167,7 +171,8 @@ public class MappedResourceCollection
      * Implement clone.  The nested resource collection and mapper are copied.
      * @return a cloned instance.
      */
-    public Object clone() {
+    @Override
+    public MappedResourceCollection clone() {
         try {
             MappedResourceCollection c =
                 (MappedResourceCollection) super.clone();
@@ -187,6 +192,7 @@ public class MappedResourceCollection
      * @param p   the project to use to dereference the references.
      * @throws BuildException on error.
      */
+    @Override
     protected synchronized void dieOnCircularReference(Stack<Object> stk, Project p)
         throws BuildException {
         if (isChecked()) {
@@ -208,8 +214,9 @@ public class MappedResourceCollection
 
     private void checkInitialized() {
         if (nested == null) {
-            throw new BuildException("A nested resource collection element is"
-                                     + " required", getLocation());
+            throw new BuildException(
+                "A nested resource collection element is required",
+                getLocation());
         }
         dieOnCircularReference();
     }
@@ -222,46 +229,36 @@ public class MappedResourceCollection
     }
 
     private Collection<Resource> getCollection() {
-        Collection<Resource> collected = new ArrayList<Resource>();
         FileNameMapper m =
-            mapper != null ? mapper.getImplementation() : new IdentityMapper();
-        for (Resource r : nested) {
-            if (enableMultipleMappings) {
-                String[] n = m.mapFileName(r.getName());
-                if (n != null) {
-                    for (int i = 0; i < n.length; i++) {
-                        collected.add(new MappedResource(r,
-                                                         new MergingMapper(n[i]))
-                                      );
-                    }
-                }
-            } else {
-                collected.add(new MappedResource(r, m));
-            }
+            mapper == null ? new IdentityMapper() : mapper.getImplementation();
+
+        Stream<MappedResource> stream;
+        if (enableMultipleMappings) {
+            stream = nested.stream()
+                .flatMap(r -> Stream.of(m.mapFileName(r.getName()))
+                    .map(MergingMapper::new)
+                    .map(mm -> new MappedResource(r, mm)));
+        } else {
+            stream = nested.stream().map(r -> new MappedResource(r, m));
         }
-        return collected;
+        return stream.collect(Collectors.toList());
     }
 
     /**
      * Format this resource collection as a String.
      * @return a descriptive <code>String</code>.
      */
+    @Override
     public String toString() {
         if (isReference()) {
             return getCheckedRef().toString();
         }
-        Iterator<Resource> i = iterator();
-        if (!i.hasNext()) {
-            return "";
-        }
-        StringBuffer sb = new StringBuffer();
-        while (i.hasNext()) {
-            if (sb.length() > 0) {
-                sb.append(File.pathSeparatorChar);
-            }
-            sb.append(i.next());
-        }
-        return sb.toString();
+        return isEmpty() ? "" : stream().map(Object::toString)
+            .collect(Collectors.joining(File.pathSeparator));
     }
 
+    @Override
+    protected MappedResourceCollection getCheckedRef() {
+        return (MappedResourceCollection) super.getCheckedRef();
+    }
 }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/MultiRootFileSet.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/MultiRootFileSet.java b/src/main/org/apache/tools/ant/types/resources/MultiRootFileSet.java
index d793890..4628bdf 100644
--- a/src/main/org/apache/tools/ant/types/resources/MultiRootFileSet.java
+++ b/src/main/org/apache/tools/ant/types/resources/MultiRootFileSet.java
@@ -112,21 +112,21 @@ public class MultiRootFileSet extends AbstractFileSet
      * @return the cloned MultiRootFileSet.
      */
     @Override
-    public Object clone() {
+    public MultiRootFileSet clone() {
         if (isReference()) {
             return ((MultiRootFileSet) getRef(getProject())).clone();
-        } else {
-            final MultiRootFileSet fs = (MultiRootFileSet) super.clone();
-            fs.baseDirs = new ArrayList<File>(baseDirs);
-            fs.union = null;
-            return fs;
         }
+        final MultiRootFileSet fs = (MultiRootFileSet) super.clone();
+        fs.baseDirs = new ArrayList<>(baseDirs);
+        fs.union = null;
+        return fs;
     }
 
     /**
      * Fulfill the ResourceCollection contract.
      * @return an Iterator of Resources.
      */
+    @Override
     public Iterator<Resource> iterator() {
         if (isReference()) {
             return ((MultiRootFileSet) getRef(getProject())).iterator();
@@ -138,6 +138,7 @@ public class MultiRootFileSet extends AbstractFileSet
      * Fulfill the ResourceCollection contract.
      * @return number of elements as int.
      */
+    @Override
     public int size() {
         if (isReference()) {
             return ((MultiRootFileSet) getRef(getProject())).size();
@@ -149,6 +150,7 @@ public class MultiRootFileSet extends AbstractFileSet
      * Always returns true.
      * @return true indicating that all elements will be FileResources.
      */
+    @Override
     public boolean isFilesystemOnly() {
         return true;
     }
@@ -202,10 +204,12 @@ public class MultiRootFileSet extends AbstractFileSet
             setDir(dir);
         }
 
+        @Override
         public boolean isFilesystemOnly() {
             return true;
         }
 
+        @Override
         public Iterator<Resource> iterator() {
             final DirectoryScanner ds = getDirectoryScanner(getProject());
             String[] names = type == SetType.file
@@ -222,6 +226,7 @@ public class MultiRootFileSet extends AbstractFileSet
                                             names);
         }
 
+        @Override
         public int size() {
             final DirectoryScanner ds = getDirectoryScanner(getProject());
             int count = type == SetType.file

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/PropertyResource.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/PropertyResource.java b/src/main/org/apache/tools/ant/types/resources/PropertyResource.java
index a7cecb4..d72881d 100644
--- a/src/main/org/apache/tools/ant/types/resources/PropertyResource.java
+++ b/src/main/org/apache/tools/ant/types/resources/PropertyResource.java
@@ -39,6 +39,7 @@ public class PropertyResource extends Resource {
         = Resource.getMagicNumber("PropertyResource".getBytes());
 
     private static final InputStream UNSET = new InputStream() {
+        @Override
         public int read() {
             return -1;
         }
@@ -66,7 +67,7 @@ public class PropertyResource extends Resource {
      */
     public String getValue() {
         if (isReference()) {
-            return ((PropertyResource) getCheckedRef()).getValue();
+            return getCheckedRef().getValue();
         }
         Project p = getProject();
         return p == null ? null : p.getProperty(getName());
@@ -79,7 +80,7 @@ public class PropertyResource extends Resource {
      */
     public Object getObjectValue() {
         if (isReference()) {
-            return ((PropertyResource) getCheckedRef()).getObjectValue();
+            return getCheckedRef().getObjectValue();
         }
         Project p = getProject();
         return p == null ? null : PropertyHelper.getProperty(p, getName());
@@ -89,6 +90,7 @@ public class PropertyResource extends Resource {
      * Find out whether this Resource exists.
      * @return true if the Property is set, false otherwise.
      */
+    @Override
     public boolean isExists() {
         if (isReferenceOrProxy()) {
             return getReferencedOrProxied().isExists();
@@ -101,6 +103,7 @@ public class PropertyResource extends Resource {
      * @return the size, as a long, 0 if the Resource does not exist (for
      *         compatibility with java.io.File), or UNKNOWN_SIZE if not known.
      */
+    @Override
     public long getSize() {
         if (isReferenceOrProxy()) {
             return getReferencedOrProxied().getSize();
@@ -115,6 +118,7 @@ public class PropertyResource extends Resource {
      * @param o object to compare
      * @return true if equal to o
      */
+    @Override
     public boolean equals(Object o) {
         if (super.equals(o)) {
             return true;
@@ -126,6 +130,7 @@ public class PropertyResource extends Resource {
      * Get the hash code for this Resource.
      * @return hash code as int.
      */
+    @Override
     public int hashCode() {
         if (isReferenceOrProxy()) {
             return getReferencedOrProxied().hashCode();
@@ -136,6 +141,7 @@ public class PropertyResource extends Resource {
     /**
      * {@inheritDoc}
      */
+    @Override
     public String toString() {
         if (isReferenceOrProxy()) {
             return getReferencedOrProxied().toString();
@@ -151,6 +157,7 @@ public class PropertyResource extends Resource {
      * @throws UnsupportedOperationException if InputStreams are not
      *         supported for this Resource type.
      */
+    @Override
     public InputStream getInputStream() throws IOException {
         if (isReferenceOrProxy()) {
             return getReferencedOrProxied().getInputStream();
@@ -167,6 +174,7 @@ public class PropertyResource extends Resource {
      * @throws UnsupportedOperationException if OutputStreams are not
      *         supported for this Resource type.
      */
+    @Override
     public OutputStream getOutputStream() throws IOException {
         if (isReferenceOrProxy()) {
             return getReferencedOrProxied().getOutputStream();
@@ -194,7 +202,7 @@ public class PropertyResource extends Resource {
      */
     protected Resource getReferencedOrProxied() {
         if (isReference()) {
-            return (Resource) getCheckedRef(Resource.class, "resource");
+            return getCheckedRef(Resource.class, "resource");
         }
         Object o = getObjectValue();
         if (o instanceof Resource) {
@@ -203,4 +211,9 @@ public class PropertyResource extends Resource {
         throw new IllegalStateException(
                 "This PropertyResource does not reference or proxy another Resource");
     }
+
+    @Override
+    protected PropertyResource getCheckedRef() {
+        return (PropertyResource) super.getCheckedRef();
+    }
 }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/ResourceDecorator.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/ResourceDecorator.java b/src/main/org/apache/tools/ant/types/resources/ResourceDecorator.java
index 9eb8c1d..1856d85 100644
--- a/src/main/org/apache/tools/ant/types/resources/ResourceDecorator.java
+++ b/src/main/org/apache/tools/ant/types/resources/ResourceDecorator.java
@@ -59,12 +59,12 @@ public abstract class ResourceDecorator extends Resource {
     public final void addConfigured(ResourceCollection a) {
         checkChildrenAllowed();
         if (resource != null) {
-            throw new BuildException("you must not specify more than one"
-                                     + " resource");
+            throw new BuildException(
+                "you must not specify more than one resource");
         }
         if (a.size() != 1) {
-            throw new BuildException("only single argument resource collections"
-                                     + " are supported");
+            throw new BuildException(
+                "only single argument resource collections are supported");
         }
         setChecked(false);
         resource = a.iterator().next();
@@ -237,6 +237,7 @@ public abstract class ResourceDecorator extends Resource {
      * @param name not used.
      * @throws BuildException always.
      */
+    @Override
     public void setName(String name) throws BuildException {
         throw new BuildException("you can't change the name of a "
                                  + getDataTypeName());
@@ -246,6 +247,7 @@ public abstract class ResourceDecorator extends Resource {
      * Set the exists attribute.
      * @param exists if true, this resource exists.
      */
+    @Override
     public void setExists(boolean exists) {
         throw new BuildException("you can't change the exists state of a "
                                  + getDataTypeName());
@@ -256,6 +258,7 @@ public abstract class ResourceDecorator extends Resource {
      * @param lastmodified not used.
      * @throws BuildException always.
      */
+    @Override
     public void setLastModified(long lastmodified) throws BuildException {
         throw new BuildException("you can't change the timestamp of a "
                                  + getDataTypeName());
@@ -266,6 +269,7 @@ public abstract class ResourceDecorator extends Resource {
      * @param directory not used.
      * @throws BuildException always.
      */
+    @Override
     public void setDirectory(boolean directory) throws BuildException {
         throw new BuildException("you can't change the directory state of a "
                                  + getDataTypeName());
@@ -276,6 +280,7 @@ public abstract class ResourceDecorator extends Resource {
      * @param size not used.
      * @throws BuildException always.
      */
+    @Override
     public void setSize(long size) throws BuildException {
         throw new BuildException("you can't change the size of a "
                                  + getDataTypeName());

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/ResourceList.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/ResourceList.java b/src/main/org/apache/tools/ant/types/resources/ResourceList.java
index fbb226c..204db1d 100644
--- a/src/main/org/apache/tools/ant/types/resources/ResourceList.java
+++ b/src/main/org/apache/tools/ant/types/resources/ResourceList.java
@@ -22,6 +22,7 @@ import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.Reader;
+import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.Stack;
@@ -36,7 +37,6 @@ import org.apache.tools.ant.types.FilterChain;
 import org.apache.tools.ant.types.Reference;
 import org.apache.tools.ant.types.Resource;
 import org.apache.tools.ant.types.ResourceCollection;
-import org.apache.tools.ant.util.FileUtils;
 
 /**
  * Reads a resource as text document and creates a resource for each
@@ -44,8 +44,8 @@ import org.apache.tools.ant.util.FileUtils;
  * @since Ant 1.8.0
  */
 public class ResourceList extends DataType implements ResourceCollection {
-    private final Vector<FilterChain> filterChains = new Vector<FilterChain>();
-    private final ArrayList<ResourceCollection> textDocuments = new ArrayList<ResourceCollection>();
+    private final Vector<FilterChain> filterChains = new Vector<>();
+    private final ArrayList<ResourceCollection> textDocuments = new ArrayList<>();
     private final Union cachedResources = new Union();
     private volatile boolean cached = false;
     private String encoding = null;
@@ -96,11 +96,12 @@ public class ResourceList extends DataType implements ResourceCollection {
      * Makes this instance in effect a reference to another ResourceList
      * instance.
      */
+    @Override
     public void setRefid(Reference r) throws BuildException {
         if (encoding != null) {
             throw tooManyAttributes();
         }
-        if (filterChains.size() > 0 || textDocuments.size() > 0) {
+        if (!(filterChains.isEmpty() && textDocuments.isEmpty())) {
             throw noChildrenAllowed();
         }
         super.setRefid(r);
@@ -112,9 +113,10 @@ public class ResourceList extends DataType implements ResourceCollection {
      * are added to this container while the Iterator is in use.
      * @return a "fail-fast" Iterator.
      */
+    @Override
     public final synchronized Iterator<Resource> iterator() {
         if (isReference()) {
-            return ((ResourceList) getCheckedRef()).iterator();
+            return getCheckedRef().iterator();
         }
         return cache().iterator();
     }
@@ -123,9 +125,10 @@ public class ResourceList extends DataType implements ResourceCollection {
      * Fulfill the ResourceCollection contract.
      * @return number of elements as int.
      */
+    @Override
     public synchronized int size() {
         if (isReference()) {
-            return ((ResourceList) getCheckedRef()).size();
+            return getCheckedRef().size();
         }
         return cache().size();
     }
@@ -134,9 +137,10 @@ public class ResourceList extends DataType implements ResourceCollection {
      * Fulfill the ResourceCollection contract.
      * @return whether this is a filesystem-only resource collection.
      */
+    @Override
     public synchronized boolean isFilesystemOnly() {
         if (isReference()) {
-            return ((ResourceList) getCheckedRef()).isFilesystemOnly();
+            return getCheckedRef().isFilesystemOnly();
         }
         return cache().isFilesystemOnly();
     }
@@ -148,6 +152,7 @@ public class ResourceList extends DataType implements ResourceCollection {
      * @param p   the project to use to dereference the references.
      * @throws BuildException on error.
      */
+    @Override
     protected synchronized void dieOnCircularReference(Stack<Object> stk, Project p)
         throws BuildException {
         if (isChecked()) {
@@ -168,62 +173,53 @@ public class ResourceList extends DataType implements ResourceCollection {
         }
     }
 
+    @Override
+    protected ResourceList getCheckedRef() {
+        return (ResourceList) super.getCheckedRef();
+    }
+
     private synchronized ResourceCollection cache() {
         if (!cached) {
             dieOnCircularReference();
-            for (ResourceCollection rc : textDocuments) {
-                for (Resource r : rc) {
-                    cachedResources.add(read(r));
-                }
-            }
+            textDocuments.stream().flatMap(ResourceCollection::stream)
+                .map(this::read).forEach(cachedResources::add);
             cached = true;
         }
         return cachedResources;
     }
 
     private ResourceCollection read(Resource r) {
-        BufferedInputStream bis = null;
-        try {
-            bis = new BufferedInputStream(r.getInputStream());
-            Reader input = null;
-            if (encoding == null) {
-                input = new InputStreamReader(bis);
-            } else {
-                input = new InputStreamReader(bis, encoding);
-            }
-            ChainReaderHelper crh = new ChainReaderHelper();
-            crh.setPrimaryReader(input);
-            crh.setFilterChains(filterChains);
-            crh.setProject(getProject());
+        try (BufferedReader reader = new BufferedReader(open(r))) {
             Union streamResources = new Union();
-            try (BufferedReader reader = new BufferedReader(crh.getAssembledReader())) {
-                streamResources.setCache(true);
-
-                String line = null;
-                while ((line = reader.readLine()) != null) {
-                    streamResources.add(parse(line));
-                }
-            }
-
+            streamResources.setCache(true);
+            reader.lines().map(this::parse).forEach(streamResources::add);
             return streamResources;
         } catch (final IOException ioe) {
             throw new BuildException("Unable to read resource " + r.getName()
                                      + ": " + ioe, ioe, getLocation());
-        } finally {
-            FileUtils.close(bis);
         }
     }
 
+    private Reader open(Resource r) throws IOException {
+        ChainReaderHelper crh = new ChainReaderHelper();
+        crh.setPrimaryReader(new InputStreamReader(
+            new BufferedInputStream(r.getInputStream()), encoding == null
+                ? Charset.defaultCharset() : Charset.forName(encoding)));
+        crh.setFilterChains(filterChains);
+        crh.setProject(getProject());
+        return crh.getAssembledReader();
+    }
+
     private Resource parse(final String line) {
-        PropertyHelper propertyHelper
-            = (PropertyHelper) PropertyHelper.getPropertyHelper(getProject());
+        PropertyHelper propertyHelper =
+            PropertyHelper.getPropertyHelper(getProject());
         Object expanded = propertyHelper.parseProperties(line);
         if (expanded instanceof Resource) {
             return (Resource) expanded;
         }
         String expandedLine = expanded.toString();
-        int colon = expandedLine.indexOf(":");
-        if (colon != -1) {
+        int colon = expandedLine.indexOf(':');
+        if (colon >= 0) {
             // could be an URL or an absolute file on an OS with drives
             try {
                 return new URLResource(expandedLine);
@@ -236,4 +232,5 @@ public class ResourceList extends DataType implements ResourceCollection {
         }
         return new FileResource(getProject(), expandedLine);
     }
+    
 }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/Resources.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/Resources.java b/src/main/org/apache/tools/ant/types/resources/Resources.java
index 1dd888d..b0acfa3 100644
--- a/src/main/org/apache/tools/ant/types/resources/Resources.java
+++ b/src/main/org/apache/tools/ant/types/resources/Resources.java
@@ -20,13 +20,14 @@ package org.apache.tools.ant.types.resources;
 
 import java.io.File;
 import java.util.AbstractCollection;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.NoSuchElementException;
 import java.util.Stack;
-import java.util.Vector;
+import java.util.stream.Collectors;
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
@@ -43,12 +44,15 @@ import org.apache.tools.ant.util.CollectionUtils;
 public class Resources extends DataType implements ResourceCollection {
     /** static empty ResourceCollection */
     public static final ResourceCollection NONE = new ResourceCollection() {
+        @Override
         public boolean isFilesystemOnly() {
             return true;
         }
+        @Override
         public Iterator<Resource> iterator() {
             return EMPTY_ITERATOR;
         }
+        @Override
         public int size() {
             return 0;
         }
@@ -56,12 +60,15 @@ public class Resources extends DataType implements ResourceCollection {
 
     /** static empty Iterator */
     public static final Iterator<Resource> EMPTY_ITERATOR = new Iterator<Resource>() {
+        @Override
         public Resource next() {
             throw new NoSuchElementException();
         }
+        @Override
         public boolean hasNext() {
             return false;
         }
+        @Override
         public void remove() {
             throw new UnsupportedOperationException();
         }
@@ -72,9 +79,11 @@ public class Resources extends DataType implements ResourceCollection {
 
         MyCollection() {
         }
+        @Override
         public int size() {
             return getCache().size();
         }
+        @Override
         public Iterator<Resource> iterator() {
             return getCache().iterator();
         }
@@ -92,27 +101,30 @@ public class Resources extends DataType implements ResourceCollection {
             private Iterator<ResourceCollection> rci = getNested().iterator();
             private Iterator<Resource> ri = null;
 
+            @Override
             public boolean hasNext() {
                 boolean result = ri != null && ri.hasNext();
                 while (!result && rci.hasNext()) {
-                    ri = ((ResourceCollection) rci.next()).iterator();
+                    ri = rci.next().iterator();
                     result = ri.hasNext();
                 }
                 return result;
             }
+            @Override
             public Resource next() {
                 if (!hasNext()) {
                     throw new NoSuchElementException();
                 }
                 return ri.next();
             }
+            @Override
             public void remove() {
                 throw new UnsupportedOperationException();
             }
         }
     }
 
-    private Vector<ResourceCollection> rc;
+    private List<ResourceCollection> rc;
     private Collection<Resource> coll;
     private boolean cache = false;
 
@@ -151,7 +163,7 @@ public class Resources extends DataType implements ResourceCollection {
             return;
         }
         if (rc == null) {
-            rc = new Vector<ResourceCollection>();
+            rc = Collections.synchronizedList(new ArrayList<>());
         }
         rc.add(c);
         invalidateExistingIterators();
@@ -163,6 +175,7 @@ public class Resources extends DataType implements ResourceCollection {
      * Fulfill the ResourceCollection contract.
      * @return an Iterator of Resources.
      */
+    @Override
     public synchronized Iterator<Resource> iterator() {
         if (isReference()) {
             return getRef().iterator();
@@ -175,6 +188,7 @@ public class Resources extends DataType implements ResourceCollection {
      * Fulfill the ResourceCollection contract.
      * @return number of elements as int.
      */
+    @Override
     public synchronized int size() {
         if (isReference()) {
             return getRef().size();
@@ -187,24 +201,21 @@ public class Resources extends DataType implements ResourceCollection {
      * Fulfill the ResourceCollection contract.
      * @return true if all Resources represent files.
      */
+    @Override
     public boolean isFilesystemOnly() {
         if (isReference()) {
             return getRef().isFilesystemOnly();
         }
         validate();
-
-        for (Iterator<ResourceCollection> i = getNested().iterator(); i.hasNext();) {
-            if (!i.next().isFilesystemOnly()) {
-                return false;
-            }
-        }
-        return true;
+        return getNested().stream()
+            .allMatch(ResourceCollection::isFilesystemOnly);
     }
 
     /**
      * Format this <code>Resources</code> as a String.
      * @return a descriptive <code>String</code>.
      */
+    @Override
     public synchronized String toString() {
         if (isReference()) {
             return getCheckedRef().toString();
@@ -213,14 +224,8 @@ public class Resources extends DataType implements ResourceCollection {
         if (coll == null || coll.isEmpty()) {
             return "";
         }
-        StringBuffer sb = new StringBuffer();
-        for (Resource r : coll) {
-            if (sb.length() > 0) {
-                sb.append(File.pathSeparatorChar);
-            }
-            sb.append(r);
-        }
-        return sb.toString();
+        return coll.stream().map(Object::toString)
+            .collect(Collectors.joining(File.pathSeparator));
     }
 
     /**
@@ -230,6 +235,7 @@ public class Resources extends DataType implements ResourceCollection {
      * @param p   the project to use to dereference the references.
      * @throws BuildException on error.
      */
+    @Override
     protected void dieOnCircularReference(Stack<Object> stk, Project p)
         throws BuildException {
         if (isChecked()) {
@@ -259,8 +265,7 @@ public class Resources extends DataType implements ResourceCollection {
      * @return the referenced ResourceCollection.
      */
     private ResourceCollection getRef() {
-        return (ResourceCollection) getCheckedRef(
-            ResourceCollection.class, "ResourceCollection");
+        return getCheckedRef(ResourceCollection.class, "ResourceCollection");
     }
 
     private synchronized void validate() {

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/Restrict.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/Restrict.java b/src/main/org/apache/tools/ant/types/resources/Restrict.java
index 2ea1a86..cc9cc26 100644
--- a/src/main/org/apache/tools/ant/types/resources/Restrict.java
+++ b/src/main/org/apache/tools/ant/types/resources/Restrict.java
@@ -39,13 +39,9 @@ public class Restrict
         /**
          * Restrict the nested ResourceCollection based on the nested selectors.
          */
+        @Override
         protected boolean filterResource(Resource r) {
-            for (Iterator<ResourceSelector> i = getSelectors(); i.hasNext();) {
-                if (!i.next().isSelected(r)) {
-                    return true;
-                }
-            }
-            return false;
+            return getResourceSelectors().stream().anyMatch(rsel -> !rsel.isSelected(r));
         }
     };
 
@@ -84,6 +80,7 @@ public class Restrict
      * Add a ResourceSelector.
      * @param s the ResourceSelector to add.
      */
+    @Override
     public synchronized void add(ResourceSelector s) {
         if (s == null) {
             return;
@@ -96,9 +93,10 @@ public class Restrict
      * Fulfill the ResourceCollection contract.
      * @return an Iterator of Resources.
      */
+    @Override
     public final synchronized Iterator<Resource> iterator() {
         if (isReference()) {
-            return ((Restrict) getCheckedRef()).iterator();
+            return getCheckedRef().iterator();
         }
         dieOnCircularReference();
         return w.iterator();
@@ -108,9 +106,10 @@ public class Restrict
      * Fulfill the ResourceCollection contract.
      * @return number of elements as int.
      */
+    @Override
     public synchronized int size() {
         if (isReference()) {
-            return ((Restrict) getCheckedRef()).size();
+            return getCheckedRef().size();
         }
         dieOnCircularReference();
         return w.size();
@@ -120,9 +119,10 @@ public class Restrict
      * Fulfill the ResourceCollection contract.
      * @return whether this is a filesystem-only resource collection.
      */
+    @Override
     public synchronized boolean isFilesystemOnly() {
         if (isReference()) {
-            return ((Restrict) getCheckedRef()).isFilesystemOnly();
+            return getCheckedRef().isFilesystemOnly();
         }
         dieOnCircularReference();
         return w.isFilesystemOnly();
@@ -132,6 +132,7 @@ public class Restrict
      * Format this Restrict collection as a String.
      * @return the String value of this collection.
      */
+    @Override
     public synchronized String toString() {
         if (isReference()) {
             return getCheckedRef().toString();
@@ -140,6 +141,7 @@ public class Restrict
         return w.toString();
     }
 
+    @Override
     protected synchronized void dieOnCircularReference(Stack<Object> stk, Project p) {
         if (isChecked()) {
             return;
@@ -153,4 +155,9 @@ public class Restrict
             setChecked(true);
         }
     }
+    
+    @Override
+    protected Restrict getCheckedRef() {
+        return (Restrict) super.getCheckedRef();
+    }
 }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/SizeLimitCollection.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/SizeLimitCollection.java b/src/main/org/apache/tools/ant/types/resources/SizeLimitCollection.java
index c8e772b..6177f2e 100644
--- a/src/main/org/apache/tools/ant/types/resources/SizeLimitCollection.java
+++ b/src/main/org/apache/tools/ant/types/resources/SizeLimitCollection.java
@@ -50,10 +50,9 @@ public abstract class SizeLimitCollection extends BaseResourceCollectionWrapper
      * Efficient size implementation.
      * @return int size
      */
+    @Override
     public synchronized int size() {
-        int sz = getResourceCollection().size();
-        int ct = getValidCount();
-        return sz < ct ? sz : ct;
+        return Math.min(getResourceCollection().size(), getValidCount());
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/Sort.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/Sort.java b/src/main/org/apache/tools/ant/types/resources/Sort.java
index b4dc88c..341b6c9 100644
--- a/src/main/org/apache/tools/ant/types/resources/Sort.java
+++ b/src/main/org/apache/tools/ant/types/resources/Sort.java
@@ -18,19 +18,15 @@
 package org.apache.tools.ant.types.resources;
 
 import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
 import java.util.Stack;
+import java.util.stream.Collectors;
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.types.DataType;
 import org.apache.tools.ant.types.Resource;
-import org.apache.tools.ant.types.ResourceCollection;
 import org.apache.tools.ant.types.resources.comparators.DelegatedResourceComparator;
 import org.apache.tools.ant.types.resources.comparators.ResourceComparator;
-import org.apache.tools.ant.util.CollectionUtils;
 
 /**
  * ResourceCollection that sorts another ResourceCollection.
@@ -48,15 +44,10 @@ public class Sort extends BaseResourceCollectionWrapper {
      * Sort the contained elements.
      * @return a Collection of Resources.
      */
+    @Override
     protected synchronized Collection<Resource> getCollection() {
-        ResourceCollection rc = getResourceCollection();
-        Iterator<Resource> iter = rc.iterator();
-        if (!(iter.hasNext())) {
-            return Collections.emptySet();
-        }
-        List<Resource> result = (List<Resource>) CollectionUtils.asCollection(iter);
-        Collections.sort(result, comp);
-        return result;
+        return getResourceCollection().stream().map(Resource.class::cast)
+            .sorted(comp).collect(Collectors.toList());
     }
 
     /**
@@ -80,6 +71,7 @@ public class Sort extends BaseResourceCollectionWrapper {
      * @param p   the project to use to dereference the references.
      * @throws BuildException on error.
      */
+    @Override
     protected synchronized void dieOnCircularReference(Stack<Object> stk, Project p)
         throws BuildException {
         if (isChecked()) {

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/StringResource.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/StringResource.java b/src/main/org/apache/tools/ant/types/resources/StringResource.java
index 9a52982..9a2a0ad 100644
--- a/src/main/org/apache/tools/ant/types/resources/StringResource.java
+++ b/src/main/org/apache/tools/ant/types/resources/StringResource.java
@@ -149,8 +149,8 @@ public class StringResource extends Resource {
      */
     @Override
     public synchronized long getSize() {
-        return isReference() ? ((Resource) getCheckedRef()).getSize()
-                : getContent().length();
+        return isReference() ? getCheckedRef().getSize()
+            : getContent().length();
     }
 
     /**
@@ -188,7 +188,7 @@ public class StringResource extends Resource {
     @Override
     public synchronized InputStream getInputStream() throws IOException {
         if (isReference()) {
-            return ((Resource) getCheckedRef()).getInputStream();
+            return getCheckedRef().getInputStream();
         }
         String content = getContent();
         if (content == null) {
@@ -209,7 +209,7 @@ public class StringResource extends Resource {
     @Override
     public synchronized OutputStream getOutputStream() throws IOException {
         if (isReference()) {
-            return ((Resource) getCheckedRef()).getOutputStream();
+            return getCheckedRef().getOutputStream();
         }
         if (getValue() != null) {
             throw new ImmutableResourceException();
@@ -237,19 +237,9 @@ public class StringResource extends Resource {
         return getValue();
     }
 
-    /**
-     * This method is only for use by our private helper output stream.
-     * It contains specific logic for expanding properties.
-     * @param output the output
-     */
-    private void setValueFromOutputStream(String output) {
-        String value;
-        if (getProject() != null) {
-            value = getProject().replaceProperties(output);
-        } else {
-            value = output;
-        }
-        setValue(value);
+    @Override
+    protected StringResource getCheckedRef() {
+        return (StringResource) super.getCheckedRef();
     }
 
     private class StringResourceFilterOutputStream extends FilterOutputStream {
@@ -266,7 +256,18 @@ public class StringResource extends Resource {
             String result = encoding == null
                     ? baos.toString() : baos.toString(encoding);
 
-            StringResource.this.setValueFromOutputStream(result);
+            setValueFromOutputStream(result);
         }
+
+        private void setValueFromOutputStream(String output) {
+            String value;
+            if (getProject() != null) {
+                value = getProject().replaceProperties(output);
+            } else {
+                value = output;
+            }
+            setValue(value);
+        }
+
     }
 }

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/TarResource.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/TarResource.java b/src/main/org/apache/tools/ant/types/resources/TarResource.java
index b906a65..7713e44 100644
--- a/src/main/org/apache/tools/ant/types/resources/TarResource.java
+++ b/src/main/org/apache/tools/ant/types/resources/TarResource.java
@@ -74,13 +74,14 @@ public class TarResource extends ArchiveResource {
      * @throws IOException if the tar file cannot be opened,
      *         or the entry cannot be read.
      */
+    @Override
     public InputStream getInputStream() throws IOException {
         if (isReference()) {
-            return ((Resource) getCheckedRef()).getInputStream();
+            return getCheckedRef().getInputStream();
         }
         Resource archive = getArchive();
         final TarInputStream i = new TarInputStream(archive.getInputStream());
-        TarEntry te = null;
+        TarEntry te;
         while ((te = i.getNextEntry()) != null) {
             if (te.getName().equals(getName())) {
                 return i;
@@ -100,9 +101,10 @@ public class TarResource extends ArchiveResource {
      * @throws UnsupportedOperationException if OutputStreams are not
      *         supported for this Resource type.
      */
+    @Override
     public OutputStream getOutputStream() throws IOException {
         if (isReference()) {
-            return ((Resource) getCheckedRef()).getOutputStream();
+            return getCheckedRef().getOutputStream();
         }
         throw new UnsupportedOperationException(
             "Use the tar task for tar output.");
@@ -113,7 +115,7 @@ public class TarResource extends ArchiveResource {
      */
     public String getUserName() {
         if (isReference()) {
-            return ((TarResource) getCheckedRef()).getUserName();
+            return getCheckedRef().getUserName();
         }
         checkEntry();
         return userName;
@@ -124,7 +126,7 @@ public class TarResource extends ArchiveResource {
      */
     public String getGroup() {
         if (isReference()) {
-            return ((TarResource) getCheckedRef()).getGroup();
+            return getCheckedRef().getGroup();
         }
         checkEntry();
         return groupName;
@@ -135,7 +137,7 @@ public class TarResource extends ArchiveResource {
      */
     public int getUid() {
         if (isReference()) {
-            return ((TarResource) getCheckedRef()).getUid();
+            return getCheckedRef().getUid();
         }
         checkEntry();
         return uid;
@@ -146,7 +148,7 @@ public class TarResource extends ArchiveResource {
      */
     public int getGid() {
         if (isReference()) {
-            return ((TarResource) getCheckedRef()).getGid();
+            return getCheckedRef().getGid();
         }
         checkEntry();
         return gid;
@@ -155,11 +157,10 @@ public class TarResource extends ArchiveResource {
     /**
      * fetches information from the named entry inside the archive.
      */
+    @Override
     protected void fetchEntry() {
         Resource archive = getArchive();
-        TarInputStream i = null;
-        try {
-            i = new TarInputStream(archive.getInputStream());
+        try (TarInputStream i = new TarInputStream(archive.getInputStream())) {
             TarEntry te = null;
             while ((te = i.getNextEntry()) != null) {
                 if (te.getName().equals(getName())) {
@@ -170,12 +171,15 @@ public class TarResource extends ArchiveResource {
         } catch (IOException e) {
             log(e.getMessage(), Project.MSG_DEBUG);
             throw new BuildException(e);
-        } finally {
-            FileUtils.close(i);
         }
         setEntry(null);
     }
 
+    @Override
+    protected TarResource getCheckedRef() {
+        return (TarResource) super.getCheckedRef();
+    }
+
     private void setEntry(TarEntry e) {
         if (e == null) {
             setExists(false);

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/Tokens.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/Tokens.java b/src/main/org/apache/tools/ant/types/resources/Tokens.java
index 458f8c1..c8e9110 100644
--- a/src/main/org/apache/tools/ant/types/resources/Tokens.java
+++ b/src/main/org/apache/tools/ant/types/resources/Tokens.java
@@ -19,10 +19,11 @@ package org.apache.tools.ant.types.resources;
 
 import java.io.IOException;
 import java.io.InputStreamReader;
-import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.List;
 import java.util.Stack;
 
 import org.apache.tools.ant.BuildException;
@@ -31,7 +32,6 @@ import org.apache.tools.ant.types.DataType;
 import org.apache.tools.ant.types.Resource;
 import org.apache.tools.ant.types.ResourceCollection;
 import org.apache.tools.ant.util.ConcatResourceInputStream;
-import org.apache.tools.ant.util.FileUtils;
 import org.apache.tools.ant.util.LineTokenizer;
 import org.apache.tools.ant.util.Tokenizer;
 
@@ -51,38 +51,26 @@ public class Tokens extends BaseResourceCollectionWrapper {
      */
     protected synchronized Collection<Resource> getCollection() {
         ResourceCollection rc = getResourceCollection();
-        if (rc.size() == 0) {
+        if (rc.isEmpty()) {
             return Collections.emptySet();
         }
         if (tokenizer == null) {
             tokenizer = new LineTokenizer();
         }
-        ConcatResourceInputStream cat = new ConcatResourceInputStream(rc);
-        cat.setManagingComponent(this);
-
-        InputStreamReader rdr = null;
-        try {
-            if (encoding == null) {
-                rdr = new InputStreamReader(cat);
-            } else {
-                try {
-                    rdr = new InputStreamReader(cat, encoding);
-                } catch (UnsupportedEncodingException e) {
-                    throw new BuildException(e);
-                }
-            }
-            ArrayList<Resource> result = new ArrayList<Resource>();
-            for (String s = tokenizer.getToken(rdr); s != null; s = tokenizer.getToken(rdr)) {
-                StringResource resource = new StringResource(s);
-                resource.setProject(getProject());
+        try (ConcatResourceInputStream cat = new ConcatResourceInputStream(rc);
+                InputStreamReader rdr = new InputStreamReader(cat,
+                    encoding == null ? Charset.defaultCharset()
+                        : Charset.forName(encoding))) {
+            cat.setManagingComponent(this);
+            List<Resource> result = new ArrayList<>();
+            for (String s = tokenizer.getToken(rdr); s != null; s =
+                tokenizer.getToken(rdr)) {
+                StringResource resource = new StringResource(getProject(), s);
                 result.add(resource);
             }
             return result;
         } catch (IOException e) {
             throw new BuildException("Error reading tokens", e);
-        } finally {
-            FileUtils.close(rdr);
-            FileUtils.close(cat);
         }
     }
 
@@ -117,6 +105,7 @@ public class Tokens extends BaseResourceCollectionWrapper {
      * @param p   the project to use to dereference the references.
      * @throws BuildException on error.
      */
+    @Override
     protected synchronized void dieOnCircularReference(Stack<Object> stk, Project p)
         throws BuildException {
         if (isChecked()) {

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/Union.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/Union.java b/src/main/org/apache/tools/ant/types/resources/Union.java
index e2f2f9f..9c10658 100644
--- a/src/main/org/apache/tools/ant/types/resources/Union.java
+++ b/src/main/org/apache/tools/ant/types/resources/Union.java
@@ -17,12 +17,12 @@
  */
 package org.apache.tools.ant.types.resources;
 
-import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.LinkedHashSet;
-import java.util.List;
 import java.util.Set;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.types.Resource;
@@ -84,8 +84,7 @@ public class Union extends BaseResourceCollectionContainer {
         if (isReference()) {
             return getCheckedRef(Union.class, getDataTypeName()).list();
         }
-        final Collection<String> result = getAllToStrings();
-        return result.toArray(new String[result.size()]);
+        return streamResources().map(Object::toString).toArray(String[]::new);
     }
 
     /**
@@ -96,14 +95,14 @@ public class Union extends BaseResourceCollectionContainer {
         if (isReference()) {
             return getCheckedRef(Union.class, getDataTypeName()).listResources();
         }
-        final Collection<Resource> result = getAllResources();
-        return result.toArray(new Resource[result.size()]);
+        return streamResources().toArray(Resource[]::new);
     }
 
     /**
      * Unify the contained Resources.
      * @return a Collection of Resources.
      */
+    @Override
     protected Collection<Resource> getCollection() {
         return getAllResources();
     }
@@ -117,7 +116,8 @@ public class Union extends BaseResourceCollectionContainer {
     @Deprecated
     @SuppressWarnings("unchecked")
     protected <T> Collection<T> getCollection(boolean asString) { // TODO untypable
-        return asString ? (Collection<T>) getAllToStrings() : (Collection<T>) getAllResources();
+        return asString ? (Collection<T>) getAllToStrings()
+            : (Collection<T>) getAllResources();
     }
 
     /**
@@ -125,12 +125,8 @@ public class Union extends BaseResourceCollectionContainer {
      * @return Collection<String>
      */
     protected Collection<String> getAllToStrings() {
-        final Set<Resource> allResources = getAllResources();
-        final ArrayList<String> result = new ArrayList<String>(allResources.size());
-        for (Resource r : allResources) {
-            result.add(r.toString());
-        }
-        return result;
+        return streamResources(Object::toString)
+            .collect(Collectors.toCollection(LinkedHashSet::new));
     }
 
     /**
@@ -138,19 +134,17 @@ public class Union extends BaseResourceCollectionContainer {
      * @return Set<Resource>
      */
     protected Set<Resource> getAllResources() {
-        final List<ResourceCollection> resourceCollections = getResourceCollections();
-        if (resourceCollections.isEmpty()) {
-            return Collections.emptySet();
-        }
-        final LinkedHashSet<Resource> result = new LinkedHashSet<Resource>(
-                resourceCollections.size() * 2);
-        for (ResourceCollection resourceCollection : resourceCollections) {
-            for (Resource r : resourceCollection) {
-                result.add(r);
-            }
-        }
-        return result;
+        return streamResources()
+            .collect(Collectors.toCollection(LinkedHashSet::new));
     }
 
-}
+    private Stream<? extends Resource> streamResources() {
+        return streamResources(Function.identity());
+    }
 
+    private <T> Stream<? extends T> streamResources(
+        Function<? super Resource, ? extends T> mapper) {
+        return getResourceCollections().stream()
+            .flatMap(ResourceCollection::stream).map(mapper).distinct();
+    }
+}

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/comparators/Content.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/comparators/Content.java b/src/main/org/apache/tools/ant/types/resources/comparators/Content.java
index 1810b64..07dd315 100644
--- a/src/main/org/apache/tools/ant/types/resources/comparators/Content.java
+++ b/src/main/org/apache/tools/ant/types/resources/comparators/Content.java
@@ -57,7 +57,7 @@ public class Content extends ResourceComparator {
      * @return a negative integer, zero, or a positive integer as the first
      *         argument is less than, equal to, or greater than the second.
      * @throws BuildException if I/O errors occur.
-     * @see org.apache.tools.ant.util.ResourceUtils#compareContent(Resource, Resource, boolean).
+     * @see org.apache.tools.ant.util.ResourceUtils#compareContent(Resource, Resource, boolean)
      */
     protected int resourceCompare(Resource foo, Resource bar) {
         try {

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/types/resources/comparators/Date.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/comparators/Date.java b/src/main/org/apache/tools/ant/types/resources/comparators/Date.java
index b6be66b..ab7ed25 100644
--- a/src/main/org/apache/tools/ant/types/resources/comparators/Date.java
+++ b/src/main/org/apache/tools/ant/types/resources/comparators/Date.java
@@ -17,6 +17,8 @@
  */
 package org.apache.tools.ant.types.resources.comparators;
 
+import java.util.Comparator;
+
 import org.apache.tools.ant.types.Resource;
 
 /**
@@ -32,14 +34,8 @@ public class Date extends ResourceComparator {
      *         argument is less than, equal to, or greater than the second.
      */
     protected int resourceCompare(Resource foo, Resource bar) {
-        long diff = foo.getLastModified() - bar.getLastModified();
-        if (diff > 0) {
-            return +1;
-        } else if (diff < 0) {
-            return -1;
-        } else {
-            return 0;
-        }
+        return Comparator.comparingLong(Resource::getLastModified).compare(foo,
+            bar);
     }
 
 }