http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/taskdefs/Java.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/Java.java 
b/src/main/org/apache/tools/ant/taskdefs/Java.java
index ed9f906..b4b5a7e 100644
--- a/src/main/org/apache/tools/ant/taskdefs/Java.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Java.java
@@ -20,8 +20,6 @@ package org.apache.tools.ant.taskdefs;
 
 import java.io.File;
 import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
 import java.util.Vector;
 
 import org.apache.tools.ant.BuildException;
@@ -52,6 +50,8 @@ import org.apache.tools.ant.util.StringUtils;
  * @ant.task category="java"
  */
 public class Java extends Task {
+    private static final String TIMEOUT_MESSAGE =
+            "Timeout: killed the sub-process";
 
     private CommandlineJava cmdl = new CommandlineJava();
     private Environment env = new Environment();
@@ -78,9 +78,6 @@ public class Java extends Task {
     private boolean spawn = false;
     private boolean incompatibleWithSpawn = false;
 
-    private static final String TIMEOUT_MESSAGE =
-        "Timeout: killed the sub-process";
-
     /**
      * Normal constructor
      */
@@ -100,6 +97,7 @@ public class Java extends Task {
      * @throws BuildException if failOnError is set to true and the application
      * returns a nonzero result code.
      */
+    @Override
     public void execute() throws BuildException {
         File savedDir = dir;
         Permissions savedPermissions = perm;
@@ -148,30 +146,32 @@ public class Java extends Task {
             throw new BuildException("Classname must not be null.");
         }
         if (!fork && getCommandLine().getJar() != null) {
-            throw new BuildException("Cannot execute a jar in non-forked mode."
-                                     + " Please set fork='true'. ");
+            throw new BuildException(
+                "Cannot execute a jar in non-forked mode. Please set 
fork='true'. ");
         }
         if (!fork && getCommandLine().getModule() != null) {
-            throw new BuildException("Cannot execute a module in non-forked 
mode."
-                                     + " Please set fork='true'. ");
+            throw new BuildException(
+                "Cannot execute a module in non-forked mode. Please set 
fork='true'. ");
         }
         if (spawn && !fork) {
-            throw new BuildException("Cannot spawn a java process in 
non-forked mode."
-                                     + " Please set fork='true'. ");
+            throw new BuildException(
+                "Cannot spawn a java process in non-forked mode. Please set 
fork='true'. ");
         }
         if (getCommandLine().getClasspath() != null
             && getCommandLine().getJar() != null) {
-            log("When using 'jar' attribute classpath-settings are ignored. "
-                + "See the manual for more information.", Project.MSG_VERBOSE);
+            log("When using 'jar' attribute classpath-settings are ignored. 
See the manual for more information.",
+                Project.MSG_VERBOSE);
         }
         if (spawn && incompatibleWithSpawn) {
-            getProject().log("spawn does not allow attributes related to 
input, "
-            + "output, error, result", Project.MSG_ERR);
+            getProject().log(
+                "spawn does not allow attributes related to input, output, 
error, result",
+                Project.MSG_ERR);
             getProject().log("spawn also does not allow timeout", 
Project.MSG_ERR);
-            getProject().log("finally, spawn is not compatible "
-                + "with a nested I/O <redirector>", Project.MSG_ERR);
-            throw new BuildException("You have used an attribute "
-                + "or nested element which is not compatible with spawn");
+            getProject().log(
+                "finally, spawn is not compatible with a nested I/O 
<redirector>",
+                Project.MSG_ERR);
+            throw new BuildException(
+                "You have used an attribute or nested element which is not 
compatible with spawn");
         }
         if (getCommandLine().getAssertions() != null && !fork) {
             log("Assertion statements are currently ignored in non-forked 
mode");
@@ -191,8 +191,8 @@ public class Java extends Task {
                     Project.MSG_WARN);
             }
             if (newEnvironment || null != env.getVariables()) {
-                log("Changes to environment variables are ignored when same "
-                    + "JVM is used.", Project.MSG_WARN);
+                log("Changes to environment variables are ignored when same 
JVM is used.",
+                    Project.MSG_WARN);
             }
             if (getCommandLine().getBootclasspath() != null) {
                 log("bootclasspath ignored when same JVM is used.",
@@ -217,19 +217,17 @@ public class Java extends Task {
     protected int executeJava(CommandlineJava commandLine) {
         try {
             if (fork) {
-                if (!spawn) {
-                    return fork(commandLine.getCommandline());
-                } else {
+                if (spawn) {
                     spawn(commandLine.getCommandline());
                     return 0;
                 }
-            } else {
-                try {
-                    run(commandLine);
-                    return 0;
-                } catch (ExitException ex) {
-                    return ex.getStatus();
-                }
+                return fork(commandLine.getCommandline());
+            }
+            try {
+                run(commandLine);
+                return 0;
+            } catch (ExitException ex) {
+                return ex.getStatus();
             }
         } catch (BuildException e) {
             if (e.getLocation() == null && getLocation() != null) {
@@ -237,23 +235,21 @@ public class Java extends Task {
             }
             if (failOnError) {
                 throw e;
+            }
+            if (TIMEOUT_MESSAGE.equals(e.getMessage())) {
+                log(TIMEOUT_MESSAGE);
             } else {
-                if (TIMEOUT_MESSAGE.equals(e.getMessage())) {
-                    log(TIMEOUT_MESSAGE);
-                } else {
-                    log(e);
-                }
-                return -1;
+                log(e);
             }
+            return -1;
         } catch (ThreadDeath t) {
             throw t; // cf. NB #47191
         } catch (Throwable t) {
             if (failOnError) {
                 throw new BuildException(t, getLocation());
-            } else {
-                log(t);
-                return -1;
             }
+            log(t);
+            return -1;
         }
     }
 
@@ -363,8 +359,8 @@ public class Java extends Task {
      */
     public void setJar(File jarfile) throws BuildException {
         if (getCommandLine().getClassname() != null || 
getCommandLine().getModule() != null) {
-            throw new BuildException("Cannot use 'jar' with 'classname' or 
'module' "
-                                     + "attributes in same command.");
+            throw new BuildException(
+                "Cannot use 'jar' with 'classname' or 'module' attributes in 
same command.");
         }
         getCommandLine().setJar(jarfile.getAbsolutePath());
     }
@@ -378,8 +374,8 @@ public class Java extends Task {
      */
     public void setClassname(String s) throws BuildException {
         if (getCommandLine().getJar() != null) {
-            throw new BuildException("Cannot use 'jar' and 'classname' "
-                                     + "attributes in same command");
+            throw new BuildException(
+                "Cannot use 'jar' and 'classname' attributes in same command");
         }
         getCommandLine().setClassname(s);
     }
@@ -394,8 +390,8 @@ public class Java extends Task {
      */
     public void setModule(String module) throws BuildException {
         if (getCommandLine().getJar() != null) {
-            throw new BuildException("Cannot use 'jar' and 'module' "
-                                     + "attributes in same command");
+            throw new BuildException(
+                "Cannot use 'jar' and 'module' attributes in same command");
         }
         getCommandLine().setModule(module);
     }
@@ -409,8 +405,8 @@ public class Java extends Task {
      * @ant.attribute ignore="true"
      */
     public void setArgs(String s) {
-        log("The args attribute is deprecated. "
-            + "Please use nested arg elements.", Project.MSG_WARN);
+        log("The args attribute is deprecated. Please use nested arg 
elements.",
+            Project.MSG_WARN);
         getCommandLine().createArgument().setLine(s);
     }
 
@@ -477,8 +473,8 @@ public class Java extends Task {
      * @param s jvmargs.
      */
     public void setJvmargs(String s) {
-        log("The jvmargs attribute is deprecated. "
-            + "Please use nested jvmarg elements.", Project.MSG_WARN);
+        log("The jvmargs attribute is deprecated. Please use nested jvmarg 
elements.",
+            Project.MSG_WARN);
         getCommandLine().createVmArgument().setLine(s);
     }
 
@@ -559,8 +555,8 @@ public class Java extends Task {
      */
     public void setInput(File input) {
         if (inputString != null) {
-            throw new BuildException("The \"input\" and \"inputstring\" "
-                + "attributes cannot both be specified");
+            throw new BuildException(
+                "The \"input\" and \"inputstring\" attributes cannot both be 
specified");
         }
         this.input = input;
         incompatibleWithSpawn = true;
@@ -573,8 +569,8 @@ public class Java extends Task {
      */
     public void setInputString(String inputString) {
         if (input != null) {
-            throw new BuildException("The \"input\" and \"inputstring\" "
-                + "attributes cannot both be specified");
+            throw new BuildException(
+                "The \"input\" and \"inputstring\" attributes cannot both be 
specified");
         }
         this.inputString = inputString;
         incompatibleWithSpawn = true;
@@ -728,6 +724,7 @@ public class Java extends Task {
      *
      * @since Ant 1.5
      */
+    @Override
     protected void handleOutput(String output) {
         if (redirector.getOutputStream() != null) {
             redirector.handleOutput(output);
@@ -748,6 +745,7 @@ public class Java extends Task {
      * @exception IOException if the data cannot be read.
      * @since Ant 1.6
      */
+    @Override
     public int handleInput(byte[] buffer, int offset, int length)
         throws IOException {
         // Should work whether or not redirector.inputStream == null:
@@ -761,6 +759,7 @@ public class Java extends Task {
      *
      * @since Ant 1.5.2
      */
+    @Override
     protected void handleFlush(String output) {
         if (redirector.getOutputStream() != null) {
             redirector.handleFlush(output);
@@ -776,6 +775,7 @@ public class Java extends Task {
      *
      * @since Ant 1.5
      */
+    @Override
     protected void handleErrorOutput(String output) {
         if (redirector.getErrorStream() != null) {
             redirector.handleErrorOutput(output);
@@ -791,6 +791,7 @@ public class Java extends Task {
      *
      * @since Ant 1.5.2
      */
+    @Override
     protected void handleErrorFlush(String output) {
         if (redirector.getErrorStream() != null) {
             redirector.handleErrorFlush(output);
@@ -897,8 +898,8 @@ public class Java extends Task {
     private void setupEnvironment(Execute exe) {
         String[] environment = env.getVariables();
         if (environment != null) {
-            for (int i = 0; i < environment.length; i++) {
-                log("Setting environment variable: " + environment[i],
+            for (String element : environment) {
+                log("Setting environment variable: " + element,
                     Project.MSG_VERBOSE);
             }
         }
@@ -914,7 +915,7 @@ public class Java extends Task {
     private void setupWorkingDir(Execute exe) {
         if (dir == null) {
             dir = getProject().getBaseDir();
-        } else if (!dir.exists() || !dir.isDirectory()) {
+        } else if (!dir.isDirectory()) {
             throw new BuildException(dir.getAbsolutePath()
                                      + " is not a valid directory",
                                      getLocation());
@@ -962,10 +963,7 @@ public class Java extends Task {
     protected void run(String classname, Vector<String> args) throws 
BuildException {
         CommandlineJava cmdj = new CommandlineJava();
         cmdj.setClassname(classname);
-        final int size = args.size();
-        for (int i = 0; i < size; i++) {
-            cmdj.createArgument().setValue(args.elementAt(i));
-        }
+        args.forEach(arg -> cmdj.createArgument().setValue(arg));
         run(cmdj);
     }
 

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/taskdefs/Javac.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/Javac.java 
b/src/main/org/apache/tools/ant/taskdefs/Javac.java
index 6e7cee3..0e97f0a 100644
--- a/src/main/org/apache/tools/ant/taskdefs/Javac.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Javac.java
@@ -19,7 +19,6 @@
 package org.apache.tools.ant.taskdefs;
 
 import java.io.File;
-import java.io.FileFilter;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.nio.file.Files;
@@ -28,7 +27,6 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.TreeMap;
 
 import org.apache.tools.ant.BuildException;
@@ -138,7 +136,7 @@ public class Javac extends MatchingTask {
     protected boolean failOnError = true;
     protected boolean listFiles = false;
     protected File[] compileList = new File[0];
-    private Map<String, Long> packageInfos = new HashMap<String, Long>();
+    private Map<String, Long> packageInfos = new HashMap<>();
     // CheckStyle:VisibilityModifier ON
 
     private String source;
@@ -162,19 +160,23 @@ public class Javac extends MatchingTask {
     private String assumedJavaVersion() {
         if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_4)) {
             return JAVAC14;
-        } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_5)) {
+        }
+        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_5)) {
             return JAVAC15;
-        } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_6)) {
+        }
+        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_6)) {
             return JAVAC16;
-        } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_7)) {
+        }
+        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_7)) {
             return JAVAC17;
-        } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_8)) {
+        }
+        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_8)) {
             return JAVAC18;
-        } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_9)) {
+        }
+        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_9)) {
             return JAVAC9;
-        } else {
-            return CLASSIC;
         }
+        return CLASSIC;
     }
 
     /**
@@ -1083,8 +1085,8 @@ public class Javac extends MatchingTask {
      */
     public void add(final CompilerAdapter adapter) {
         if (nestedAdapter != null) {
-            throw new BuildException("Can't have more than one compiler"
-                                     + " adapter");
+            throw new BuildException(
+                "Can't have more than one compiler adapter");
         }
         nestedAdapter = adapter;
     }
@@ -1131,7 +1133,7 @@ public class Javac extends MatchingTask {
      */
     protected void resetFileLists() {
         compileList = new File[0];
-        packageInfos = new HashMap<String, Long>();
+        packageInfos = new HashMap<>();
     }
 
     /**
@@ -1146,8 +1148,8 @@ public class Javac extends MatchingTask {
         final GlobPatternMapper m = new GlobPatternMapper();
         final String[] extensions = findSupportedFileExtensions();
 
-        for (int i = 0; i < extensions.length; i++) {
-            m.setFrom(extensions[i]);
+        for (String extension : extensions) {
+            m.setFrom(extension);
             m.setTo("*.class");
             final SourceFileScanner sfs = new SourceFileScanner(this);
             final File[] newFiles = sfs.restrictAsFiles(files, srcDir, 
destDir, m);
@@ -1186,7 +1188,8 @@ public class Javac extends MatchingTask {
         final FileUtils fu = FileUtils.getFileUtils();
         for (String pathElement : moduleSourcepath.list()) {
             boolean valid = false;
-            for (Map.Entry<String,Collection<File>> modules : 
resolveModuleSourcePathElement(getProject().getBaseDir(), 
pathElement).entrySet()) {
+            for (Map.Entry<String, Collection<File>> modules : 
resolveModuleSourcePathElement(
+                getProject().getBaseDir(), pathElement).entrySet()) {
                 final String moduleName = modules.getKey();
                 for (File srcDir : modules.getValue()) {
                     if (srcDir.exists()) {
@@ -1218,7 +1221,7 @@ public class Javac extends MatchingTask {
         }
 
         if (extensions == null) {
-            extensions = new String[] {"java"};
+            extensions = new String[] { "java" };
         }
 
         // now process the extensions to ensure that they are the
@@ -1297,8 +1300,8 @@ public class Javac extends MatchingTask {
             if (isJdkCompiler(compilerImpl)) {
                 compilerImpl = EXTJAVAC;
             } else {
-                log("Since compiler setting isn't classic or modern, "
-                    + "ignoring fork setting.", Project.MSG_WARN);
+                log("Since compiler setting isn't classic or modern, ignoring 
fork setting.",
+                    Project.MSG_WARN);
             }
         }
         return compilerImpl;
@@ -1353,13 +1356,12 @@ public class Javac extends MatchingTask {
         if (destDir != null && !destDir.isDirectory()) {
             throw new BuildException("destination directory \""
                                      + destDir
-                                     + "\" does not exist "
-                                     + "or is not a directory", getLocation());
+                                     + "\" does not exist or is not a 
directory", getLocation());
         }
         if (includeAntRuntime == null && 
getProject().getProperty("build.sysclasspath") == null) {
-            log(getLocation() + "warning: 'includeantruntime' was not set, " +
-                    "defaulting to build.sysclasspath=last; set to false for 
repeatable builds",
-                    Project.MSG_WARN);
+            log(getLocation()
+                + "warning: 'includeantruntime' was not set, defaulting to 
build.sysclasspath=last; set to false for repeatable builds",
+                Project.MSG_WARN);
         }
     }
 
@@ -1377,9 +1379,8 @@ public class Javac extends MatchingTask {
                 + (destDir != null ? " to " + destDir : ""));
 
             if (listFiles) {
-                for (int i = 0; i < compileList.length; i++) {
-                  final String filename = compileList[i].getAbsolutePath();
-                  log(filename);
+                for (File element : compileList) {
+                  log(element.getAbsolutePath());
                 }
             }
 
@@ -1414,9 +1415,8 @@ public class Javac extends MatchingTask {
                 }
                 if (failOnError) {
                     throw new BuildException(FAIL_MSG, getLocation());
-                } else {
-                    log(FAIL_MSG, Project.MSG_ERR);
                 }
+                log(FAIL_MSG, Project.MSG_ERR);
             }
         }
     }
@@ -1438,9 +1438,8 @@ public class Javac extends MatchingTask {
     }
 
     private void lookForPackageInfos(final File srcDir, final File[] newFiles) 
{
-        for (int i = 0; i < newFiles.length; i++) {
-            final File f = newFiles[i];
-            if (!f.getName().equals("package-info.java")) {
+        for (File f : newFiles) {
+            if (!"package-info.java".equals(f.getName())) {
                 continue;
             }
             final String path = FILE_UTILS.removeLeadingPath(srcDir, f).
@@ -1451,7 +1450,7 @@ public class Javac extends MatchingTask {
                 continue;
             }
             final String pkg = path.substring(0, path.length() - 
suffix.length());
-            packageInfos.put(pkg, new Long(f.lastModified()));
+            packageInfos.put(pkg, Long.valueOf(f.lastModified()));
         }
     }
 
@@ -1461,7 +1460,7 @@ public class Javac extends MatchingTask {
      * @see <a 
href="https://issues.apache.org/bugzilla/show_bug.cgi?id=43114";>Bug #43114</a>
      */
     private void generateMissingPackageInfoClasses(final File dest) throws 
IOException {
-        for (final Entry<String, Long> entry : packageInfos.entrySet()) {
+        for (final Map.Entry<String, Long> entry : packageInfos.entrySet()) {
             final String pkg = entry.getKey();
             final Long sourceLastMod = entry.getValue();
             final File pkgBinDir = new File(dest, pkg.replace('/', 
File.separatorChar));
@@ -1490,7 +1489,7 @@ public class Javac extends MatchingTask {
      * @since 1.9.7
      */
     private static boolean hasPath(final Path path) {
-        return path != null && path.size() > 0;
+        return path != null && !path.isEmpty();
     }
 
     /**
@@ -1524,7 +1523,7 @@ public class Javac extends MatchingTask {
      */
     private static Collection<? extends CharSequence> expandGroups(
             final CharSequence element) {
-        List<StringBuilder> result = new ArrayList<StringBuilder>();
+        List<StringBuilder> result = new ArrayList<>();
         result.add(new StringBuilder());
         StringBuilder resolved = new StringBuilder();
         for (int i = 0; i < element.length(); i++) {
@@ -1547,7 +1546,7 @@ public class Javac extends MatchingTask {
                             break;
                         default:
                             final List<StringBuilder> oldRes = result;
-                            result = new 
ArrayList<StringBuilder>(oldRes.size() * parts.size());
+                            result = new ArrayList<>(oldRes.size() * 
parts.size());
                             for (CharSequence part : parts) {
                                 for (CharSequence prefix : oldRes) {
                                     result.add(new 
StringBuilder(prefix).append(resolved).append(part));
@@ -1574,7 +1573,7 @@ public class Javac extends MatchingTask {
      * @since 1.9.7
      */
     private static Collection<? extends CharSequence> resolveGroup(final 
CharSequence group) {
-        final Collection<CharSequence> result = new ArrayList<CharSequence>();
+        final Collection<CharSequence> result = new ArrayList<>();
         int start = 0;
         int depth = 0;
         for (int i = 0; i < group.length(); i++) {
@@ -1643,26 +1642,26 @@ public class Javac extends MatchingTask {
         final int startIndex = pattern.indexOf(MODULE_MARKER);
         if (startIndex == -1) {
             findModules(root, pattern, null, collector);
-        } else {
-            if (startIndex == 0) {
-                throw new BuildException("The modulesourcepath entry must be a 
folder.");
-            }
-            final int endIndex = startIndex + MODULE_MARKER.length();
-            if (pattern.charAt(startIndex - 1) != File.separatorChar) {
-                    throw new BuildException("The module mark must be preceded 
by separator");
-            }
-            if (endIndex < pattern.length() && pattern.charAt(endIndex) != 
File.separatorChar) {
-                throw new BuildException("The module mark must be followed by 
separator");
-            }
-            if (pattern.indexOf(MODULE_MARKER, endIndex) != -1) {
-                throw new BuildException("The modulesourcepath entry must 
contain at most one module mark");
-            }
-            final String pathToModule = pattern.substring(0, startIndex);
-            final String pathInModule = endIndex == pattern.length() ?
-                    null :
-                    pattern.substring(endIndex + 1);  //+1 the separator
-            findModules(root, pathToModule, pathInModule, collector);
+            return;
         }
+        if (startIndex == 0) {
+            throw new BuildException("The modulesourcepath entry must be a 
folder.");
+        }
+        final int endIndex = startIndex + MODULE_MARKER.length();
+        if (pattern.charAt(startIndex - 1) != File.separatorChar) {
+                throw new BuildException("The module mark must be preceded by 
separator");
+        }
+        if (endIndex < pattern.length() && pattern.charAt(endIndex) != 
File.separatorChar) {
+            throw new BuildException("The module mark must be followed by 
separator");
+        }
+        if (pattern.indexOf(MODULE_MARKER, endIndex) != -1) {
+            throw new BuildException("The modulesourcepath entry must contain 
at most one module mark");
+        }
+        final String pathToModule = pattern.substring(0, startIndex);
+        final String pathInModule = endIndex == pattern.length() ?
+                null :
+                pattern.substring(endIndex + 1);  //+1 the separator
+        findModules(root, pathToModule, pathInModule, collector);
     }
 
     /**
@@ -1683,19 +1682,14 @@ public class Javac extends MatchingTask {
         if (!f.isDirectory()) {
             return;
         }
-        final File[] modules = f.listFiles(new FileFilter() {
-            public boolean accept(File pathname) {
-                return pathname.isDirectory();
-            }
-        });
-        for (File module : modules) {
+        for (File module : f.listFiles(File::isDirectory)) {
             final String moduleName = module.getName();
             final File moduleSourceRoot = pathInModule == null ?
                     module :
                     new File(module, pathInModule);
             Collection<File> moduleRoots = collector.get(moduleName);
             if (moduleRoots == null) {
-                moduleRoots = new ArrayList<File>();
+                moduleRoots = new ArrayList<>();
                 collector.put(moduleName, moduleRoots);
             }
             moduleRoots.add(moduleSourceRoot);

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/taskdefs/Javadoc.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/Javadoc.java 
b/src/main/org/apache/tools/ant/taskdefs/Javadoc.java
index ccf1548..62366ad 100644
--- a/src/main/org/apache/tools/ant/taskdefs/Javadoc.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Javadoc.java
@@ -23,22 +23,24 @@ import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.FileWriter;
-import java.io.FilenameFilter;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.nio.file.Files;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Locale;
+import java.util.Set;
 import java.util.StringTokenizer;
 import java.util.Vector;
+import java.util.stream.Collectors;
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.DirectoryScanner;
@@ -225,7 +227,7 @@ public class Javadoc extends Task {
     public class DocletInfo extends ExtensionInfo {
 
         /** Collection of doclet parameters. */
-        private final Vector<DocletParam> params = new Vector<DocletParam>();
+        private final List<DocletParam> params = new Vector<>();
 
         /**
          * Create a doclet parameter to be configured by Ant.
@@ -234,8 +236,7 @@ public class Javadoc extends Task {
          */
         public DocletParam createParam() {
             final DocletParam param = new DocletParam();
-            params.addElement(param);
-
+            params.add(param);
             return param;
         }
 
@@ -245,7 +246,7 @@ public class Javadoc extends Task {
          * @return an Enumeration of DocletParam instances.
          */
         public Enumeration<DocletParam> getParams() {
-            return params.elements();
+            return Collections.enumeration(params);
         }
     }
 
@@ -367,7 +368,7 @@ public class Javadoc extends Task {
         public String[] getValues() {
             // Protected first so if any GUI tool offers a default
             // based on enum #0, it will be right.
-            return new String[] {"protected", "public", "package", "private"};
+            return new String[] { "protected", "public", "package", "private" 
};
         }
     }
 
@@ -378,8 +379,11 @@ public class Javadoc extends Task {
      * contains special handling for FileSets that has to occur at
      * task runtime.</p>
      */
-    public class ResourceCollectionContainer {
-        private final ArrayList<ResourceCollection> rcs = new 
ArrayList<ResourceCollection>();
+    public class ResourceCollectionContainer
+        implements Iterable<ResourceCollection> {
+
+        private final List<ResourceCollection> rcs = new ArrayList<>();
+
         /**
          * Add a resource collection to the container.
          * @param rc the collection to add.
@@ -392,7 +396,8 @@ public class Javadoc extends Task {
          * Get an iterator on the collection.
          * @return an iterator.
          */
-        private Iterator<ResourceCollection> iterator() {
+        @Override
+        public Iterator<ResourceCollection> iterator() {
             return rcs.iterator();
         }
     }
@@ -422,12 +427,12 @@ public class Javadoc extends Task {
      * @param value the argument value.
      */
     private void addArgIfNotEmpty(final String key, final String value) {
-        if (value != null && value.length() != 0) {
-            cmd.createArgument().setValue(key);
-            cmd.createArgument().setValue(value);
-        } else {
+        if (value == null || value.isEmpty()) {
             log("Warning: Leaving out empty argument '" + key + "'",
                 Project.MSG_WARN);
+        } else {
+            cmd.createArgument().setValue(key);
+            cmd.createArgument().setValue(value);
         }
     }
 
@@ -443,9 +448,9 @@ public class Javadoc extends Task {
     private boolean failOnWarning = false;
     private Path sourcePath = null;
     private File destDir = null;
-    private final Vector<SourceFile> sourceFiles = new Vector<SourceFile>();
-    private final Vector<PackageName> packageNames = new Vector<PackageName>();
-    private final Vector<PackageName> excludePackageNames = new 
Vector<PackageName>(1);
+    private final List<SourceFile> sourceFiles = new Vector<>();
+    private final List<PackageName> packageNames = new Vector<>();
+    private final List<PackageName> excludePackageNames = new Vector<>(1);
     private boolean author = true;
     private boolean version = true;
     private DocletInfo doclet = null;
@@ -453,9 +458,9 @@ public class Javadoc extends Task {
     private Path bootclasspath = null;
     private String group = null;
     private String packageList = null;
-    private final Vector<LinkArgument> links = new Vector<LinkArgument>();
-    private final Vector<GroupArgument> groups = new Vector<GroupArgument>();
-    private final Vector<Object> tags = new Vector<Object>();
+    private final List<LinkArgument> links = new Vector<>();
+    private final List<GroupArgument> groups = new Vector<>();
+    private final List<Object> tags = new Vector<>();
     private boolean useDefaultExcludes = true;
     private Html doctitle = null;
     private Html header = null;
@@ -475,7 +480,7 @@ public class Javadoc extends Task {
 
     private final ResourceCollectionContainer nestedSourceFiles
         = new ResourceCollectionContainer();
-    private final Vector<DirSet> packageSets = new Vector<DirSet>();
+    private final List<DirSet> packageSets = new Vector<>();
 
     /**
      * Work around command line length limit by using an external file
@@ -593,7 +598,7 @@ public class Javadoc extends Task {
      * @param sf the source file to be processed.
      */
     public void addSource(final SourceFile sf) {
-        sourceFiles.addElement(sf);
+        sourceFiles.add(sf);
     }
 
     /**
@@ -623,7 +628,7 @@ public class Javadoc extends Task {
      * @param pn the package name, possibly wildcarded.
      */
     public void addPackage(final PackageName pn) {
-        packageNames.addElement(pn);
+        packageNames.add(pn);
     }
 
     /**
@@ -648,7 +653,7 @@ public class Javadoc extends Task {
      * @param pn the name of the package (wildcards are not permitted).
      */
     public void addExcludePackage(final PackageName pn) {
-        excludePackageNames.addElement(pn);
+        excludePackageNames.add(pn);
     }
 
     /**
@@ -772,7 +777,7 @@ public class Javadoc extends Task {
      * @param tagletInfo information about the taglet.
      */
     public void addTaglet(final ExtensionInfo tagletInfo) {
-        tags.addElement(tagletInfo);
+        tags.add(tagletInfo);
     }
 
     /**
@@ -1191,7 +1196,7 @@ public class Javadoc extends Task {
      */
     public LinkArgument createLink() {
         final LinkArgument la = new LinkArgument();
-        links.addElement(la);
+        links.add(la);
         return la;
     }
 
@@ -1304,7 +1309,7 @@ public class Javadoc extends Task {
      */
     public TagArgument createTag() {
         final TagArgument ta = new TagArgument();
-        tags.addElement (ta);
+        tags.add(ta);
         return ta;
     }
 
@@ -1377,48 +1382,47 @@ public class Javadoc extends Task {
             final StringTokenizer tok = new StringTokenizer (verboseScope, 
",");
             while (tok.hasMoreTokens()) {
                 final String next = tok.nextToken().trim();
-                if (next.equals("all")) {
+                if ("all".equals(next)) {
                     if (gotAll) {
-                        getProject().log ("Repeated tag scope element: all",
+                        getProject().log("Repeated tag scope element: all",
                                           Project.MSG_VERBOSE);
                     }
                     gotAll = true;
                 } else {
                     int i;
                     for (i = 0; i < SCOPE_ELEMENTS.length; i++) {
-                        if (next.equals (SCOPE_ELEMENTS[i])) {
+                        if (SCOPE_ELEMENTS[i].equals(next)) {
                             break;
                         }
                     }
                     if (i == SCOPE_ELEMENTS.length) {
-                        throw new BuildException ("Unrecognised scope element: 
"
-                                                  + next);
-                    } else {
-                        if (elements[i]) {
-                            getProject().log ("Repeated tag scope element: "
-                                              + next, Project.MSG_VERBOSE);
-                        }
-                        elements[i] = true;
-                        gotNotAll = true;
+                        throw new BuildException(
+                            "Unrecognised scope element: %s", next);
+                    }
+                    if (elements[i]) {
+                        getProject().log("Repeated tag scope element: " + next,
+                            Project.MSG_VERBOSE);
                     }
+                    elements[i] = true;
+                    gotNotAll = true;
                 }
             }
 
             if (gotNotAll && gotAll) {
-                throw new BuildException ("Mixture of \"all\" and other scope "
-                                          + "elements in tag parameter.");
+                throw new BuildException(
+                    "Mixture of \"all\" and other scope elements in tag 
parameter.");
             }
             if (!gotNotAll && !gotAll) {
-                throw new BuildException ("No scope elements specified in tag "
-                                          + "parameter.");
+                throw new BuildException(
+                    "No scope elements specified in tag parameter.");
             }
             if (gotAll) {
                 this.scope = "a";
             } else {
-                final StringBuffer buff = new StringBuffer (elements.length);
+                final StringBuilder buff = new StringBuilder(elements.length);
                 for (int i = 0; i < elements.length; i++) {
                     if (elements[i]) {
-                        buff.append (SCOPE_ELEMENTS[i].charAt(0));
+                        buff.append(SCOPE_ELEMENTS[i].charAt(0));
                     }
                 }
                 this.scope = buff.toString();
@@ -1441,17 +1445,17 @@ public class Javadoc extends Task {
          *                           is <code>null</code> or empty.
          */
         public String getParameter() throws BuildException {
-            if (name == null || name.equals("")) {
-                throw new BuildException ("No name specified for custom tag.");
+            if (name == null || name.isEmpty()) {
+                throw new BuildException("No name specified for custom tag.");
             }
             if (getDescription() != null) {
                 return name + ":" + (enabled ? "" : "X")
                     + scope + ":" + getDescription();
-            } else if (!enabled || !"a".equals(scope)) {
+            }
+            if (!enabled || !"a".equals(scope)) {
                 return name + ":" + (enabled ? "" : "X") + scope;
-            } else {
-                return name;
             }
+            return name;
         }
     }
 
@@ -1462,22 +1466,16 @@ public class Javadoc extends Task {
      */
     public GroupArgument createGroup() {
         final GroupArgument ga = new GroupArgument();
-        groups.addElement(ga);
+        groups.add(ga);
         return ga;
     }
 
-
     /**
      * A class corresponding to the group nested element.
      */
     public class GroupArgument {
         private Html title;
-        private final Vector<PackageName> packages = new Vector<PackageName>();
-
-        /** Constructor for GroupArgument */
-        public GroupArgument() {
-            //empty
-        }
+        private final List<PackageName> packages = new Vector<>();
 
         /**
          * Set the title attribute using a string.
@@ -1488,6 +1486,7 @@ public class Javadoc extends Task {
             h.addText(src);
             addTitle(h);
         }
+
         /**
          * Set the title attribute using a nested Html value.
          * @param text a <code>Html</code> value
@@ -1517,12 +1516,13 @@ public class Javadoc extends Task {
                 addPackage(pn);
             }
         }
+
         /**
          * Add a package nested element.
          * @param pn a nested element specifying the package.
          */
         public void addPackage(final PackageName pn) {
-            packages.addElement(pn);
+            packages.add(pn);
         }
 
         /**
@@ -1530,15 +1530,8 @@ public class Javadoc extends Task {
          * @return the packages as a string
          */
         public String getPackages() {
-            final StringBuffer p = new StringBuffer();
-            final int size = packages.size();
-            for (int i = 0; i < size; i++) {
-                if (i > 0) {
-                    p.append(":");
-                }
-                p.append(packages.elementAt(i).toString());
-            }
-            return p.toString();
+            return packages.stream().map(Object::toString)
+                .collect(Collectors.joining(":"));
         }
     }
 
@@ -1602,7 +1595,7 @@ public class Javadoc extends Task {
      * @since 1.5
      */
     public void addPackageset(final DirSet packageSet) {
-        packageSets.addElement(packageSet);
+        packageSets.add(packageSet);
     }
 
     /**
@@ -1705,7 +1698,7 @@ public class Javadoc extends Task {
     public void execute() throws BuildException {
         checkTaskName();
 
-        final Vector<String> packagesToDoc = new Vector<String>();
+        final List<String> packagesToDoc = new Vector<>();
         final Path sourceDirs = new Path(getProject());
 
         checkPackageAndSourcePath();
@@ -1717,15 +1710,14 @@ public class Javadoc extends Task {
         parsePackages(packagesToDoc, sourceDirs);
         checkPackages(packagesToDoc, sourceDirs);
 
-        @SuppressWarnings("unchecked")
-        final Vector<SourceFile> sourceFilesToDoc = (Vector<SourceFile>) 
sourceFiles.clone();
+        final List<SourceFile> sourceFilesToDoc = new ArrayList<>(sourceFiles);
         addSourceFiles(sourceFilesToDoc);
 
         checkPackagesToDoc(packagesToDoc, sourceFilesToDoc);
 
         log("Generating Javadoc", Project.MSG_INFO);
 
-        final Commandline toExecute = (Commandline) cmd.clone();
+        final Commandline toExecute = cmd.clone();
         if (executable != null) {
             toExecute.setExecutable(executable);
         } else {
@@ -1846,25 +1838,24 @@ public class Javadoc extends Task {
         }
     }
 
-    private void checkPackages(final Vector<String> packagesToDoc, final Path 
sourceDirs) {
-        if (packagesToDoc.size() != 0 && sourceDirs.size() == 0) {
-            final String msg = "sourcePath attribute must be set when "
-                + "specifying package names.";
-            throw new BuildException(msg);
+    private void checkPackages(final List<String> packagesToDoc, final Path 
sourceDirs) {
+        if (!packagesToDoc.isEmpty() && sourceDirs.isEmpty()) {
+            throw new BuildException(
+                "sourcePath attribute must be set when specifying package 
names.");
         }
     }
 
     private void checkPackagesToDoc(
-        final Vector<String> packagesToDoc, final Vector<SourceFile> 
sourceFilesToDoc) {
-        if (packageList == null && packagesToDoc.size() == 0
-            && sourceFilesToDoc.size() == 0) {
-            throw new BuildException("No source files and no packages have "
-                                     + "been specified.");
+        final List<String> packagesToDoc, final List<SourceFile> 
sourceFilesToDoc) {
+        if (packageList == null && packagesToDoc.isEmpty()
+            && sourceFilesToDoc.isEmpty()) {
+            throw new BuildException(
+                "No source files and no packages have been specified.");
         }
     }
 
     private void doSourcePath(final Commandline toExecute, final Path 
sourceDirs) {
-        if (sourceDirs.size() > 0) {
+        if (!sourceDirs.isEmpty()) {
             toExecute.createArgument().setValue("-sourcepath");
             toExecute.createArgument().setPath(sourceDirs);
         }
@@ -1889,7 +1880,7 @@ public class Javadoc extends Task {
         }
 
         if (classpath == null) {
-            classpath = (new Path(getProject())).concatSystemClasspath("last");
+            classpath = new Path(getProject()).concatSystemClasspath("last");
         } else {
             classpath = classpath.concatSystemClasspath("ignore");
         }
@@ -1914,32 +1905,31 @@ public class Javadoc extends Task {
     private void doDoclet(final Commandline toExecute) {
         if (doclet != null) {
             if (doclet.getName() == null) {
-                throw new BuildException("The doclet name must be "
-                                         + "specified.", getLocation());
-            } else {
-                toExecute.createArgument().setValue("-doclet");
-                toExecute.createArgument().setValue(doclet.getName());
-                if (doclet.getPath() != null) {
-                    final Path docletPath
-                        = doclet.getPath().concatSystemClasspath("ignore");
-                    if (docletPath.size() != 0) {
-                        toExecute.createArgument().setValue("-docletpath");
-                        toExecute.createArgument().setPath(docletPath);
-                    }
+                throw new BuildException("The doclet name must be specified.",
+                    getLocation());
+            } 
+            toExecute.createArgument().setValue("-doclet");
+            toExecute.createArgument().setValue(doclet.getName());
+            if (doclet.getPath() != null) {
+                final Path docletPath
+                    = doclet.getPath().concatSystemClasspath("ignore");
+                if (docletPath.size() != 0) {
+                    toExecute.createArgument().setValue("-docletpath");
+                    toExecute.createArgument().setPath(docletPath);
+                }
+            }
+            for (final Enumeration<DocletParam> e = doclet.getParams();
+                 e.hasMoreElements();) {
+                final DocletParam param = e.nextElement();
+                if (param.getName() == null) {
+                    throw new BuildException(
+                        "Doclet parameters must have a name");
                 }
-                for (final Enumeration<DocletParam> e = doclet.getParams();
-                     e.hasMoreElements();) {
-                    final DocletParam param = e.nextElement();
-                    if (param.getName() == null) {
-                        throw new BuildException("Doclet parameters must "
-                                                 + "have a name");
-                    }
 
-                    toExecute.createArgument().setValue(param.getName());
-                    if (param.getValue() != null) {
-                        toExecute.createArgument()
-                            .setValue(param.getValue());
-                    }
+                toExecute.createArgument().setValue(param.getName());
+                if (param.getValue() != null) {
+                    toExecute.createArgument()
+                        .setValue(param.getValue());
                 }
             }
         }
@@ -1948,7 +1938,6 @@ public class Javadoc extends Task {
     private void writeExternalArgs(final Commandline toExecute) {
         // If using an external file, write the command line options to it
         File optionsTmpFile = null;
-        BufferedWriter optionsListWriter = null;
         try {
             optionsTmpFile = FILE_UTILS.createTempFile(
                 "javadocOptions", "", null, true, true);
@@ -1956,23 +1945,20 @@ public class Javadoc extends Task {
             toExecute.clearArgs();
             toExecute.createArgument().setValue(
                 "@" + optionsTmpFile.getAbsolutePath());
-            optionsListWriter = new BufferedWriter(
-                new FileWriter(optionsTmpFile.getAbsolutePath(), true));
-            for (int i = 0; i < listOpt.length; i++) {
-                final String string = listOpt[i];
-                if (string.startsWith("-J-")) {
-                    toExecute.createArgument().setValue(string);
-                } else  {
-                    if (string.startsWith("-")) {
-                        optionsListWriter.write(string);
+            try (BufferedWriter optionsListWriter = new BufferedWriter(
+                new FileWriter(optionsTmpFile.getAbsolutePath(), true))) {
+                for (final String opt : listOpt) {
+                    if (opt.startsWith("-J-")) {
+                        toExecute.createArgument().setValue(opt);
+                    } else if (opt.startsWith("-")) {
+                        optionsListWriter.write(opt);
                         optionsListWriter.write(" ");
                     } else {
-                        optionsListWriter.write(quoteString(string));
+                        optionsListWriter.write(quoteString(opt));
                         optionsListWriter.newLine();
                     }
                 }
             }
-            optionsListWriter.close();
         } catch (final IOException ex) {
             if (optionsTmpFile != null) {
                 optionsTmpFile.delete();
@@ -1980,8 +1966,6 @@ public class Javadoc extends Task {
             throw new BuildException(
                 "Error creating or writing temporary file for javadoc options",
                 ex, getLocation());
-        } finally {
-            FileUtils.close(optionsListWriter);
         }
     }
 
@@ -1998,85 +1982,78 @@ public class Javadoc extends Task {
     }
 
     private void doLinks(final Commandline toExecute) {
-        if (links.size() != 0) {
-            for (final Enumeration<LinkArgument> e = links.elements(); 
e.hasMoreElements();) {
-                final LinkArgument la = e.nextElement();
-
-                if (la.getHref() == null || la.getHref().length() == 0) {
-                    log("No href was given for the link - skipping",
-                        Project.MSG_VERBOSE);
+        for (final LinkArgument la : links) {
+            if (la.getHref() == null || la.getHref().isEmpty()) {
+                log("No href was given for the link - skipping",
+                    Project.MSG_VERBOSE);
+                continue;
+            }
+            String link = null;
+            if (la.shouldResolveLink()) {
+                final File hrefAsFile =
+                    getProject().resolveFile(la.getHref());
+                if (hrefAsFile.exists()) {
+                    try {
+                        link = FILE_UTILS.getFileURL(hrefAsFile)
+                            .toExternalForm();
+                    } catch (final MalformedURLException ex) {
+                        // should be impossible
+                        log("Warning: link location was invalid "
+                            + hrefAsFile, Project.MSG_WARN);
+                    }
+                }
+            }
+            if (link == null) {
+                // is the href a valid URL
+                try {
+                    final URL base = new URL("file://.");
+                    // created for the side effect of throwing a 
MalformedURLException
+                    new URL(base, la.getHref()); //NOSONAR
+                    link = la.getHref();
+                } catch (final MalformedURLException mue) {
+                    // ok - just skip
+                    log("Link href \"" + la.getHref()
+                        + "\" is not a valid url - skipping link",
+                        Project.MSG_WARN);
                     continue;
                 }
-                String link = null;
-                if (la.shouldResolveLink()) {
-                    final File hrefAsFile =
-                        getProject().resolveFile(la.getHref());
-                    if (hrefAsFile.exists()) {
+            }
+
+            if (la.isLinkOffline()) {
+                final File packageListLocation = la.getPackagelistLoc();
+                URL packageListURL = la.getPackagelistURL();
+                if (packageListLocation == null
+                    && packageListURL == null) {
+                    throw new BuildException(
+                        "The package list location for link " + la.getHref()
+                            + " must be provided because the link is offline");
+                }
+                if (packageListLocation != null) {
+                    final File packageListFile =
+                        new File(packageListLocation, "package-list");
+                    if (packageListFile.exists()) {
                         try {
-                            link = FILE_UTILS.getFileURL(hrefAsFile)
-                                .toExternalForm();
+                            packageListURL =
+                                FILE_UTILS.getFileURL(packageListLocation);
                         } catch (final MalformedURLException ex) {
-                            // should be impossible
-                            log("Warning: link location was invalid "
-                                + hrefAsFile, Project.MSG_WARN);
+                            log("Warning: Package list location was "
+                                + "invalid " + packageListLocation,
+                                Project.MSG_WARN);
                         }
+                    } else {
+                        log("Warning: No package list was found at "
+                            + packageListLocation, Project.MSG_VERBOSE);
                     }
                 }
-                if (link == null) {
-                    // is the href a valid URL
-                    try {
-                        final URL base = new URL("file://.");
-                        // created for the side effect of throwing a 
MalformedURLException
-                        new URL(base, la.getHref()); //NOSONAR
-                        link = la.getHref();
-                    } catch (final MalformedURLException mue) {
-                        // ok - just skip
-                        log("Link href \"" + la.getHref()
-                            + "\" is not a valid url - skipping link",
-                            Project.MSG_WARN);
-                        continue;
-                    }
-                }
-
-                if (la.isLinkOffline()) {
-                    final File packageListLocation = la.getPackagelistLoc();
-                    URL packageListURL = la.getPackagelistURL();
-                    if (packageListLocation == null
-                        && packageListURL == null) {
-                        throw new BuildException("The package list"
-                                                 + " location for link "
-                                                 + la.getHref()
-                                                 + " must be provided "
-                                                 + "because the link is "
-                                                 + "offline");
-                    }
-                    if (packageListLocation != null) {
-                        final File packageListFile =
-                            new File(packageListLocation, "package-list");
-                        if (packageListFile.exists()) {
-                            try {
-                                packageListURL =
-                                    FILE_UTILS.getFileURL(packageListLocation);
-                            } catch (final MalformedURLException ex) {
-                                log("Warning: Package list location was "
-                                    + "invalid " + packageListLocation,
-                                    Project.MSG_WARN);
-                            }
-                        } else {
-                            log("Warning: No package list was found at "
-                                + packageListLocation, Project.MSG_VERBOSE);
-                        }
-                    }
-                    if (packageListURL != null) {
-                        toExecute.createArgument().setValue("-linkoffline");
-                        toExecute.createArgument().setValue(link);
-                        toExecute.createArgument()
-                            .setValue(packageListURL.toExternalForm());
-                    }
-                } else {
-                    toExecute.createArgument().setValue("-link");
+                if (packageListURL != null) {
+                    toExecute.createArgument().setValue("-linkoffline");
                     toExecute.createArgument().setValue(link);
+                    toExecute.createArgument()
+                        .setValue(packageListURL.toExternalForm());
                 }
+            } else {
+                toExecute.createArgument().setValue("-link");
+                toExecute.createArgument().setValue(link);
             }
         }
     }
@@ -2098,7 +2075,7 @@ public class Javadoc extends Task {
             final StringTokenizer tok = new StringTokenizer(group, ",", false);
             while (tok.hasMoreTokens()) {
                 final String grp = tok.nextToken().trim();
-                final int space = grp.indexOf(" ");
+                final int space = grp.indexOf(' ');
                 if (space > 0) {
                     final String name = grp.substring(0, space);
                     final String pkgList = grp.substring(space + 1);
@@ -2112,36 +2089,30 @@ public class Javadoc extends Task {
 
     // add the group arguments
     private void doGroups(final Commandline toExecute) {
-        if (groups.size() != 0) {
-            for (final Enumeration<GroupArgument> e = groups.elements(); 
e.hasMoreElements();) {
-                final GroupArgument ga = e.nextElement();
-                final String title = ga.getTitle();
-                final String packages = ga.getPackages();
-                if (title == null || packages == null) {
-                    throw new BuildException("The title and packages must "
-                                             + "be specified for group "
-                                             + "elements.");
-                }
-                toExecute.createArgument().setValue("-group");
-                toExecute.createArgument().setValue(expand(title));
-                toExecute.createArgument().setValue(packages);
+        for (final GroupArgument ga : groups) {
+            final String title = ga.getTitle();
+            final String packages = ga.getPackages();
+            if (title == null || packages == null) {
+                throw new BuildException(
+                    "The title and packages must be specified for group 
elements.");
             }
+            toExecute.createArgument().setValue("-group");
+            toExecute.createArgument().setValue(expand(title));
+            toExecute.createArgument().setValue(packages);
         }
     }
 
     // Do java1.4 arguments
     private void doJava14(final Commandline toExecute) {
-        for (final Enumeration<Object> e = tags.elements(); 
e.hasMoreElements();) {
-            final Object element = e.nextElement();
+        for (final Object element : tags) {
             if (element instanceof TagArgument) {
                 final TagArgument ta = (TagArgument) element;
                 final File tagDir = ta.getDir(getProject());
                 if (tagDir == null) {
                     // The tag element is not used as a fileset,
                     // but specifies the tag directly.
-                    toExecute.createArgument().setValue ("-tag");
-                    toExecute.createArgument()
-                        .setValue (ta.getParameter());
+                    toExecute.createArgument().setValue("-tag");
+                    toExecute.createArgument().setValue(ta.getParameter());
                 } else {
                     // The tag element is used as a
                     // fileset. Parse all the files and create
@@ -2149,26 +2120,22 @@ public class Javadoc extends Task {
                     final DirectoryScanner tagDefScanner =
                         ta.getDirectoryScanner(getProject());
                     final String[] files = tagDefScanner.getIncludedFiles();
-                    for (int i = 0; i < files.length; i++) {
-                        final File tagDefFile = new File(tagDir, files[i]);
-                        try {
-                            final BufferedReader in
-                                = new BufferedReader(
-                                    new FileReader(tagDefFile)
-                                                     );
-                            String line = null;
+                    for (String file : files) {
+                        final File tagDefFile = new File(tagDir, file);
+                        try (final BufferedReader in =
+                            new BufferedReader(new FileReader(tagDefFile))) {
+                            String line;
                             while ((line = in.readLine()) != null) {
                                 toExecute.createArgument()
                                     .setValue("-tag");
                                 toExecute.createArgument()
                                     .setValue(line);
                             }
-                            in.close();
                         } catch (final IOException ioe) {
                             throw new BuildException(
-                                "Couldn't read "
-                                + " tag file from "
-                                + tagDefFile.getAbsolutePath(), ioe);
+                                "Couldn't read tag file from "
+                                    + tagDefFile.getAbsolutePath(),
+                                ioe);
                         }
                     }
                 }
@@ -2180,7 +2147,7 @@ public class Javadoc extends Task {
                 if (tagletInfo.getPath() != null) {
                     final Path tagletPath = tagletInfo.getPath()
                         .concatSystemClasspath("ignore");
-                    if (tagletPath.size() != 0) {
+                    if (!tagletPath.isEmpty()) {
                         toExecute.createArgument()
                             .setValue("-tagletpath");
                         toExecute.createArgument().setPath(tagletPath);
@@ -2208,8 +2175,8 @@ public class Javadoc extends Task {
     private void doDocFilesSubDirs(final Commandline toExecute) {
         if (docFilesSubDirs) {
             toExecute.createArgument().setValue("-docfilessubdirs");
-            if (excludeDocFilesSubDir != null
-                && excludeDocFilesSubDir.trim().length() > 0) {
+            if (!(excludeDocFilesSubDir == null
+                || excludeDocFilesSubDir.trim().isEmpty())) {
                 toExecute.createArgument().setValue("-excludedocfilessubdir");
                 toExecute.createArgument().setValue(excludeDocFilesSubDir);
             }
@@ -2218,10 +2185,10 @@ public class Javadoc extends Task {
 
     private void doSourceAndPackageNames(
         final Commandline toExecute,
-        final Vector<String> packagesToDoc,
-        final Vector<SourceFile> sourceFilesToDoc,
+        final List<String> packagesToDoc,
+        final List<SourceFile> sourceFilesToDoc,
         final boolean useExternalFile,
-        final File    tmpList,
+        final File tmpList,
         final BufferedWriter srcListWriter)
         throws IOException {
         for (final String packageName : packagesToDoc) {
@@ -2238,7 +2205,7 @@ public class Javadoc extends Task {
             if (useExternalFile) {
                 // TODO what is the following doing?
                 //     should it run if !javadoc4 && executable != null?
-                if (sourceFileName.indexOf(" ") > -1) {
+                if (sourceFileName.indexOf(' ') > -1) {
                     String name = sourceFileName;
                     if (File.separatorChar == '\\') {
                         name = sourceFileName.replace(File.separatorChar, '/');
@@ -2268,9 +2235,8 @@ public class Javadoc extends Task {
         }
         if (str.indexOf('\'') == -1) {
             return quoteString(str, '\'');
-        } else {
-            return quoteString(str, '"');
         }
+        return quoteString(str, '"');
     }
 
     private boolean containsWhitespace(final String s) {
@@ -2284,7 +2250,7 @@ public class Javadoc extends Task {
     }
 
     private String quoteString(final String str, final char delim) {
-        final StringBuffer buf = new StringBuffer(str.length() * 2);
+        final StringBuilder buf = new StringBuilder(str.length() * 2);
         buf.append(delim);
         final int len = str.length();
         boolean lastCharWasCR = false;
@@ -2332,18 +2298,16 @@ public class Javadoc extends Task {
      *
      * @since 1.7
      */
-    private void addSourceFiles(final Vector<SourceFile> sf) {
-        final Iterator<ResourceCollection> e = nestedSourceFiles.iterator();
-        while (e.hasNext()) {
-            ResourceCollection rc = e.next();
+    private void addSourceFiles(final List<SourceFile> sf) {
+        for (ResourceCollection rc : nestedSourceFiles) {
             if (!rc.isFilesystemOnly()) {
-                throw new BuildException("only file system based resources are"
-                                         + " supported by javadoc");
+                throw new BuildException(
+                    "only file system based resources are supported by 
javadoc");
             }
             if (rc instanceof FileSet) {
                 final FileSet fs = (FileSet) rc;
                 if (!fs.hasPatterns() && !fs.hasSelectors()) {
-                    final FileSet fs2 = (FileSet) fs.clone();
+                    final FileSet fs2 = fs.clone();
                     fs2.createInclude().setName("**/*.java");
                     if (includeNoSourcePackages) {
                         fs2.createInclude().setName("**/package.html");
@@ -2352,7 +2316,7 @@ public class Javadoc extends Task {
                 }
             }
             for (final Resource r : rc) {
-                sf.addElement(new 
SourceFile(r.as(FileProvider.class).getFile()));
+                sf.add(new SourceFile(r.as(FileProvider.class).getFile()));
             }
         }
     }
@@ -2365,10 +2329,9 @@ public class Javadoc extends Task {
      *
      * @since 1.5
      */
-    private void parsePackages(final Vector<String> pn, final Path sp) {
-        final HashSet<String> addedPackages = new HashSet<String>();
-        @SuppressWarnings("unchecked")
-        final Vector<DirSet> dirSets = (Vector<DirSet>) packageSets.clone();
+    private void parsePackages(final List<String> pn, final Path sp) {
+        final Set<String> addedPackages = new HashSet<>();
+        final List<DirSet> dirSets = new ArrayList<>(packageSets);
 
         // for each sourcePath entry, add a directoryset with includes
         // taken from packagenames attribute and nested package
@@ -2377,51 +2340,35 @@ public class Javadoc extends Task {
         if (sourcePath != null) {
             final PatternSet ps = new PatternSet();
             ps.setProject(getProject());
-            if (packageNames.size() > 0) {
-                final Enumeration<PackageName> e = packageNames.elements();
-                while (e.hasMoreElements()) {
-                    final PackageName p = e.nextElement();
-                    String pkg = p.getName().replace('.', '/');
-                    if (pkg.endsWith("*")) {
-                        pkg += "*";
-                    }
-                    ps.createInclude().setName(pkg);
-                }
-            } else {
+            if (packageNames.isEmpty()) {
                 ps.createInclude().setName("**");
+            } else {
+                packageNames.stream().map(PackageName::getName)
+                    .map(s -> s.replace('.', '/').replaceFirst("\\*$", "**"))
+                    .forEach(pkg -> ps.createInclude().setName(pkg));
             }
 
-            final Enumeration<PackageName> e = excludePackageNames.elements();
-            while (e.hasMoreElements()) {
-                final PackageName p = e.nextElement();
-                String pkg = p.getName().replace('.', '/');
-                if (pkg.endsWith("*")) {
-                    pkg += "*";
-                }
-                ps.createExclude().setName(pkg);
-            }
-
+            excludePackageNames.stream().map(PackageName::getName)
+                .map(s -> s.replace('.', '/').replaceFirst("\\*$", "**"))
+                .forEach(pkg -> ps.createExclude().setName(pkg));
 
-            final String[] pathElements = sourcePath.list();
-            for (int i = 0; i < pathElements.length; i++) {
-                final File dir = new File(pathElements[i]);
+            for (String pathElement : sourcePath.list()) {
+                final File dir = new File(pathElement);
                 if (dir.isDirectory()) {
                     final DirSet ds = new DirSet();
                     ds.setProject(getProject());
                     ds.setDefaultexcludes(useDefaultExcludes);
                     ds.setDir(dir);
                     ds.createPatternSet().addConfiguredPatternset(ps);
-                    dirSets.addElement(ds);
+                    dirSets.add(ds);
                 } else {
-                    log("Skipping " + pathElements[i]
+                    log("Skipping " + pathElement
                         + " since it is no directory.", Project.MSG_WARN);
                 }
             }
         }
 
-        final Enumeration<DirSet> e = dirSets.elements();
-        while (e.hasMoreElements()) {
-            final DirSet ds = e.nextElement();
+        for (DirSet ds : dirSets) {
             final File baseDir = ds.getDir(getProject());
             log("scanning " + baseDir + " for packages.", Project.MSG_DEBUG);
             final DirectoryScanner dsc = ds.getDirectoryScanner(getProject());
@@ -2430,20 +2377,14 @@ public class Javadoc extends Task {
             for (int i = 0; i < dirs.length; i++) {
                 // are there any java files in this directory?
                 final File pd = new File(baseDir, dirs[i]);
-                final String[] files = pd.list(new FilenameFilter () {
-                        public boolean accept(final File dir1, final String 
name) {
-                            return name.endsWith(".java")
-                                || (includeNoSourcePackages
-                                    && name.equals("package.html"));
-                        }
-                    });
+                final String[] files = pd.list((dir1,
+                    name) -> name.endsWith(".java") || (includeNoSourcePackages
+                        && name.equals("package.html")));
 
                 if (files.length > 0) {
                     if ("".equals(dirs[i])) {
                         log(baseDir
-                            + " contains source files in the default package,"
-                            + " you must specify them as source files"
-                            + " not packages.",
+                            + " contains source files in the default package, 
you must specify them as source files not packages.",
                             Project.MSG_WARN);
                     } else {
                         containsPackages = true;
@@ -2451,7 +2392,7 @@ public class Javadoc extends Task {
                             dirs[i].replace(File.separatorChar, '.');
                         if (!addedPackages.contains(packageName)) {
                             addedPackages.add(packageName);
-                            pn.addElement(packageName);
+                            pn.add(packageName);
                         }
                     }
                 }
@@ -2476,14 +2417,13 @@ public class Javadoc extends Task {
                 Project.MSG_VERBOSE);
             return;
         }
-        final String fixData;
         final InputStream in = Javadoc.class
             .getResourceAsStream("javadoc-frame-injections-fix.txt");
         if (in == null) {
-            throw new FileNotFoundException("Missing resource "
-                                            + 
"'javadoc-frame-injections-fix.txt' in "
-                                            + "classpath.");
+            throw new FileNotFoundException(
+                "Missing resource 'javadoc-frame-injections-fix.txt' in 
classpath.");
         }
+        final String fixData;
         try {
             fixData =
                 fixLineFeeds(FileUtils
@@ -2516,14 +2456,10 @@ public class Javadoc extends Task {
             : FILE_UTILS.getDefaultEncoding();
         // we load the whole file as one String (toc/index files are
         // generally small, because they only contain frameset declaration):
-        final InputStream fin = Files.newInputStream(file.toPath());
         String fileContents;
-        try {
-            fileContents =
-                fixLineFeeds(FileUtils
-                             .safeReadFully(new InputStreamReader(fin, enc)));
-        } finally {
-            FileUtils.close(fin);
+        try (InputStreamReader reader =
+            new InputStreamReader(Files.newInputStream(file.toPath()), enc)) {
+            fileContents = fixLineFeeds(FileUtils.safeReadFully(reader));
         }
 
         // check if file may be vulnerable because it was not
@@ -2532,14 +2468,11 @@ public class Javadoc extends Task {
             // we need to patch the file!
             final String patchedFileContents = patchContent(fileContents, 
fixData);
             if (!patchedFileContents.equals(fileContents)) {
-                final OutputStream fos = Files.newOutputStream(file.toPath());
-                try {
-                    final OutputStreamWriter w = new OutputStreamWriter(fos, 
enc);
+                try (final OutputStreamWriter w =
+                    new 
OutputStreamWriter(Files.newOutputStream(file.toPath()), enc)) {
                     w.write(patchedFileContents);
                     w.close();
                     return 1;
-                } finally {
-                    FileUtils.close(fos);
                 }
             }
         }
@@ -2598,7 +2531,6 @@ public class Javadoc extends Task {
             }
         }
 
-
         protected void logFlush() {
             if (queuedLine != null) {
                 super.processLine(queuedLine, Project.MSG_VERBOSE);

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/taskdefs/Length.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/Length.java 
b/src/main/org/apache/tools/ant/taskdefs/Length.java
index 68fb20a..e776b59 100644
--- a/src/main/org/apache/tools/ant/taskdefs/Length.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Length.java
@@ -108,7 +108,7 @@ public class Length extends Task implements Condition {
      * @param ell the long length to compare with.
      */
     public synchronized void setLength(long ell) {
-        length = new Long(ell);
+        length = Long.valueOf(ell);
     }
 
     /**
@@ -152,7 +152,7 @@ public class Length extends Task implements Condition {
      * @param trim <code>boolean</code>.
      */
     public synchronized void setTrim(boolean trim) {
-        this.trim = trim ? Boolean.TRUE : Boolean.FALSE;
+        this.trim = Boolean.valueOf(trim);
     }
 
     /**
@@ -160,25 +160,31 @@ public class Length extends Task implements Condition {
      * @return boolean trim setting.
      */
     public boolean getTrim() {
-        return trim != null && trim.booleanValue();
+        return Boolean.TRUE.equals(trim);
     }
 
     /**
      * Execute the length task.
      */
+    @Override
     public void execute() {
         validate();
-        PrintStream ps = new PrintStream((property != null)
-            ? (OutputStream) new PropertyOutputStream(getProject(), property)
-            : (OutputStream) new LogOutputStream(this, Project.MSG_INFO));
+        OutputStream out =
+            property == null ? new LogOutputStream(this, Project.MSG_INFO)
+                : new PropertyOutputStream(getProject(), property);
+        PrintStream ps = new PrintStream(out);
 
-        if (STRING.equals(mode)) {
+        switch (mode) {
+        case STRING:
             ps.print(getLength(string, getTrim()));
             ps.close();
-        } else if (EACH.equals(mode)) {
+            break;
+        case EACH:
             handleResources(new EachHandler(ps));
-        } else if (ALL.equals(mode)) {
+            break;
+        case ALL:
             handleResources(new AllHandler(ps));
+            break;
         }
     }
 
@@ -187,6 +193,7 @@ public class Length extends Task implements Condition {
      * @return true if the condition is true.
      * @throws BuildException if an error occurs.
      */
+    @Override
     public boolean eval() {
         validate();
         if (length == null) {
@@ -194,11 +201,11 @@ public class Length extends Task implements Condition {
         }
         Long ell;
         if (STRING.equals(mode)) {
-            ell = new Long(getLength(string, getTrim()));
+            ell = Long.valueOf(getLength(string, getTrim()));
         } else {
             AccumHandler h = new AccumHandler();
             handleResources(h);
-            ell = new Long(h.getAccum());
+            ell = Long.valueOf(h.getAccum());
         }
         return when.evaluate(ell.compareTo(length));
     }
@@ -206,25 +213,26 @@ public class Length extends Task implements Condition {
     private void validate() {
         if (string != null) {
             if (resources != null) {
-                throw new BuildException("the string length function"
-                    + " is incompatible with the file/resource length 
function");
+                throw new BuildException(
+                    "the string length function is incompatible with the 
file/resource length function");
             }
             if (!(STRING.equals(mode))) {
-                throw new BuildException("the mode attribute is for use"
-                    + " with the file/resource length function");
+                throw new BuildException(
+                    "the mode attribute is for use with the file/resource 
length function");
             }
         } else if (resources != null) {
             if (!(EACH.equals(mode) || ALL.equals(mode))) {
-                throw new BuildException("invalid mode setting for"
-                    + " file/resource length function: \"" + mode + "\"");
-            } else if (trim != null) {
-                throw new BuildException("the trim attribute is"
-                    + " for use with the string length function only");
+                throw new BuildException(
+                    "invalid mode setting for file/resource length function: 
\""
+                        + mode + "\"");
+            }
+            if (trim != null) {
+                throw new BuildException(
+                    "the trim attribute is for use with the string length 
function only");
             }
         } else {
-            throw new BuildException("you must set either the string attribute"
-                + " or specify one or more files using the file attribute or"
-                + " nested resource collections");
+            throw new BuildException(
+                "you must set either the string attribute or specify one or 
more files using the file attribute or nested resource collections");
         }
     }
 
@@ -247,12 +255,13 @@ public class Length extends Task implements Condition {
 
     /** EnumeratedAttribute operation mode */
     public static class FileMode extends EnumeratedAttribute {
-        static final String[] MODES = new String[] {EACH, ALL}; //NOSONAR
+        static final String[] MODES = new String[] { EACH, ALL }; //NOSONAR
 
         /**
          * Return the possible values for FileMode.
          * @return <code>String[]</code>.
          */
+        @Override
         public String[] getValues() {
             return MODES;
         }
@@ -268,6 +277,7 @@ public class Length extends Task implements Condition {
 
     private abstract class Handler {
         private PrintStream ps;
+
         Handler(PrintStream ps) {
             this.ps = ps;
         }
@@ -287,6 +297,8 @@ public class Length extends Task implements Condition {
         EachHandler(PrintStream ps) {
             super(ps);
         }
+
+        @Override
         protected void handle(Resource r) {
             getPs().print(r.toString());
             getPs().print(" : ");
@@ -306,12 +318,16 @@ public class Length extends Task implements Condition {
         AccumHandler() {
             super(null);
         }
+
         protected AccumHandler(PrintStream ps) {
             super(ps);
         }
+
         protected long getAccum() {
             return accum;
         }
+
+        @Override
         protected synchronized void handle(Resource r) {
             long size = r.getSize();
             if (size == Resource.UNKNOWN_SIZE) {
@@ -326,6 +342,8 @@ public class Length extends Task implements Condition {
         AllHandler(PrintStream ps) {
             super(ps);
         }
+
+        @Override
         void complete() {
             getPs().print(getAccum());
             super.complete();

http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java 
b/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java
index 4c20c7c..9ff4e6e 100644
--- a/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java
+++ b/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java
@@ -17,12 +17,12 @@
  */
 package org.apache.tools.ant.taskdefs;
 
-import java.io.BufferedInputStream;
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStreamReader;
-import java.io.Reader;
+import java.nio.charset.Charset;
+import java.util.List;
 import java.util.Properties;
 import java.util.Vector;
 
@@ -30,6 +30,7 @@ import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.Task;
 import org.apache.tools.ant.filters.util.ChainReaderHelper;
+import org.apache.tools.ant.filters.util.ChainReaderHelper.ChainReader;
 import org.apache.tools.ant.types.FilterChain;
 import org.apache.tools.ant.types.Path;
 import org.apache.tools.ant.types.Reference;
@@ -37,7 +38,6 @@ import org.apache.tools.ant.types.Resource;
 import org.apache.tools.ant.types.ResourceCollection;
 import org.apache.tools.ant.types.resources.FileResource;
 import org.apache.tools.ant.types.resources.JavaResource;
-import org.apache.tools.ant.util.FileUtils;
 import org.apache.tools.ant.util.ResourceUtils;
 
 /**
@@ -56,7 +56,7 @@ public class LoadProperties extends Task {
     /**
      * Holds filterchains
      */
-    private final Vector<FilterChain> filterChains = new Vector<FilterChain>();
+    private final List<FilterChain> filterChains = new Vector<>();
 
     /**
      * Encoding to use for input; defaults to the platform's default encoding.
@@ -158,6 +158,7 @@ public class LoadProperties extends Task {
      *
      * @exception BuildException if something goes wrong with the build
      */
+    @Override
     public final void execute() throws BuildException {
         //validation
         if (src == null) {
@@ -171,30 +172,21 @@ public class LoadProperties extends Task {
             }
             throw new BuildException("Source resource does not exist: " + src);
         }
-        BufferedInputStream bis = null;
-        Reader instream = null;
-        ByteArrayInputStream tis = null;
-
-        try {
-            bis = new BufferedInputStream(src.getInputStream());
-            if (encoding == null) {
-                instream = new InputStreamReader(bis);
-            } else {
-                instream = new InputStreamReader(bis, encoding);
-            }
-            ChainReaderHelper crh = new ChainReaderHelper();
-            crh.setPrimaryReader(instream);
-            crh.setFilterChains(filterChains);
-            crh.setProject(getProject());
-            instream = crh.getAssembledReader();
 
-            String text = crh.readFully(instream);
+        Charset charset = encoding == null ? Charset.defaultCharset() : 
Charset.forName(encoding);
+
+        try (ChainReader instream = new ChainReaderHelper(getProject(),
+            new InputStreamReader(src.getInputStream(), charset), filterChains)
+                .getAssembledReader()) {
+
+            String text = instream.readFully();
 
-            if (text != null && text.length() != 0) {
+            if (!(text == null || text.isEmpty())) {
                 if (!text.endsWith("\n")) {
                     text = text + "\n";
                 }
-                tis = new 
ByteArrayInputStream(text.getBytes(ResourceUtils.ISO_8859_1));
+                ByteArrayInputStream tis = new ByteArrayInputStream(
+                    text.getBytes(ResourceUtils.ISO_8859_1));
                 final Properties props = new Properties();
                 props.load(tis);
 
@@ -206,9 +198,6 @@ public class LoadProperties extends Task {
             }
         } catch (final IOException ioe) {
             throw new BuildException("Unable to load file: " + ioe, ioe, 
getLocation());
-        } finally {
-            FileUtils.close(bis);
-            FileUtils.close(tis);
         }
     }
 
@@ -217,7 +206,7 @@ public class LoadProperties extends Task {
      * @param filter the filter to add
      */
     public final void addFilterChain(FilterChain filter) {
-        filterChains.addElement(filter);
+        filterChains.add(filter);
     }
 
     /**

Reply via email to