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:33 UTC
[33/34] ant git commit: java 5-8
http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/DirectoryScanner.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/DirectoryScanner.java b/src/main/org/apache/tools/ant/DirectoryScanner.java
index 6b52897..f4c26f6 100644
--- a/src/main/org/apache/tools/ant/DirectoryScanner.java
+++ b/src/main/org/apache/tools/ant/DirectoryScanner.java
@@ -22,13 +22,17 @@ import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
+import java.util.Deque;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.LinkedList;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Vector;
+import java.util.function.Predicate;
+import java.util.stream.Stream;
import org.apache.tools.ant.taskdefs.condition.Os;
import org.apache.tools.ant.types.Resource;
@@ -39,7 +43,6 @@ import org.apache.tools.ant.types.selectors.SelectorScanner;
import org.apache.tools.ant.types.selectors.SelectorUtils;
import org.apache.tools.ant.types.selectors.TokenizedPath;
import org.apache.tools.ant.types.selectors.TokenizedPattern;
-import org.apache.tools.ant.util.CollectionUtils;
import org.apache.tools.ant.util.FileUtils;
import org.apache.tools.ant.util.SymbolicLinkUtils;
import org.apache.tools.ant.util.VectorSet;
@@ -217,7 +220,7 @@ public class DirectoryScanner
*
* @see #addDefaultExcludes()
*/
- private static final Set<String> defaultExcludes = new HashSet<String>();
+ private static final Set<String> defaultExcludes = new HashSet<>();
static {
resetDefaultExcludes();
}
@@ -310,7 +313,7 @@ public class DirectoryScanner
*
* @since Ant 1.6
*/
- private final Set<String> scannedDirs = new HashSet<String>();
+ private final Set<String> scannedDirs = new HashSet<>();
/**
* Map of all include patterns that are full file names and don't
@@ -327,7 +330,7 @@ public class DirectoryScanner
*
* @since Ant 1.8.0
*/
- private final Map<String, TokenizedPath> includeNonPatterns = new HashMap<String, TokenizedPath>();
+ private final Map<String, TokenizedPath> includeNonPatterns = new HashMap<>();
/**
* Map of all exclude patterns that are full file names and don't
@@ -344,7 +347,7 @@ public class DirectoryScanner
*
* @since Ant 1.8.0
*/
- private final Map<String, TokenizedPath> excludeNonPatterns = new HashMap<String, TokenizedPath>();
+ private final Map<String, TokenizedPath> excludeNonPatterns = new HashMap<>();
/**
* Array of all include patterns that contain wildcards.
@@ -423,13 +426,7 @@ public class DirectoryScanner
*
* @since Ant 1.8.0
*/
- private final Set<String> notFollowedSymlinks = new HashSet<String>();
-
- /**
- * Sole constructor.
- */
- public DirectoryScanner() {
- }
+ private final Set<String> notFollowedSymlinks = new HashSet<>();
/**
* Test whether or not a given path matches the start of a given
@@ -605,8 +602,8 @@ public class DirectoryScanner
public static void resetDefaultExcludes() {
synchronized (defaultExcludes) {
defaultExcludes.clear();
- for (int i = 0; i < DEFAULTEXCLUDES.length; i++) {
- defaultExcludes.add(DEFAULTEXCLUDES[i]);
+ for (String element : DEFAULTEXCLUDES) {
+ defaultExcludes.add(element);
}
}
}
@@ -619,8 +616,9 @@ public class DirectoryScanner
*
* @param basedir The base directory to scan.
*/
+ @Override
public void setBasedir(final String basedir) {
- setBasedir(basedir == null ? (File) null
+ setBasedir(basedir == null ? null
: new File(basedir.replace('/', File.separatorChar).replace(
'\\', File.separatorChar)));
}
@@ -631,6 +629,7 @@ public class DirectoryScanner
*
* @param basedir The base directory for scanning.
*/
+ @Override
public synchronized void setBasedir(final File basedir) {
this.basedir = basedir;
}
@@ -641,6 +640,7 @@ public class DirectoryScanner
*
* @return the base directory to be scanned.
*/
+ @Override
public synchronized File getBasedir() {
return basedir;
}
@@ -662,6 +662,7 @@ public class DirectoryScanner
* @param isCaseSensitive whether or not the file system should be
* regarded as a case sensitive one.
*/
+ @Override
public synchronized void setCaseSensitive(final boolean isCaseSensitive) {
this.isCaseSensitive = isCaseSensitive;
}
@@ -720,14 +721,13 @@ public class DirectoryScanner
* list is given, all elements must be
* non-<code>null</code>.
*/
+ @Override
public synchronized void setIncludes(final String[] includes) {
if (includes == null) {
this.includes = null;
} else {
- this.includes = new String[includes.length];
- for (int i = 0; i < includes.length; i++) {
- this.includes[i] = normalizePattern(includes[i]);
- }
+ this.includes = Stream.of(includes)
+ .map(DirectoryScanner::normalizePattern).toArray(String[]::new);
}
}
@@ -743,14 +743,13 @@ public class DirectoryScanner
* should be excluded. If a non-<code>null</code> list is
* given, all elements must be non-<code>null</code>.
*/
+ @Override
public synchronized void setExcludes(final String[] excludes) {
if (excludes == null) {
this.excludes = null;
} else {
- this.excludes = new String[excludes.length];
- for (int i = 0; i < excludes.length; i++) {
- this.excludes[i] = normalizePattern(excludes[i]);
- }
+ this.excludes = Stream.of(excludes)
+ .map(DirectoryScanner::normalizePattern).toArray(String[]::new);
}
}
@@ -769,18 +768,14 @@ public class DirectoryScanner
*/
public synchronized void addExcludes(final String[] excludes) {
if (excludes != null && excludes.length > 0) {
- if (this.excludes != null && this.excludes.length > 0) {
- final String[] tmp = new String[excludes.length
- + this.excludes.length];
- System.arraycopy(this.excludes, 0, tmp, 0,
- this.excludes.length);
- for (int i = 0; i < excludes.length; i++) {
- tmp[this.excludes.length + i] =
- normalizePattern(excludes[i]);
- }
- this.excludes = tmp;
- } else {
+ if (this.excludes == null || this.excludes.length == 0) {
setExcludes(excludes);
+ } else {
+ this.excludes = Stream
+ .concat(Stream.of(this.excludes),
+ Stream.of(excludes)
+ .map(DirectoryScanner::normalizePattern))
+ .toArray(String[]::new);
}
}
}
@@ -808,6 +803,7 @@ public class DirectoryScanner
*
* @param selectors specifies the selectors to be invoked on a scan.
*/
+ @Override
public synchronized void setSelectors(final FileSelector[] selectors) {
this.selectors = selectors;
}
@@ -833,6 +829,7 @@ public class DirectoryScanner
* @exception IllegalStateException if the base directory was set
* incorrectly (i.e. if it doesn't exist or isn't a directory).
*/
+ @Override
public void scan() throws IllegalStateException {
synchronized (scanLock) {
if (scanning) {
@@ -857,10 +854,10 @@ public class DirectoryScanner
clearResults();
// set in/excludes to reasonable defaults if needed:
- final boolean nullIncludes = (includes == null);
+ final boolean nullIncludes = includes == null;
includes = nullIncludes
- ? new String[] {SelectorUtils.DEEP_TREE_MATCH} : includes;
- final boolean nullExcludes = (excludes == null);
+ ? new String[] { SelectorUtils.DEEP_TREE_MATCH } : includes;
+ final boolean nullExcludes = excludes == null;
excludes = nullExcludes ? new String[0] : excludes;
if (basedir != null && !followSymlinks
@@ -887,22 +884,19 @@ public class DirectoryScanner
} else if (!basedir.isDirectory()) {
illegal = new IllegalStateException("basedir "
+ basedir
- + " is not a"
- + " directory.");
+ + " is not a directory.");
}
if (illegal != null) {
throw illegal;
}
}
if (isIncluded(TokenizedPath.EMPTY_PATH)) {
- if (!isExcluded(TokenizedPath.EMPTY_PATH)) {
- if (isSelected("", basedir)) {
- dirsIncluded.addElement("");
- } else {
- dirsDeselected.addElement("");
- }
- } else {
+ if (isExcluded(TokenizedPath.EMPTY_PATH)) {
dirsExcluded.addElement("");
+ } else if (isSelected("", basedir)) {
+ dirsIncluded.addElement("");
+ } else {
+ dirsDeselected.addElement("");
}
} else {
dirsNotIncluded.addElement("");
@@ -930,18 +924,19 @@ public class DirectoryScanner
*/
private void checkIncludePatterns() {
ensureNonPatternSetsReady();
- final Map<TokenizedPath, String> newroots = new HashMap<TokenizedPath, String>();
+ final Map<TokenizedPath, String> newroots = new HashMap<>();
// put in the newroots map the include patterns without
// wildcard tokens
- for (int i = 0; i < includePatterns.length; i++) {
- final String pattern = includePatterns[i].toString();
+ for (TokenizedPattern includePattern : includePatterns) {
+ final String pattern = includePattern.toString();
if (!shouldSkipPattern(pattern)) {
- newroots.put(includePatterns[i].rtrimWildcardTokens(),
+ newroots.put(includePattern.rtrimWildcardTokens(),
pattern);
}
}
- for (final Map.Entry<String, TokenizedPath> entry : includeNonPatterns.entrySet()) {
+ for (final Map.Entry<String, TokenizedPath> entry : includeNonPatterns
+ .entrySet()) {
final String pattern = entry.getKey();
if (!shouldSkipPattern(pattern)) {
newroots.put(entry.getValue(), pattern);
@@ -1046,10 +1041,9 @@ public class DirectoryScanner
private boolean shouldSkipPattern(final String pattern) {
if (FileUtils.isAbsolutePath(pattern)) {
//skip abs. paths not under basedir, if set:
- if (basedir != null
- && !SelectorUtils.matchPatternStart(pattern,
- basedir.getAbsolutePath(),
- isCaseSensitive())) {
+ if (!(basedir == null || SelectorUtils.matchPatternStart(pattern,
+ basedir.getAbsolutePath(),
+ isCaseSensitive()))) {
return true;
}
} else if (basedir == null) {
@@ -1063,14 +1057,14 @@ public class DirectoryScanner
* Clear the result caches for a scan.
*/
protected synchronized void clearResults() {
- filesIncluded = new VectorSet<String>();
- filesNotIncluded = new VectorSet<String>();
- filesExcluded = new VectorSet<String>();
- filesDeselected = new VectorSet<String>();
- dirsIncluded = new VectorSet<String>();
- dirsNotIncluded = new VectorSet<String>();
- dirsExcluded = new VectorSet<String>();
- dirsDeselected = new VectorSet<String>();
+ filesIncluded = new VectorSet<>();
+ filesNotIncluded = new VectorSet<>();
+ filesExcluded = new VectorSet<>();
+ filesDeselected = new VectorSet<>();
+ dirsIncluded = new VectorSet<>();
+ dirsNotIncluded = new VectorSet<>();
+ dirsExcluded = new VectorSet<>();
+ dirsDeselected = new VectorSet<>();
everythingIncluded = (basedir != null);
scannedDirs.clear();
notFollowedSymlinks.clear();
@@ -1135,10 +1129,10 @@ public class DirectoryScanner
}
private void processSlowScan(final String[] arr) {
- for (int i = 0; i < arr.length; i++) {
- final TokenizedPath path = new TokenizedPath(arr[i]);
+ for (String element : arr) {
+ final TokenizedPath path = new TokenizedPath(element);
if (!couldHoldIncluded(path) || contentsExcluded(path)) {
- scandir(new File(basedir, arr[i]), path, false);
+ scandir(new File(basedir, element), path, false);
}
}
}
@@ -1196,17 +1190,17 @@ public class DirectoryScanner
if (!dir.exists()) {
throw new BuildException(dir + DOES_NOT_EXIST_POSTFIX);
} else if (!dir.isDirectory()) {
- throw new BuildException(dir + " is not a directory.");
+ throw new BuildException("%s is not a directory.", dir);
} else {
- throw new BuildException("IO error scanning directory '"
- + dir.getAbsolutePath() + "'");
+ throw new BuildException("IO error scanning directory '%s'",
+ dir.getAbsolutePath());
}
}
scandir(dir, path, fast, newfiles, new LinkedList<String>());
}
private void scandir(final File dir, final TokenizedPath path, final boolean fast,
- String[] newfiles, final LinkedList<String> directoryNamesFollowed) {
+ String[] newfiles, final Deque<String> directoryNamesFollowed) {
String vpath = path.toString();
if (vpath.length() > 0 && !vpath.endsWith(File.separator)) {
vpath += File.separator;
@@ -1217,12 +1211,12 @@ public class DirectoryScanner
return;
}
if (!followSymlinks) {
- final ArrayList<String> noLinks = new ArrayList<String>();
- for (int i = 0; i < newfiles.length; i++) {
+ final ArrayList<String> noLinks = new ArrayList<>();
+ for (String newfile : newfiles) {
try {
- if (SYMLINK_UTILS.isSymbolicLink(dir, newfiles[i])) {
- final String name = vpath + newfiles[i];
- final File file = new File(dir, newfiles[i]);
+ if (SYMLINK_UTILS.isSymbolicLink(dir, newfile)) {
+ final String name = vpath + newfile;
+ final File file = new File(dir, newfile);
if (file.isDirectory()) {
dirsExcluded.addElement(name);
} else if (file.isFile()) {
@@ -1230,17 +1224,17 @@ public class DirectoryScanner
}
accountForNotFollowedSymlink(name, file);
} else {
- noLinks.add(newfiles[i]);
+ noLinks.add(newfile);
}
} catch (final IOException ioe) {
final String msg = "IOException caught while checking "
+ "for links, couldn't get canonical path!";
// will be caught and redirected to Ant's logging system
System.err.println(msg);
- noLinks.add(newfiles[i]);
+ noLinks.add(newfile);
}
}
- newfiles = (noLinks.toArray(new String[noLinks.size()]));
+ newfiles = noLinks.toArray(new String[noLinks.size()]);
} else {
directoryNamesFollowed.addFirst(dir.getName());
}
@@ -1322,7 +1316,7 @@ public class DirectoryScanner
private void accountForIncludedDir(final TokenizedPath name,
final File file, final boolean fast,
final String[] children,
- final LinkedList<String> directoryNamesFollowed) {
+ final Deque<String> directoryNamesFollowed) {
processIncluded(name, file, dirsIncluded, dirsExcluded, dirsDeselected);
if (fast && couldHoldIncluded(name) && !contentsExcluded(name)) {
scandir(file, name, fast, children, directoryNamesFollowed);
@@ -1343,13 +1337,12 @@ public class DirectoryScanner
}
private void processIncluded(final TokenizedPath path,
- final File file, final Vector<String> inc, final Vector<String> exc,
- final Vector<String> des) {
+ final File file, final List<String> inc, final List<String> exc,
+ final List<String> des) {
final String name = path.toString();
if (inc.contains(name) || exc.contains(name) || des.contains(name)) {
return;
}
-
boolean included = false;
if (isExcluded(path)) {
exc.add(name);
@@ -1385,17 +1378,13 @@ public class DirectoryScanner
private boolean isIncluded(final TokenizedPath path) {
ensureNonPatternSetsReady();
- if (isCaseSensitive()
- ? includeNonPatterns.containsKey(path.toString())
- : includeNonPatterns.containsKey(path.toString().toUpperCase())) {
- return true;
- }
- for (int i = 0; i < includePatterns.length; i++) {
- if (includePatterns[i].matchPath(path, isCaseSensitive())) {
- return true;
- }
+ String toMatch = path.toString();
+ if (!isCaseSensitive()) {
+ toMatch = toMatch.toUpperCase();
}
- return false;
+ return includeNonPatterns.containsKey(toMatch)
+ || Stream.of(includePatterns)
+ .anyMatch(p -> p.matchPath(path, isCaseSensitive()));
}
/**
@@ -1419,19 +1408,11 @@ public class DirectoryScanner
* least one include pattern, or <code>false</code> otherwise.
*/
private boolean couldHoldIncluded(final TokenizedPath tokenizedName) {
- for (int i = 0; i < includePatterns.length; i++) {
- if (couldHoldIncluded(tokenizedName, includePatterns[i])) {
- return true;
- }
- }
- for (final Iterator<TokenizedPath> iter = includeNonPatterns.values().iterator();
- iter.hasNext();) {
- if (couldHoldIncluded(tokenizedName,
- iter.next().toPattern())) {
- return true;
- }
- }
- return false;
+ return Stream
+ .concat(Stream.of(includePatterns),
+ includeNonPatterns.values().stream()
+ .map(TokenizedPath::toPattern))
+ .anyMatch(pat -> couldHoldIncluded(tokenizedName, pat));
}
/**
@@ -1481,12 +1462,8 @@ public class DirectoryScanner
private boolean isMorePowerfulThanExcludes(final String name) {
final String soughtexclude =
name + File.separatorChar + SelectorUtils.DEEP_TREE_MATCH;
- for (int counter = 0; counter < excludePatterns.length; counter++) {
- if (excludePatterns[counter].toString().equals(soughtexclude)) {
- return false;
- }
- }
- return true;
+ return Stream.of(excludePatterns).map(Object::toString)
+ .noneMatch(Predicate.isEqual(soughtexclude));
}
/**
@@ -1495,14 +1472,10 @@ public class DirectoryScanner
* @return whether all the specified directory's contents are excluded.
*/
/* package */ boolean contentsExcluded(final TokenizedPath path) {
- for (int i = 0; i < excludePatterns.length; i++) {
- if (excludePatterns[i].endsWith(SelectorUtils.DEEP_TREE_MATCH)
- && excludePatterns[i].withoutLastToken()
- .matchPath(path, isCaseSensitive())) {
- return true;
- }
- }
- return false;
+ return Stream.of(excludePatterns)
+ .filter(p -> p.endsWith(SelectorUtils.DEEP_TREE_MATCH))
+ .map(TokenizedPattern::withoutLastToken)
+ .anyMatch(wlt -> wlt.matchPath(path, isCaseSensitive()));
}
/**
@@ -1528,17 +1501,13 @@ public class DirectoryScanner
private boolean isExcluded(final TokenizedPath name) {
ensureNonPatternSetsReady();
- if (isCaseSensitive()
- ? excludeNonPatterns.containsKey(name.toString())
- : excludeNonPatterns.containsKey(name.toString().toUpperCase())) {
- return true;
- }
- for (int i = 0; i < excludePatterns.length; i++) {
- if (excludePatterns[i].matchPath(name, isCaseSensitive())) {
- return true;
- }
+ String toMatch = name.toString();
+ if (!isCaseSensitive()) {
+ toMatch = toMatch.toUpperCase();
}
- return false;
+ return excludeNonPatterns.containsKey(toMatch)
+ || Stream.of(excludePatterns)
+ .anyMatch(p -> p.matchPath(name, isCaseSensitive()));
}
/**
@@ -1550,14 +1519,8 @@ public class DirectoryScanner
* should not be selected, <code>true</code> otherwise.
*/
protected boolean isSelected(final String name, final File file) {
- if (selectors != null) {
- for (int i = 0; i < selectors.length; i++) {
- if (!selectors[i].isSelected(basedir, name, file)) {
- return false;
- }
- }
- }
- return true;
+ return selectors == null || Stream.of(selectors)
+ .allMatch(sel -> sel.isSelected(basedir, name, file));
}
/**
@@ -1568,14 +1531,14 @@ public class DirectoryScanner
* @return the names of the files which matched at least one of the
* include patterns and none of the exclude patterns.
*/
+ @Override
public String[] getIncludedFiles() {
String[] files;
synchronized (this) {
if (filesIncluded == null) {
throw new IllegalStateException("Must call scan() first");
}
- files = new String[filesIncluded.size()];
- filesIncluded.copyInto(files);
+ files = filesIncluded.toArray(new String[filesIncluded.size()]);
}
Arrays.sort(files);
return files;
@@ -1603,11 +1566,10 @@ public class DirectoryScanner
*
* @see #slowScan
*/
+ @Override
public synchronized String[] getNotIncludedFiles() {
slowScan();
- final String[] files = new String[filesNotIncluded.size()];
- filesNotIncluded.copyInto(files);
- return files;
+ return filesNotIncluded.toArray(new String[filesNotIncluded.size()]);
}
/**
@@ -1621,11 +1583,10 @@ public class DirectoryScanner
*
* @see #slowScan
*/
+ @Override
public synchronized String[] getExcludedFiles() {
slowScan();
- final String[] files = new String[filesExcluded.size()];
- filesExcluded.copyInto(files);
- return files;
+ return filesExcluded.toArray(new String[filesExcluded.size()]);
}
/**
@@ -1639,11 +1600,10 @@ public class DirectoryScanner
*
* @see #slowScan
*/
+ @Override
public synchronized String[] getDeselectedFiles() {
slowScan();
- final String[] files = new String[filesDeselected.size()];
- filesDeselected.copyInto(files);
- return files;
+ return filesDeselected.toArray(new String[filesDeselected.size()]);
}
/**
@@ -1654,14 +1614,14 @@ public class DirectoryScanner
* @return the names of the directories which matched at least one of the
* include patterns and none of the exclude patterns.
*/
+ @Override
public String[] getIncludedDirectories() {
String[] directories;
synchronized (this) {
if (dirsIncluded == null) {
throw new IllegalStateException("Must call scan() first");
}
- directories = new String[dirsIncluded.size()];
- dirsIncluded.copyInto(directories);
+ directories = dirsIncluded.toArray(new String[dirsIncluded.size()]);
}
Arrays.sort(directories);
return directories;
@@ -1689,11 +1649,10 @@ public class DirectoryScanner
*
* @see #slowScan
*/
+ @Override
public synchronized String[] getNotIncludedDirectories() {
slowScan();
- final String[] directories = new String[dirsNotIncluded.size()];
- dirsNotIncluded.copyInto(directories);
- return directories;
+ return dirsNotIncluded.toArray(new String[dirsNotIncluded.size()]);
}
/**
@@ -1707,11 +1666,10 @@ public class DirectoryScanner
*
* @see #slowScan
*/
+ @Override
public synchronized String[] getExcludedDirectories() {
slowScan();
- final String[] directories = new String[dirsExcluded.size()];
- dirsExcluded.copyInto(directories);
- return directories;
+ return dirsExcluded.toArray(new String[dirsExcluded.size()]);
}
/**
@@ -1725,11 +1683,10 @@ public class DirectoryScanner
*
* @see #slowScan
*/
+ @Override
public synchronized String[] getDeselectedDirectories() {
slowScan();
- final String[] directories = new String[dirsDeselected.size()];
- dirsDeselected.copyInto(directories);
- return directories;
+ return dirsDeselected.toArray(new String[dirsDeselected.size()]);
}
/**
@@ -1754,20 +1711,15 @@ public class DirectoryScanner
/**
* Add default exclusions to the current exclusions set.
*/
+ @Override
public synchronized void addDefaultExcludes() {
- final int excludesLength = excludes == null ? 0 : excludes.length;
- String[] newExcludes;
- final String[] defaultExcludesTemp = getDefaultExcludes();
- newExcludes = new String[excludesLength + defaultExcludesTemp.length];
- if (excludesLength > 0) {
- System.arraycopy(excludes, 0, newExcludes, 0, excludesLength);
- }
- for (int i = 0; i < defaultExcludesTemp.length; i++) {
- newExcludes[i + excludesLength] =
- defaultExcludesTemp[i].replace('/', File.separatorChar)
- .replace('\\', File.separatorChar);
+ Stream<String> s = Stream.of(getDefaultExcludes())
+ .map(p -> p.replace('/', File.separatorChar).replace('\\',
+ File.separatorChar));
+ if (excludes != null) {
+ s = Stream.concat(Stream.of(excludes), s);
}
- excludes = newExcludes;
+ excludes = s.toArray(String[]::new);
}
/**
@@ -1777,6 +1729,7 @@ public class DirectoryScanner
* @return the resource with the given name.
* @since Ant 1.5.2
*/
+ @Override
public synchronized Resource getResource(final String name) {
return new FileResource(basedir, name);
}
@@ -1838,14 +1791,14 @@ public class DirectoryScanner
* @since Ant 1.8.0
*/
private TokenizedPattern[] fillNonPatternSet(final Map<String, TokenizedPath> map, final String[] patterns) {
- final ArrayList<TokenizedPattern> al = new ArrayList<TokenizedPattern>(patterns.length);
- for (int i = 0; i < patterns.length; i++) {
- if (!SelectorUtils.hasWildcards(patterns[i])) {
+ final List<TokenizedPattern> al = new ArrayList<>(patterns.length);
+ for (String pattern : patterns) {
+ if (SelectorUtils.hasWildcards(pattern)) {
+ al.add(new TokenizedPattern(pattern));
+ } else {
final String s = isCaseSensitive()
- ? patterns[i] : patterns[i].toUpperCase();
+ ? pattern : pattern.toUpperCase();
map.put(s, new TokenizedPath(s));
- } else {
- al.add(new TokenizedPattern(patterns[i]));
}
}
return al.toArray(new TokenizedPattern[al.size()]);
@@ -1863,14 +1816,14 @@ public class DirectoryScanner
* @since Ant 1.8.0
*/
private boolean causesIllegalSymlinkLoop(final String dirName, final File parent,
- final LinkedList<String> directoryNamesFollowed) {
+ final Deque<String> directoryNamesFollowed) {
try {
if (directoryNamesFollowed.size() >= maxLevelsOfSymlinks
- && CollectionUtils.frequency(directoryNamesFollowed, dirName)
+ && Collections.frequency(directoryNamesFollowed, dirName)
>= maxLevelsOfSymlinks
&& SYMLINK_UTILS.isSymbolicLink(parent, dirName)) {
- final ArrayList<String> files = new ArrayList<String>();
+ final List<String> files = new ArrayList<>();
File f = FILE_UTILS.resolveFile(parent, dirName);
final String target = f.getCanonicalPath();
files.add(target);
@@ -1882,18 +1835,17 @@ public class DirectoryScanner
f = FILE_UTILS.resolveFile(parent, relPath + dir);
files.add(f.getCanonicalPath());
if (files.size() > maxLevelsOfSymlinks
- && CollectionUtils.frequency(files, target)
+ && Collections.frequency(files, target)
> maxLevelsOfSymlinks) {
return true;
}
}
}
-
}
return false;
} catch (final IOException ex) {
- throw new BuildException("Caught error while checking for"
- + " symbolic links", ex);
+ throw new BuildException(
+ "Caught error while checking for symbolic links", ex);
}
}
http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/DynamicConfigurator.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/DynamicConfigurator.java b/src/main/org/apache/tools/ant/DynamicConfigurator.java
index e48062b..1eb321e 100644
--- a/src/main/org/apache/tools/ant/DynamicConfigurator.java
+++ b/src/main/org/apache/tools/ant/DynamicConfigurator.java
@@ -26,4 +26,3 @@ package org.apache.tools.ant;
public interface DynamicConfigurator
extends DynamicAttribute, DynamicElement {
}
-
http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/Evaluable.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/Evaluable.java b/src/main/org/apache/tools/ant/Evaluable.java
index 47f09c7..bd0ec7e 100644
--- a/src/main/org/apache/tools/ant/Evaluable.java
+++ b/src/main/org/apache/tools/ant/Evaluable.java
@@ -17,13 +17,19 @@
*/
package org.apache.tools.ant;
+import java.util.function.Supplier;
+
/**
* Kind of task attribute that can be evaluated before being assigned
+ * @param <T> as {@link Supplier}
*
* @see RuntimeConfigurable
*/
-public interface Evaluable {
+public interface Evaluable<T> extends Supplier<T> {
- Object eval();
+ T eval();
+ default T get() {
+ return eval();
+ }
}
http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/IntrospectionHelper.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/IntrospectionHelper.java b/src/main/org/apache/tools/ant/IntrospectionHelper.java
index 2b31e43..5368042 100644
--- a/src/main/org/apache/tools/ant/IntrospectionHelper.java
+++ b/src/main/org/apache/tools/ant/IntrospectionHelper.java
@@ -63,7 +63,7 @@ public final class IntrospectionHelper {
/**
* Helper instances we've already created (Class.getName() to IntrospectionHelper).
*/
- private static final Map<String, IntrospectionHelper> HELPERS = new Hashtable<String, IntrospectionHelper>();
+ private static final Map<String, IntrospectionHelper> HELPERS = new Hashtable<>();
/**
* Map from primitive types to wrapper classes for use in
@@ -71,7 +71,7 @@ public final class IntrospectionHelper {
* and boolean are in here even though they get special treatment
* - this way we only need to test for the wrapper class.
*/
- private static final Map<Class<?>, Class<?>> PRIMITIVE_TYPE_MAP = new HashMap<Class<?>, Class<?>>(8);
+ private static final Map<Class<?>, Class<?>> PRIMITIVE_TYPE_MAP = new HashMap<>(8);
// Set up PRIMITIVE_TYPE_MAP
static {
@@ -91,30 +91,30 @@ public final class IntrospectionHelper {
* Map from attribute names to attribute types
* (String to Class).
*/
- private final Hashtable<String, Class<?>> attributeTypes = new Hashtable<String, Class<?>>();
+ private final Map<String, Class<?>> attributeTypes = new Hashtable<>();
/**
* Map from attribute names to attribute setter methods
* (String to AttributeSetter).
*/
- private final Hashtable<String, AttributeSetter> attributeSetters = new Hashtable<String, AttributeSetter>();
+ private final Map<String, AttributeSetter> attributeSetters = new Hashtable<>();
/**
* Map from attribute names to nested types
* (String to Class).
*/
- private final Hashtable<String, Class<?>> nestedTypes = new Hashtable<String, Class<?>>();
+ private final Map<String, Class<?>> nestedTypes = new Hashtable<>();
/**
* Map from attribute names to methods to create nested types
* (String to NestedCreator).
*/
- private final Hashtable<String, NestedCreator> nestedCreators = new Hashtable<String, NestedCreator>();
+ private final Map<String, NestedCreator> nestedCreators = new Hashtable<>();
/**
* Vector of methods matching add[Configured](Class) pattern.
*/
- private final List<Method> addTypeMethods = new ArrayList<Method>();
+ private final List<Method> addTypeMethods = new ArrayList<>();
/**
* The method to invoke to add PCDATA.
@@ -706,7 +706,7 @@ public final class IntrospectionHelper {
* @return true if the given nested element is supported
*/
public boolean supportsNestedElement(final String parentUri, final String elementName) {
- if (isDynamic() || addTypeMethods.size() > 0) {
+ if (isDynamic() || !addTypeMethods.isEmpty()) {
return true;
}
return supportsReflectElement(parentUri, elementName);
@@ -731,7 +731,7 @@ public final class IntrospectionHelper {
*/
public boolean supportsNestedElement(final String parentUri, final String elementName,
final Project project, final Object parent) {
- if (addTypeMethods.size() > 0
+ if (!addTypeMethods.isEmpty()
&& createAddTypeCreator(project, parent, elementName) != null) {
return true;
}
@@ -944,7 +944,7 @@ public final class IntrospectionHelper {
* @see #getAttributeMap
*/
public Enumeration<String> getAttributes() {
- return attributeSetters.keys();
+ return Collections.enumeration(attributeSetters.keySet());
}
/**
@@ -968,7 +968,7 @@ public final class IntrospectionHelper {
* @see #getNestedElementMap
*/
public Enumeration<String> getNestedElements() {
- return nestedTypes.keys();
+ return Collections.enumeration(nestedTypes.keySet());
}
/**
@@ -1533,7 +1533,7 @@ public final class IntrospectionHelper {
*/
private NestedCreator createAddTypeCreator(
final Project project, final Object parent, final String elementName) throws BuildException {
- if (addTypeMethods.size() == 0) {
+ if (addTypeMethods.isEmpty()) {
return null;
}
final ComponentHelper helper = ComponentHelper.getComponentHelper(project);
@@ -1602,7 +1602,7 @@ public final class IntrospectionHelper {
for (int c = 0; c < size; ++c) {
final Method current = addTypeMethods.get(c);
if (current.getParameterTypes()[0].equals(argClass)) {
- if (method.getName().equals("addConfigured")) {
+ if ("addConfigured".equals(method.getName())) {
// add configured replaces the add method
addTypeMethods.set(c, method);
}
http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/Location.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/Location.java b/src/main/org/apache/tools/ant/Location.java
index 8e25d10..0e83760 100644
--- a/src/main/org/apache/tools/ant/Location.java
+++ b/src/main/org/apache/tools/ant/Location.java
@@ -19,6 +19,7 @@
package org.apache.tools.ant;
import java.io.Serializable;
+import java.util.Objects;
import org.apache.tools.ant.util.FileUtils;
import org.xml.sax.Locator;
@@ -131,8 +132,9 @@ public class Location implements Serializable {
* <code>"fileName: "</code> if only the file name is known,
* and the empty string for unknown locations.
*/
+ @Override
public String toString() {
- StringBuffer buf = new StringBuffer();
+ StringBuilder buf = new StringBuilder();
if (fileName != null) {
buf.append(fileName);
@@ -155,6 +157,7 @@ public class Location implements Serializable {
* as this object.
* @since Ant 1.6.3
*/
+ @Override
public boolean equals(Object other) {
if (this == other) {
return true;
@@ -173,7 +176,8 @@ public class Location implements Serializable {
* @return a hash code value for this location.
* @since Ant 1.6.3
*/
+ @Override
public int hashCode() {
- return toString().hashCode();
+ return Objects.hash(fileName, lineNumber);
}
}
http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/Main.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/Main.java b/src/main/org/apache/tools/ant/Main.java
index bbaadd0..1ad6277 100644
--- a/src/main/org/apache/tools/ant/Main.java
+++ b/src/main/org/apache/tools/ant/Main.java
@@ -87,16 +87,16 @@ public class Main implements AntMain {
private PrintStream err = System.err;
/** The build targets. */
- private final Vector<String> targets = new Vector<String>();
+ private final Vector<String> targets = new Vector<>();
/** Set of properties that can be used by tasks. */
private final Properties definedProps = new Properties();
/** Names of classes to add as listeners to project. */
- private final Vector<String> listeners = new Vector<String>(1);
+ private final Vector<String> listeners = new Vector<>(1);
/** File names of property files to load on startup. */
- private final Vector<String> propertyFiles = new Vector<String>(1);
+ private final Vector<String> propertyFiles = new Vector<>(1);
/** Indicates whether this build is to support interactive input */
private boolean allowInput = true;
@@ -155,17 +155,9 @@ public class Main implements AntMain {
*/
private boolean proxy = false;
- private final Map<Class<?>, List<String>> extraArguments = new HashMap<Class<?>, List<String>>();
-
- private static final GetProperty NOPROPERTIES = new GetProperty() {
- public Object getProperty(final String aName) {
- // No existing property takes precedence
- return null;
- }
- };
-
-
+ private final Map<Class<?>, List<String>> extraArguments = new HashMap<>();
+ private static final GetProperty NOPROPERTIES = aName -> null;
/**
* Prints the message of the Throwable if it (the message) is not
@@ -569,8 +561,8 @@ public class Main implements AntMain {
*/
final String arg = args[argPos];
String name = arg.substring(2, arg.length());
- String value = null;
- final int posEq = name.indexOf("=");
+ String value;
+ final int posEq = name.indexOf('=');
if (posEq > 0) {
value = name.substring(posEq + 1);
name = name.substring(0, posEq);
@@ -1153,7 +1145,7 @@ public class Main implements AntMain {
* @return the filtered targets.
*/
private static Map<String, Target> removeDuplicateTargets(final Map<String, Target> targets) {
- final Map<Location, Target> locationMap = new HashMap<Location, Target>();
+ final Map<Location, Target> locationMap = new HashMap<>();
for (final Entry<String, Target> entry : targets.entrySet()) {
final String name = entry.getKey();
final Target target = entry.getValue();
@@ -1168,7 +1160,7 @@ public class Main implements AntMain {
target.getLocation(), target); // Smallest name wins
}
}
- final Map<String, Target> ret = new HashMap<String, Target>();
+ final Map<String, Target> ret = new HashMap<>();
for (final Target target : locationMap.values()) {
ret.put(target.getName(), target);
}
@@ -1191,15 +1183,15 @@ public class Main implements AntMain {
final Map<String, Target> ptargets = removeDuplicateTargets(project.getTargets());
// split the targets in top-level and sub-targets depending
// on the presence of a description
- final Vector<String> topNames = new Vector<String>();
- final Vector<String> topDescriptions = new Vector<String>();
- final Vector<Enumeration<String>> topDependencies = new Vector<Enumeration<String>>();
- final Vector<String> subNames = new Vector<String>();
- final Vector<Enumeration<String>> subDependencies = new Vector<Enumeration<String>>();
+ final Vector<String> topNames = new Vector<>();
+ final Vector<String> topDescriptions = new Vector<>();
+ final Vector<Enumeration<String>> topDependencies = new Vector<>();
+ final Vector<String> subNames = new Vector<>();
+ final Vector<Enumeration<String>> subDependencies = new Vector<>();
for (final Target currentTarget : ptargets.values()) {
final String targetName = currentTarget.getName();
- if (targetName.equals("")) {
+ if ("".equals(targetName)) {
continue;
}
final String targetDescription = currentTarget.getDescription();
@@ -1227,7 +1219,7 @@ public class Main implements AntMain {
"Main targets:", maxLength);
//if there were no main targets, we list all subtargets
//as it means nothing has a description
- if (topNames.size() == 0) {
+ if (topNames.isEmpty()) {
printSubTargets = true;
}
if (printSubTargets) {
http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/PathTokenizer.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/PathTokenizer.java b/src/main/org/apache/tools/ant/PathTokenizer.java
index 6e6bea6..2beb09c 100644
--- a/src/main/org/apache/tools/ant/PathTokenizer.java
+++ b/src/main/org/apache/tools/ant/PathTokenizer.java
@@ -127,7 +127,7 @@ public class PathTokenizer {
} else {
// we are on NetWare, tokenizing is handled a little differently,
// due to the fact that NetWare has multiple-character volume names.
- if (token.equals(File.pathSeparator) || token.equals(":")) {
+ if (token.equals(File.pathSeparator) || ":".equals(token)) {
// ignore ";" and get the next token
token = tokenizer.nextToken().trim();
}
@@ -138,7 +138,7 @@ public class PathTokenizer {
// make sure we aren't going to get the path separator next
if (!nextToken.equals(File.pathSeparator)) {
- if (nextToken.equals(":")) {
+ if (":".equals(nextToken)) {
if (!token.startsWith("/") && !token.startsWith("\\")
&& !token.startsWith(".")
&& !token.startsWith("..")) {
@@ -163,4 +163,3 @@ public class PathTokenizer {
return token;
}
}
-
http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/Project.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/Project.java b/src/main/org/apache/tools/ant/Project.java
index 17f2467..23799bc 100644
--- a/src/main/org/apache/tools/ant/Project.java
+++ b/src/main/org/apache/tools/ant/Project.java
@@ -144,13 +144,13 @@ public class Project implements ResourceFactory {
private final Hashtable<String, Object> references = new AntRefTable();
/** Map of id references - used for indicating broken build files */
- private final HashMap<String, Object> idReferences = new HashMap<String, Object>();
+ private final HashMap<String, Object> idReferences = new HashMap<>();
/** Name of the project's default target. */
private String defaultTarget;
/** Map from target names to targets (String to Target). */
- private final Hashtable<String, Target> targets = new Hashtable<String, Target>();
+ private final Hashtable<String, Target> targets = new Hashtable<>();
/** Set of global filters. */
private final FilterSet globalFilterSet = new FilterSet();
@@ -193,11 +193,11 @@ public class Project implements ResourceFactory {
/** Records the latest task to be executed on a thread. */
private final Map<Thread,Task> threadTasks =
- Collections.synchronizedMap(new WeakHashMap<Thread, Task>());
+ Collections.synchronizedMap(new WeakHashMap<>());
/** Records the latest task to be executed on a thread group. */
private final Map<ThreadGroup,Task> threadGroupTasks
- = Collections.synchronizedMap(new WeakHashMap<ThreadGroup,Task>());
+ = Collections.synchronizedMap(new WeakHashMap<>());
/**
* Called to handle any input requests.
@@ -437,7 +437,7 @@ public class Project implements ResourceFactory {
*/
public Vector<BuildListener> getBuildListeners() {
synchronized (listenersLock) {
- final Vector<BuildListener> r = new Vector<BuildListener>(listeners.length);
+ final Vector<BuildListener> r = new Vector<>(listeners.length);
for (int i = 0; i < listeners.length; i++) {
r.add(listeners[i]);
}
@@ -1046,7 +1046,7 @@ public class Project implements ResourceFactory {
* @since Ant 1.8.1
*/
public Map<String, Class<?>> getCopyOfTaskDefinitions() {
- return new HashMap<String, Class<?>>(getTaskDefinitions());
+ return new HashMap<>(getTaskDefinitions());
}
/**
@@ -1088,7 +1088,7 @@ public class Project implements ResourceFactory {
* @since Ant 1.8.1
*/
public Map<String, Class<?>> getCopyOfDataTypeDefinitions() {
- return new HashMap<String, Class<?>>(getDataTypeDefinitions());
+ return new HashMap<>(getDataTypeDefinitions());
}
/**
@@ -1168,7 +1168,7 @@ public class Project implements ResourceFactory {
* @since Ant 1.8.1
*/
public Map<String, Target> getCopyOfTargets() {
- return new HashMap<String, Target>(targets);
+ return new HashMap<>(targets);
}
/**
@@ -1273,12 +1273,10 @@ public class Project implements ResourceFactory {
final Task task = getThreadTask(Thread.currentThread());
if (task == null) {
log(output, isWarning ? MSG_WARN : MSG_INFO);
+ } else if (isWarning) {
+ task.handleErrorOutput(output);
} else {
- if (isWarning) {
- task.handleErrorOutput(output);
- } else {
- task.handleOutput(output);
- }
+ task.handleOutput(output);
}
}
@@ -1297,12 +1295,11 @@ public class Project implements ResourceFactory {
*/
public int defaultInput(final byte[] buffer, final int offset, final int length)
throws IOException {
- if (defaultInputStream != null) {
- System.out.flush();
- return defaultInputStream.read(buffer, offset, length);
- } else {
+ if (defaultInputStream == null) {
throw new EOFException("No input provided for project");
}
+ System.out.flush();
+ return defaultInputStream.read(buffer, offset, length);
}
/**
@@ -1322,9 +1319,8 @@ public class Project implements ResourceFactory {
final Task task = getThreadTask(Thread.currentThread());
if (task == null) {
return defaultInput(buffer, offset, length);
- } else {
- return task.handleInput(buffer, offset, length);
}
+ return task.handleInput(buffer, offset, length);
}
/**
@@ -1342,12 +1338,10 @@ public class Project implements ResourceFactory {
final Task task = getThreadTask(Thread.currentThread());
if (task == null) {
fireMessageLogged(this, output, isError ? MSG_ERR : MSG_INFO);
+ } else if (isError) {
+ task.handleErrorFlush(output);
} else {
- if (isError) {
- task.handleErrorFlush(output);
- } else {
- task.handleFlush(output);
- }
+ task.handleFlush(output);
}
}
@@ -1383,7 +1377,7 @@ public class Project implements ResourceFactory {
*/
public void executeSortedTargets(final Vector<Target> sortedTargets)
throws BuildException {
- final Set<String> succeededTargets = new HashSet<String>();
+ final Set<String> succeededTargets = new HashSet<>();
BuildException buildException = null; // first build exception
for (final Target curtarget : sortedTargets) {
boolean canExecute = true;
@@ -1749,9 +1743,9 @@ public class Project implements ResourceFactory {
return ((ProjectComponent) o).getProject();
}
try {
- final Method m = o.getClass().getMethod("getProject", (Class[]) null);
- if (Project.class == m.getReturnType()) {
- return (Project) m.invoke(o, (Object[]) null);
+ final Method m = o.getClass().getMethod("getProject");
+ if (Project.class.equals(m.getReturnType())) {
+ return (Project) m.invoke(o);
}
} catch (final Exception e) {
//too bad
@@ -1819,9 +1813,9 @@ public class Project implements ResourceFactory {
*/
public final Vector<Target> topoSort(final String[] root, final Hashtable<String, Target> targetTable,
final boolean returnAll) throws BuildException {
- final Vector<Target> ret = new VectorSet<Target>();
- final Hashtable<String, String> state = new Hashtable<String, String>();
- final Stack<String> visiting = new Stack<String>();
+ final Vector<Target> ret = new VectorSet<>();
+ final Hashtable<String, String> state = new Hashtable<>();
+ final Stack<String> visiting = new Stack<>();
// We first run a DFS based sort using each root as a starting node.
// This creates the minimum sequence of Targets to the root node(s).
@@ -1832,7 +1826,7 @@ public class Project implements ResourceFactory {
// build Target.
for (int i = 0; i < root.length; i++) {
- final String st = (state.get(root[i]));
+ final String st = state.get(root[i]);
if (st == null) {
tsort(root[i], targetTable, state, visiting, ret);
} else if (st == VISITING) {
@@ -1840,7 +1834,7 @@ public class Project implements ResourceFactory {
+ root[i]);
}
}
- final StringBuffer buf = new StringBuffer("Build sequence for target(s)");
+ final StringBuilder buf = new StringBuilder("Build sequence for target(s)");
for (int j = 0; j < root.length; j++) {
buf.append((j == 0) ? " `" : ", `").append(root[j]).append('\'');
@@ -1848,7 +1842,7 @@ public class Project implements ResourceFactory {
buf.append(" is ").append(ret);
log(buf.toString(), MSG_VERBOSE);
- final Vector<Target> complete = (returnAll) ? ret : new Vector<Target>(ret);
+ final Vector<Target> complete = (returnAll) ? ret : new Vector<>(ret);
for (final Enumeration<String> en = targetTable.keys(); en.hasMoreElements();) {
final String curTarget = en.nextElement();
final String st = state.get(curTarget);
@@ -2035,7 +2029,7 @@ public class Project implements ResourceFactory {
* @since Ant 1.8.1
*/
public Map<String, Object> getCopyOfReferences() {
- return new HashMap<String, Object>(references);
+ return new HashMap<>(references);
}
/**
@@ -2488,6 +2482,7 @@ public class Project implements ResourceFactory {
* @return the file resource.
* @since Ant 1.7
*/
+ @Override
public Resource getResource(final String name) {
return new FileResource(getBaseDir(), name);
}
http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/ProjectComponent.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/ProjectComponent.java b/src/main/org/apache/tools/ant/ProjectComponent.java
index ad92a31..451dbed 100644
--- a/src/main/org/apache/tools/ant/ProjectComponent.java
+++ b/src/main/org/apache/tools/ant/ProjectComponent.java
@@ -160,6 +160,7 @@ public abstract class ProjectComponent implements Cloneable {
* @throws CloneNotSupportedException does not happen,
* but is declared to allow subclasses to do so.
*/
+ @Override
public Object clone() throws CloneNotSupportedException {
ProjectComponent pc = (ProjectComponent) super.clone();
pc.setLocation(getLocation());
http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/ProjectHelper.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/ProjectHelper.java b/src/main/org/apache/tools/ant/ProjectHelper.java
index ab39368..0b51946 100644
--- a/src/main/org/apache/tools/ant/ProjectHelper.java
+++ b/src/main/org/apache/tools/ant/ProjectHelper.java
@@ -146,16 +146,12 @@ public class ProjectHelper {
}
}
- /** Default constructor */
- public ProjectHelper() {
- }
-
// -------------------- Common properties --------------------
// The following properties are required by import ( and other tasks
// that read build files using ProjectHelper ).
- private Vector<Object> importStack = new Vector<Object>();
- private List<String[]> extensionStack = new LinkedList<String[]>();
+ private Vector<Object> importStack = new Vector<>();
+ private List<String[]> extensionStack = new LinkedList<>();
/**
* Import stack.
@@ -181,7 +177,7 @@ public class ProjectHelper {
return extensionStack;
}
- private static final ThreadLocal<String> targetPrefix = new ThreadLocal<String>();
+ private static final ThreadLocal<String> targetPrefix = new ThreadLocal<>();
/**
* The prefix to prepend to imported target names.
@@ -292,7 +288,7 @@ public class ProjectHelper {
* @see org.apache.tools.ant.ProjectHelperRepository#getHelpers()
*/
public static ProjectHelper getProjectHelper() {
- return (ProjectHelper) ProjectHelperRepository.getInstance().getHelpers().next();
+ return ProjectHelperRepository.getInstance().getHelpers().next();
}
/**
@@ -496,7 +492,7 @@ public class ProjectHelper {
* @return The stringified form of the ns name
*/
public static String genComponentName(String uri, String name) {
- if (uri == null || uri.equals("") || uri.equals(ANT_CORE_URI)) {
+ if (uri == null || "".equals(uri) || uri.equals(ANT_CORE_URI)) {
return name;
}
return uri + ":" + name;
http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/ProjectHelperRepository.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/ProjectHelperRepository.java b/src/main/org/apache/tools/ant/ProjectHelperRepository.java
index e370a54..a11c05a 100644
--- a/src/main/org/apache/tools/ant/ProjectHelperRepository.java
+++ b/src/main/org/apache/tools/ant/ProjectHelperRepository.java
@@ -27,6 +27,7 @@ import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
+import java.util.stream.Stream;
import org.apache.tools.ant.helper.ProjectHelper2;
import org.apache.tools.ant.types.Resource;
@@ -53,7 +54,7 @@ public class ProjectHelperRepository {
private static ProjectHelperRepository instance =
new ProjectHelperRepository();
- private List<Constructor<? extends ProjectHelper>> helpers = new ArrayList<Constructor<? extends ProjectHelper>>();
+ private List<Constructor<? extends ProjectHelper>> helpers = new ArrayList<>();
private static Constructor<ProjectHelper2> PROJECTHELPER2_CONSTRUCTOR;
@@ -298,40 +299,15 @@ public class ProjectHelperRepository {
* @return an iterator of {@link ProjectHelper}
*/
public Iterator<ProjectHelper> getHelpers() {
- return new ConstructingIterator(helpers.iterator());
- }
-
- private static class ConstructingIterator implements Iterator<ProjectHelper> {
- private final Iterator<Constructor<? extends ProjectHelper>> nested;
- private boolean empty = false;
-
- ConstructingIterator(Iterator<Constructor<? extends ProjectHelper>> nested) {
- this.nested = nested;
- }
-
- public boolean hasNext() {
- return nested.hasNext() || !empty;
- }
-
- public ProjectHelper next() {
- Constructor<? extends ProjectHelper> c;
- if (nested.hasNext()) {
- c = nested.next();
- } else {
- // last but not least, ant default project helper
- empty = true;
- c = PROJECTHELPER2_CONSTRUCTOR;
- }
+ Stream.Builder<Constructor<? extends ProjectHelper>> b = Stream.builder();
+ helpers.forEach(b::add);
+ return b.add(PROJECTHELPER2_CONSTRUCTOR).build().map(c -> {
try {
return c.newInstance();
} catch (Exception e) {
throw new BuildException("Failed to invoke no-arg constructor"
- + " on " + c.getName());
+ + " on " + c.getName());
}
- }
-
- public void remove() {
- throw new UnsupportedOperationException("remove is not supported");
- }
+ }).map(ProjectHelper.class::cast).iterator();
}
}
http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/PropertyHelper.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/PropertyHelper.java b/src/main/org/apache/tools/ant/PropertyHelper.java
index 1dbb280..84121c9 100644
--- a/src/main/org/apache/tools/ant/PropertyHelper.java
+++ b/src/main/org/apache/tools/ant/PropertyHelper.java
@@ -17,7 +17,6 @@
*/
package org.apache.tools.ant;
-import java.text.ParsePosition;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -30,7 +29,6 @@ import java.util.Vector;
import org.apache.tools.ant.property.GetProperty;
import org.apache.tools.ant.property.NullReturn;
-import org.apache.tools.ant.property.ParseNextProperty;
import org.apache.tools.ant.property.ParseProperties;
import org.apache.tools.ant.property.PropertyExpander;
@@ -184,52 +182,41 @@ public class PropertyHelper implements GetProperty {
}
};
- private static final PropertyExpander DEFAULT_EXPANDER = new PropertyExpander() {
- public String parsePropertyName(
- String s, ParsePosition pos, ParseNextProperty notUsed) {
+ private static final PropertyExpander DEFAULT_EXPANDER =
+ (s, pos, notUsed) -> {
int index = pos.getIndex();
//directly check near, triggering characters:
- if (s.length() - index >= 3
- && '$' == s.charAt(index) && '{' == s.charAt(index + 1)) {
+ if (s.length() - index >= 3 && '$' == s.charAt(index)
+ && '{' == s.charAt(index + 1)) {
int start = index + 2;
//defer to String.indexOf() for protracted check:
int end = s.indexOf('}', start);
if (end < 0) {
- throw new BuildException("Syntax error in property: "
- + s.substring(index));
+ throw new BuildException(
+ "Syntax error in property: " + s.substring(index));
}
pos.setIndex(end + 1);
- return start == end ? "" : s.substring(start, end);
+ return start == end ? "" : s.substring(start, end);
}
return null;
- }
- };
+ };
/** dummy */
- private static final PropertyExpander SKIP_DOUBLE_DOLLAR
- = new PropertyExpander() {
- // CheckStyle:LineLengthCheck OFF see too long
- /**
- * {@inheritDoc}
- * @see org.apache.tools.ant.property.PropertyExpander#parsePropertyName(java.lang.String, java.text.ParsePosition, org.apache.tools.ant.PropertyHelper)
- */
- // CheckStyle:LineLengthCheck ON
- public String parsePropertyName(
- String s, ParsePosition pos, ParseNextProperty notUsed) {
- int index = pos.getIndex();
- if (s.length() - index >= 2) {
- /* check for $$; if found, advance by one--
- * this expander is at the bottom of the stack
- * and will thus be the last consulted,
- * so the next thing that ParseProperties will do
- * is advance the parse position beyond the second $
- */
- if ('$' == s.charAt(index) && '$' == s.charAt(++index)) {
- pos.setIndex(index);
- }
+ private static final PropertyExpander SKIP_DOUBLE_DOLLAR =
+ (s, pos, notUsed) -> {
+ int index = pos.getIndex();
+ if (s.length() - index >= 2) {
+ /* check for $$; if found, advance by one--
+ * this expander is at the bottom of the stack
+ * and will thus be the last consulted,
+ * so the next thing that ParseProperties will do
+ * is advance the parse position beyond the second $
+ */
+ if ('$' == s.charAt(index) && '$' == s.charAt(++index)) {
+ pos.setIndex(index);
}
- return null;
}
+ return null;
};
/**
@@ -248,24 +235,24 @@ public class PropertyHelper implements GetProperty {
private Project project;
private PropertyHelper next;
- private final Hashtable<Class<? extends Delegate>, List<Delegate>> delegates = new Hashtable<Class<? extends Delegate>, List<Delegate>>();
+ private final Hashtable<Class<? extends Delegate>, List<Delegate>> delegates = new Hashtable<>();
/** Project properties map (usually String to String). */
- private Hashtable<String, Object> properties = new Hashtable<String, Object>();
+ private Hashtable<String, Object> properties = new Hashtable<>();
/**
* Map of "user" properties (as created in the Ant task, for example).
* Note that these key/value pairs are also always put into the
* project properties, so only the project properties need to be queried.
*/
- private Hashtable<String, Object> userProperties = new Hashtable<String, Object>();
+ private Hashtable<String, Object> userProperties = new Hashtable<>();
/**
* Map of inherited "user" properties - that are those "user"
* properties that have been created by tasks and not been set
* from the command line or a GUI tool.
*/
- private Hashtable<String, Object> inheritedProperties = new Hashtable<String, Object>();
+ private Hashtable<String, Object> inheritedProperties = new Hashtable<>();
/**
* Default constructor.
@@ -900,7 +887,7 @@ public class PropertyHelper implements GetProperty {
public Hashtable<String, Object> getProperties() {
//avoid concurrent modification:
synchronized (properties) {
- return new Hashtable<String, Object>(properties);
+ return new Hashtable<>(properties);
}
// There is a better way to save the context. This shouldn't
// delegate to next, it's for backward compatibility only.
@@ -917,7 +904,7 @@ public class PropertyHelper implements GetProperty {
public Hashtable<String, Object> getUserProperties() {
//avoid concurrent modification:
synchronized (userProperties) {
- return new Hashtable<String, Object>(userProperties);
+ return new Hashtable<>(userProperties);
}
}
@@ -932,7 +919,7 @@ public class PropertyHelper implements GetProperty {
public Hashtable<String, Object> getInheritedProperties() {
//avoid concurrent modification:
synchronized (inheritedProperties) {
- return new Hashtable<String, Object>(inheritedProperties);
+ return new Hashtable<>(inheritedProperties);
}
}
@@ -982,7 +969,7 @@ public class PropertyHelper implements GetProperty {
synchronized (inheritedProperties) {
Enumeration<String> e = inheritedProperties.keys();
while (e.hasMoreElements()) {
- String arg = e.nextElement().toString();
+ String arg = e.nextElement();
if (other.getUserProperty(arg) != null) {
continue;
}
@@ -1036,7 +1023,7 @@ public class PropertyHelper implements GetProperty {
int prev = 0;
int pos;
//search for the next instance of $ from the 'prev' position
- while ((pos = value.indexOf("$", prev)) >= 0) {
+ while ((pos = value.indexOf('$', prev)) >= 0) {
//if there was any text before this, add it as a fragment
//TODO, this check could be modified to go if pos>prev;
@@ -1096,10 +1083,10 @@ public class PropertyHelper implements GetProperty {
for (Class<? extends Delegate> key : getDelegateInterfaces(delegate)) {
List<Delegate> list = delegates.get(key);
if (list == null) {
- list = new ArrayList<Delegate>();
+ list = new ArrayList<>();
} else {
//copy on write, top priority
- list = new ArrayList<Delegate>(list);
+ list = new ArrayList<>(list);
list.remove(delegate);
}
list.add(0, delegate);
@@ -1129,7 +1116,7 @@ public class PropertyHelper implements GetProperty {
* @since Ant 1.8.0
*/
protected static Set<Class<? extends Delegate>> getDelegateInterfaces(Delegate d) {
- final HashSet<Class<? extends Delegate>> result = new HashSet<Class<? extends Delegate>>();
+ final HashSet<Class<? extends Delegate>> result = new HashSet<>();
Class<?> c = d.getClass();
while (c != null) {
Class<?>[] ifs = c.getInterfaces();
http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/RuntimeConfigurable.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/RuntimeConfigurable.java b/src/main/org/apache/tools/ant/RuntimeConfigurable.java
index 0aafccb..8e54d8c 100644
--- a/src/main/org/apache/tools/ant/RuntimeConfigurable.java
+++ b/src/main/org/apache/tools/ant/RuntimeConfigurable.java
@@ -25,12 +25,11 @@ import java.util.Enumeration;
import java.util.Hashtable;
import java.util.LinkedHashMap;
import java.util.List;
-import java.util.Map.Entry;
+import java.util.Map;
import org.apache.tools.ant.attribute.EnableAttribute;
import org.apache.tools.ant.taskdefs.MacroDef.Attribute;
import org.apache.tools.ant.taskdefs.MacroInstance;
-import org.apache.tools.ant.util.CollectionUtils;
import org.xml.sax.AttributeList;
import org.xml.sax.helpers.AttributeListImpl;
@@ -46,14 +45,14 @@ public class RuntimeConfigurable implements Serializable {
/** Empty Hashtable. */
private static final Hashtable<String, Object> EMPTY_HASHTABLE =
- new Hashtable<String, Object>(0);
+ new Hashtable<>(0);
/** Name of the element to configure. */
private String elementTag = null;
/** List of child element wrappers. */
// picking ArrayList rather than List as arrayList is Serializable
- private ArrayList<RuntimeConfigurable> children = null;
+ private List<RuntimeConfigurable> children = null;
/** The element to configure. It is only used during
* maybeConfigure.
@@ -303,17 +302,17 @@ public class RuntimeConfigurable implements Serializable {
this.polyType = value == null ? null : value.toString();
} else {
if (attributeMap == null) {
- attributeMap = new LinkedHashMap<String, Object>();
+ attributeMap = new LinkedHashMap<>();
}
- if (name.equalsIgnoreCase("refid") && !attributeMap.isEmpty()) {
- LinkedHashMap<String, Object> newAttributeMap = new LinkedHashMap<String, Object>();
+ if ("refid".equalsIgnoreCase(name) && !attributeMap.isEmpty()) {
+ LinkedHashMap<String, Object> newAttributeMap = new LinkedHashMap<>();
newAttributeMap.put(name, value);
newAttributeMap.putAll(attributeMap);
attributeMap = newAttributeMap;
} else {
attributeMap.put(name, value);
}
- if (name.equals("id")) {
+ if ("id".equals(name)) {
this.id = value == null ? null : value.toString();
}
}
@@ -335,7 +334,7 @@ public class RuntimeConfigurable implements Serializable {
*/
public synchronized Hashtable<String, Object> getAttributeMap() {
return (attributeMap == null)
- ? EMPTY_HASHTABLE : new Hashtable<String, Object>(attributeMap);
+ ? EMPTY_HASHTABLE : new Hashtable<>(attributeMap);
}
/**
@@ -356,7 +355,7 @@ public class RuntimeConfigurable implements Serializable {
* Must not be <code>null</code>.
*/
public synchronized void addChild(RuntimeConfigurable child) {
- children = (children == null) ? new ArrayList<RuntimeConfigurable>() : children;
+ children = (children == null) ? new ArrayList<>() : children;
children.add(child);
}
@@ -378,7 +377,7 @@ public class RuntimeConfigurable implements Serializable {
* @since Ant 1.6
*/
public synchronized Enumeration<RuntimeConfigurable> getChildren() {
- return (children == null) ? new CollectionUtils.EmptyEnumeration<RuntimeConfigurable>()
+ return (children == null) ? Collections.emptyEnumeration()
: Collections.enumeration(children);
}
@@ -497,7 +496,7 @@ public class RuntimeConfigurable implements Serializable {
IntrospectionHelper.getHelper(p, target.getClass());
ComponentHelper componentHelper = ComponentHelper.getComponentHelper(p);
if (attributeMap != null) {
- for (Entry<String, Object> entry : attributeMap.entrySet()) {
+ for (Map.Entry<String, Object> entry : attributeMap.entrySet()) {
String name = entry.getKey();
// skip restricted attributes such as if:set
AttributeComponentInformation attributeComponentInformation = isRestrictedAttribute(name, componentHelper);
@@ -509,8 +508,8 @@ public class RuntimeConfigurable implements Serializable {
// MacroInstance where properties are expanded for the
// nested sequential
Object attrValue;
- if (value instanceof Evaluable) {
- attrValue = ((Evaluable) value).eval();
+ if (value instanceof Evaluable<?>) {
+ attrValue = ((Evaluable<?>) value).eval();
} else {
attrValue = PropertyHelper.getPropertyHelper(p).parseProperties(value.toString());
}
@@ -528,7 +527,7 @@ public class RuntimeConfigurable implements Serializable {
ih.setAttribute(p, target, name, attrValue);
} catch (UnsupportedAttributeException be) {
// id attribute must be set externally
- if (name.equals("id")) {
+ if ("id".equals(name)) {
// Do nothing
} else if (getElementTag() == null) {
throw be;
@@ -538,7 +537,7 @@ public class RuntimeConfigurable implements Serializable {
+ be.getAttribute() + "\" attribute", be);
}
} catch (BuildException be) {
- if (name.equals("id")) {
+ if ("id".equals(name)) {
// Assume that this is an not supported attribute type
// thrown for example by a dymanic attribute task
// Do nothing
@@ -590,7 +589,7 @@ public class RuntimeConfigurable implements Serializable {
// Children (this is a shadow of UnknownElement#children)
if (r.children != null) {
- ArrayList<RuntimeConfigurable> newChildren = new ArrayList<RuntimeConfigurable>();
+ List<RuntimeConfigurable> newChildren = new ArrayList<>();
newChildren.addAll(r.children);
if (children != null) {
newChildren.addAll(children);
@@ -601,7 +600,7 @@ public class RuntimeConfigurable implements Serializable {
// Text
if (r.characters != null) {
if (characters == null
- || characters.toString().trim().length() == 0) {
+ || characters.toString().trim().isEmpty()) {
characters = new StringBuffer(r.characters.toString());
}
}
http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/Target.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/Target.java b/src/main/org/apache/tools/ant/Target.java
index 796b7e1..dba7e25 100644
--- a/src/main/org/apache/tools/ant/Target.java
+++ b/src/main/org/apache/tools/ant/Target.java
@@ -55,7 +55,7 @@ public class Target implements TaskContainer {
private List<String> dependencies = null;
/** Children of this target (tasks and data types). */
- private List<Object> children = new ArrayList<Object>();
+ private List<Object> children = new ArrayList<>();
/** Since Ant 1.6.2 */
private Location location = Location.UNKNOWN_LOCATION;
@@ -145,7 +145,7 @@ public class Target implements TaskContainer {
public static List<String> parseDepends(String depends,
String targetName,
String attributeName) {
- List<String> list = new ArrayList<String>();
+ List<String> list = new ArrayList<>();
if (depends.length() > 0) {
StringTokenizer tok =
new StringTokenizer(depends, ",", true);
@@ -225,7 +225,7 @@ public class Target implements TaskContainer {
* @return an array of the tasks currently within this target
*/
public Task[] getTasks() {
- List<Task> tasks = new ArrayList<Task>(children.size());
+ List<Task> tasks = new ArrayList<>(children.size());
for (Object o : children) {
if (o instanceof Task) {
tasks.add((Task) o);
@@ -242,7 +242,7 @@ public class Target implements TaskContainer {
*/
public void addDependency(String dependency) {
if (dependencies == null) {
- dependencies = new ArrayList<String>(2);
+ dependencies = new ArrayList<>(2);
}
dependencies.add(dependency);
}
@@ -253,8 +253,8 @@ public class Target implements TaskContainer {
* @return an enumeration of the dependencies of this target (enumeration of String)
*/
public Enumeration<String> getDependencies() {
- return Collections
- .enumeration(dependencies == null ? Collections.<String> emptyList() : dependencies);
+ return dependencies == null ? Collections.emptyEnumeration()
+ : Collections.enumeration(dependencies);
}
/**
@@ -284,7 +284,12 @@ public class Target implements TaskContainer {
*/
public void setIf(String property) {
ifString = property == null ? "" : property;
- setIf(new IfStringCondition(ifString));
+ setIf(() -> {
+ PropertyHelper propertyHelper =
+ PropertyHelper.getPropertyHelper(getProject());
+ Object o = propertyHelper.parseProperties(ifString);
+ return propertyHelper.testIfCondition(o);
+ });
}
/**
@@ -331,7 +336,12 @@ public class Target implements TaskContainer {
*/
public void setUnless(String property) {
unlessString = property == null ? "" : property;
- setUnless(new UnlessStringCondition(unlessString));
+ setUnless(() -> {
+ PropertyHelper propertyHelper =
+ PropertyHelper.getPropertyHelper(getProject());
+ Object o = propertyHelper.parseProperties(unlessString);
+ return !propertyHelper.testUnlessCondition(o);
+ });
}
/**
@@ -390,6 +400,7 @@ public class Target implements TaskContainer {
* @return the name of this target, or <code>null</code> if the
* name has not been set yet.
*/
+ @Override
public String toString() {
return name;
}
@@ -491,42 +502,4 @@ public class Target implements TaskContainer {
children.set(index, o);
}
}
-
- /**
- * Condition evaluating the 'if' attribute with the PropertyHelper.
- */
- private class IfStringCondition implements Condition {
-
- private String condition;
-
- public IfStringCondition(String condition) {
- this.condition = condition;
- }
-
- public boolean eval() throws BuildException {
- PropertyHelper propertyHelper = PropertyHelper.getPropertyHelper(getProject());
- Object o = propertyHelper.parseProperties(condition);
- return propertyHelper.testIfCondition(o);
- }
-
- }
-
- /**
- * Condition evaluating the 'unless' attribute with the PropertyHelper.
- */
- private class UnlessStringCondition implements Condition {
-
- private String condition;
-
- public UnlessStringCondition(String condition) {
- this.condition = condition;
- }
-
- public boolean eval() throws BuildException {
- PropertyHelper propertyHelper = PropertyHelper.getPropertyHelper(getProject());
- Object o = propertyHelper.parseProperties(condition);
- return !propertyHelper.testUnlessCondition(o);
- }
-
- }
}
http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/Task.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/Task.java b/src/main/org/apache/tools/ant/Task.java
index 0d08eb0..bdd2337 100644
--- a/src/main/org/apache/tools/ant/Task.java
+++ b/src/main/org/apache/tools/ant/Task.java
@@ -81,10 +81,6 @@ public abstract class Task extends ProjectComponent {
*/
private boolean invalid;
- /** Sole constructor. */
- public Task() {
- }
-
/**
* Sets the target container of this task.
*
@@ -197,12 +193,10 @@ public abstract class Task extends ProjectComponent {
* @exception BuildException if the task cannot be configured.
*/
public void maybeConfigure() throws BuildException {
- if (!invalid) {
- if (wrapper != null) {
- wrapper.maybeConfigure(getProject());
- }
- } else {
+ if (invalid) {
getReplacement();
+ } else if (wrapper != null) {
+ wrapper.maybeConfigure(getProject());
}
}
@@ -290,10 +284,10 @@ public abstract class Task extends ProjectComponent {
* be logged.
*/
public void log(String msg, int msgLevel) {
- if (getProject() != null) {
- getProject().log(this, msg, msgLevel);
- } else {
+ if (getProject() == null) {
super.log(msg, msgLevel);
+ } else {
+ getProject().log(this, msg, msgLevel);
}
}
@@ -323,10 +317,10 @@ public abstract class Task extends ProjectComponent {
* @since 1.7
*/
public void log(String msg, Throwable t, int msgLevel) {
- if (getProject() != null) {
- getProject().log(this, msg, t, msgLevel);
- } else {
+ if (getProject() == null) {
super.log(msg, msgLevel);
+ } else {
+ getProject().log(this, msg, t, msgLevel);
}
}
@@ -340,7 +334,11 @@ public abstract class Task extends ProjectComponent {
* is still fired, but with the exception as the cause.
*/
public final void perform() {
- if (!invalid) {
+ if (invalid) {
+ UnknownElement ue = getReplacement();
+ Task task = ue.getTask();
+ task.perform();
+ } else {
getProject().fireTaskStarted(this);
Throwable reason = null;
try {
@@ -363,10 +361,6 @@ public abstract class Task extends ProjectComponent {
} finally {
getProject().fireTaskFinished(this, reason);
}
- } else {
- UnknownElement ue = getReplacement();
- Task task = ue.getTask();
- task.perform();
}
}
http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/TaskAdapter.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/TaskAdapter.java b/src/main/org/apache/tools/ant/TaskAdapter.java
index 3a3001f..8a22f35 100644
--- a/src/main/org/apache/tools/ant/TaskAdapter.java
+++ b/src/main/org/apache/tools/ant/TaskAdapter.java
@@ -81,7 +81,7 @@ public class TaskAdapter extends Task implements TypeAdapter {
// don't have to check for interface, since then
// taskClass would be abstract too.
try {
- final Method executeM = taskClass.getMethod("execute", (Class[]) null);
+ final Method executeM = taskClass.getMethod("execute");
// don't have to check for public, since
// getMethod finds public method only.
// don't have to check for abstract, since then
@@ -122,10 +122,10 @@ public class TaskAdapter extends Task implements TypeAdapter {
*/
public void execute() throws BuildException {
try {
- Method setLocationM = proxy.getClass().getMethod(
- "setLocation", new Class[] {Location.class});
+ Method setLocationM =
+ proxy.getClass().getMethod("setLocation", Location.class);
if (setLocationM != null) {
- setLocationM.invoke(proxy, new Object[] {getLocation()});
+ setLocationM.invoke(proxy, getLocation());
}
} catch (NoSuchMethodException e) {
// ignore this if the class being used as a task does not have
@@ -137,10 +137,10 @@ public class TaskAdapter extends Task implements TypeAdapter {
}
try {
- Method setProjectM = proxy.getClass().getMethod(
- "setProject", new Class[] {Project.class});
+ Method setProjectM =
+ proxy.getClass().getMethod("setProject", Project.class);
if (setProjectM != null) {
- setProjectM.invoke(proxy, new Object[] {getProject()});
+ setProjectM.invoke(proxy, getProject());
}
} catch (NoSuchMethodException e) {
// ignore this if the class being used as a task does not have
http://git-wip-us.apache.org/repos/asf/ant/blob/b7d1e9bd/src/main/org/apache/tools/ant/TaskConfigurationChecker.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/TaskConfigurationChecker.java b/src/main/org/apache/tools/ant/TaskConfigurationChecker.java
index e8e7444..70ccd80 100644
--- a/src/main/org/apache/tools/ant/TaskConfigurationChecker.java
+++ b/src/main/org/apache/tools/ant/TaskConfigurationChecker.java
@@ -55,7 +55,7 @@ import java.util.List;
public class TaskConfigurationChecker {
/** List of all collected error messages. */
- private List<String> errors = new ArrayList<String>();
+ private List<String> errors = new ArrayList<>();
/** Task for which the configuration should be checked. */
private final Task task;
@@ -94,8 +94,7 @@ public class TaskConfigurationChecker {
*/
public void checkErrors() throws BuildException {
if (!errors.isEmpty()) {
- StringBuffer sb = new StringBuffer();
- sb.append("Configurationerror on <");
+ StringBuilder sb = new StringBuilder("Configurationerror on <");
sb.append(task.getTaskName());
sb.append(">:");
sb.append(System.getProperty("line.separator"));