Browse Source

Avoid Collections.list().stream()

(for performance sake)
master
Gintas Grigelionis 7 years ago
parent
commit
1142263093
30 changed files with 191 additions and 200 deletions
  1. +2
    -2
      src/main/org/apache/tools/ant/Main.java
  2. +28
    -33
      src/main/org/apache/tools/ant/ProjectHelperRepository.java
  3. +3
    -2
      src/main/org/apache/tools/ant/XmlLogger.java
  4. +1
    -13
      src/main/org/apache/tools/ant/taskdefs/Ant.java
  5. +3
    -12
      src/main/org/apache/tools/ant/taskdefs/DependSet.java
  6. +1
    -4
      src/main/org/apache/tools/ant/taskdefs/Execute.java
  7. +4
    -2
      src/main/org/apache/tools/ant/taskdefs/Expand.java
  8. +14
    -15
      src/main/org/apache/tools/ant/taskdefs/Jar.java
  9. +4
    -5
      src/main/org/apache/tools/ant/taskdefs/Manifest.java
  10. +3
    -3
      src/main/org/apache/tools/ant/taskdefs/ManifestTask.java
  11. +3
    -7
      src/main/org/apache/tools/ant/taskdefs/Recorder.java
  12. +8
    -10
      src/main/org/apache/tools/ant/taskdefs/Replace.java
  13. +2
    -3
      src/main/org/apache/tools/ant/taskdefs/condition/And.java
  14. +2
    -2
      src/main/org/apache/tools/ant/taskdefs/condition/IsSigned.java
  15. +2
    -1
      src/main/org/apache/tools/ant/taskdefs/condition/Or.java
  16. +4
    -7
      src/main/org/apache/tools/ant/taskdefs/condition/Xor.java
  17. +3
    -3
      src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java
  18. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/depend/Depend.java
  19. +7
    -4
      src/main/org/apache/tools/ant/taskdefs/optional/ejb/WebsphereDeploymentTool.java
  20. +4
    -2
      src/main/org/apache/tools/ant/taskdefs/optional/jlink/jlink.java
  21. +2
    -2
      src/main/org/apache/tools/ant/taskdefs/optional/junit/Enumerations.java
  22. +2
    -12
      src/main/org/apache/tools/ant/types/PropertySet.java
  23. +3
    -4
      src/main/org/apache/tools/ant/types/ZipScanner.java
  24. +6
    -10
      src/main/org/apache/tools/ant/types/optional/depend/DependScanner.java
  25. +3
    -3
      src/main/org/apache/tools/ant/util/CollectionUtils.java
  26. +33
    -0
      src/main/org/apache/tools/ant/util/StreamUtils.java
  27. +3
    -1
      src/main/org/apache/tools/ant/util/depend/bcel/FullAnalyzer.java
  28. +33
    -25
      src/main/org/apache/tools/tar/TarInputStream.java
  29. +5
    -10
      src/tests/junit/org/apache/tools/ant/AntClassLoaderDelegationTest.java
  30. +2
    -2
      src/tests/junit/org/apache/tools/ant/taskdefs/JarTest.java

+ 2
- 2
src/main/org/apache/tools/ant/Main.java View File

@@ -47,7 +47,7 @@ import org.apache.tools.ant.property.ResolvePropertyMap;
import org.apache.tools.ant.util.ClasspathUtils;
import org.apache.tools.ant.util.FileUtils;
import org.apache.tools.ant.util.ProxySetup;
import org.apache.tools.ant.util.StreamUtils;

/**
* Command line entry point into Ant. This class is entered via the
@@ -1266,7 +1266,7 @@ public class Main implements AntMain {
}
msg.append(eol);
if (!dependencies.isEmpty() && dependencies.elementAt(i).hasMoreElements()) {
msg.append(Collections.list(dependencies.elementAt(i)).stream()
msg.append(StreamUtils.enumerationAsStream(dependencies.elementAt(i))
.collect(Collectors.joining(", ", " depends on: ", eol)));
}
}


+ 28
- 33
src/main/org/apache/tools/ant/ProjectHelperRepository.java View File

@@ -32,6 +32,7 @@ import java.util.stream.Stream;
import org.apache.tools.ant.helper.ProjectHelper2;
import org.apache.tools.ant.types.Resource;
import org.apache.tools.ant.util.LoaderUtils;
import org.apache.tools.ant.util.StreamUtils;

/**
* Repository of {@link ProjectHelper} found in the classpath or via
@@ -77,8 +78,7 @@ public class ProjectHelperRepository {

private void collectProjectHelpers() {
// First, try the system property
Constructor<? extends ProjectHelper> projectHelper = getProjectHelperBySystemProperty();
registerProjectHelper(projectHelper);
registerProjectHelper(getProjectHelperBySystemProperty());

// A JDK1.3 'service' (like in JAXP). That will plug a helper
// automatically if in CLASSPATH, with the right META-INF/services.
@@ -88,17 +88,14 @@ public class ProjectHelperRepository {
for (URL resource : Collections.list(classLoader.getResources(ProjectHelper.SERVICE_ID))) {
URLConnection conn = resource.openConnection();
conn.setUseCaches(false);
projectHelper =
getProjectHelperByService(conn.getInputStream());
registerProjectHelper(projectHelper);
registerProjectHelper(getProjectHelperByService(conn.getInputStream()));
}
}

InputStream systemResource =
ClassLoader.getSystemResourceAsStream(ProjectHelper.SERVICE_ID);
if (systemResource != null) {
projectHelper = getProjectHelperByService(systemResource);
registerProjectHelper(projectHelper);
registerProjectHelper(getProjectHelperByService(systemResource));
}
} catch (Exception e) {
System.err.println("Unable to load ProjectHelper from service "
@@ -250,20 +247,19 @@ public class ProjectHelperRepository {
* @return the first ProjectHelper that fit the requirement (never <code>null</code>).
*/
public ProjectHelper getProjectHelperForBuildFile(Resource buildFile) throws BuildException {
for (Iterator<ProjectHelper> it = getHelpers(); it.hasNext();) {
ProjectHelper helper = it.next();
if (helper.canParseBuildFile(buildFile)) {
if (DEBUG) {
System.out.println("ProjectHelper "
+ helper.getClass().getName()
+ " selected for the build file "
+ buildFile);
}
return helper;
}
ProjectHelper ph = StreamUtils.iteratorAsStream(getHelpers())
.filter(helper -> helper.canParseBuildFile(buildFile))
.findFirst().orElse(null);
if (ph == null) {
throw new BuildException("BUG: at least the ProjectHelper2 should "
+ "have supported the file " + buildFile);
}
if (DEBUG) {
System.out.println("ProjectHelper " + ph.getClass().getName()
+ " selected for the build file " + buildFile);
}
throw new BuildException("BUG: at least the ProjectHelper2 should "
+ "have supported the file " + buildFile);
return ph;
}

/**
@@ -274,20 +270,19 @@ public class ProjectHelperRepository {
* @return the first ProjectHelper that fit the requirement (never <code>null</code>).
*/
public ProjectHelper getProjectHelperForAntlib(Resource antlib) throws BuildException {
for (Iterator<ProjectHelper> it = getHelpers(); it.hasNext();) {
ProjectHelper helper = it.next();
if (helper.canParseAntlibDescriptor(antlib)) {
if (DEBUG) {
System.out.println("ProjectHelper "
+ helper.getClass().getName()
+ " selected for the antlib "
+ antlib);
}
return helper;
}
ProjectHelper ph = StreamUtils.iteratorAsStream(getHelpers())
.filter(helper -> helper.canParseAntlibDescriptor(antlib))
.findFirst().orElse(null);
if (ph == null) {
throw new BuildException("BUG: at least the ProjectHelper2 should "
+ "have supported the file " + antlib);
}
if (DEBUG) {
System.out.println("ProjectHelper " + ph.getClass().getName()
+ " selected for the antlib " + antlib);
}
throw new BuildException("BUG: at least the ProjectHelper2 should "
+ "have supported the file " + antlib);
return ph;
}

/**


+ 3
- 2
src/main/org/apache/tools/ant/XmlLogger.java View File

@@ -24,7 +24,6 @@ import java.io.PrintStream;
import java.io.Writer;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Collections;
import java.util.Hashtable;
import java.util.Stack;

@@ -32,6 +31,7 @@ import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.apache.tools.ant.util.DOMElementWriter;
import org.apache.tools.ant.util.StreamUtils;
import org.apache.tools.ant.util.StringUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -345,7 +345,8 @@ public class XmlLogger implements BuildLogger {
if (element != null) {
return element;
}
return Collections.list(tasks.keys()).stream().filter(UnknownElement.class::isInstance)
return StreamUtils.enumerationAsStream(tasks.keys())
.filter(UnknownElement.class::isInstance)
.filter(key -> ((UnknownElement) key).getTask() == task).findFirst()
.map(key -> tasks.get(key)).orElse(null);
}


+ 1
- 13
src/main/org/apache/tools/ant/taskdefs/Ant.java View File

@@ -25,7 +25,6 @@ import java.lang.reflect.Method;
import java.nio.file.Files;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -33,7 +32,6 @@ import java.util.Set;
import java.util.Vector;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.BuildListener;
import org.apache.tools.ant.DefaultLogger;
import org.apache.tools.ant.MagicNames;
import org.apache.tools.ant.Main;
@@ -197,10 +195,7 @@ public class Ant extends Task {
private void initializeProject() {
newProject.setInputHandler(getProject().getInputHandler());

Iterator<BuildListener> iter = getBuildListeners();
while (iter.hasNext()) {
newProject.addBuildListener(iter.next());
}
getProject().getBuildListeners().forEach(bl -> newProject.addBuildListener(bl));

if (output != null) {
File outfile;
@@ -748,13 +743,6 @@ public class Ant extends Task {
return newProject;
}

/**
* @since Ant 1.6.2
*/
private Iterator<BuildListener> getBuildListeners() {
return getProject().getBuildListeners().iterator();
}

/**
* Helper class that implements the nested &lt;reference&gt;
* element of &lt;ant&gt; and &lt;antcall&gt;.


+ 3
- 12
src/main/org/apache/tools/ant/taskdefs/DependSet.java View File

@@ -38,6 +38,7 @@ import org.apache.tools.ant.types.resources.comparators.Reverse;
import org.apache.tools.ant.types.resources.selectors.Exists;
import org.apache.tools.ant.types.resources.selectors.Not;
import org.apache.tools.ant.types.resources.selectors.ResourceSelector;
import org.apache.tools.ant.util.StreamUtils;

/**
* Examines and removes out of date target files. If any of the target files
@@ -263,18 +264,8 @@ public class DependSet extends MatchingTask {
}

private Resource getXest(ResourceCollection rc, ResourceComparator c) {
Iterator<Resource> i = rc.iterator();
if (!i.hasNext()) {
return null;
}
Resource xest = i.next();
while (i.hasNext()) {
Resource next = i.next();
if (c.compare(xest, next) < 0) {
xest = next;
}
}
return xest;
return StreamUtils.iteratorAsStream(rc.iterator())
.min(c::compare).orElse(null);
}

private Resource getOldest(ResourceCollection rc) {


+ 1
- 4
src/main/org/apache/tools/ant/taskdefs/Execute.java View File

@@ -28,7 +28,6 @@ import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Vector;

import org.apache.tools.ant.BuildException;
@@ -177,9 +176,7 @@ public class Execute {
@Deprecated
public static synchronized Vector<String> getProcEnvironment() {
Vector<String> v = new Vector<>();
for (Entry<String, String> entry : getEnvironmentVariables().entrySet()) {
v.add(entry.getKey() + "=" + entry.getValue());
}
getEnvironmentVariables().forEach((key, value) -> v.add(key + "=" + value));
return v;
}



+ 4
- 2
src/main/org/apache/tools/ant/taskdefs/Expand.java View File

@@ -24,8 +24,8 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.util.Collections;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -189,7 +189,9 @@ public class Expand extends Task {
}
try (ZipFile zf = new ZipFile(srcF, encoding, scanForUnicodeExtraFields)) {
boolean empty = true;
for (ZipEntry ze : Collections.list(zf.getEntries())) {
Enumeration<ZipEntry> entries = zf.getEntries();
while (entries.hasMoreElements()) {
ZipEntry ze = entries.nextElement();
empty = false;
InputStream is = null;
log("extracting " + ze.getName(), Project.MSG_DEBUG);


+ 14
- 15
src/main/org/apache/tools/ant/taskdefs/Jar.java View File

@@ -55,6 +55,7 @@ import org.apache.tools.ant.types.ResourceCollection;
import org.apache.tools.ant.types.ZipFileSet;
import org.apache.tools.ant.types.spi.Service;
import org.apache.tools.ant.util.FileUtils;
import org.apache.tools.ant.util.StreamUtils;
import org.apache.tools.zip.JarMarker;
import org.apache.tools.zip.ZipExtraField;
import org.apache.tools.zip.ZipOutputStream;
@@ -321,18 +322,17 @@ public class Jar extends Zip {
*/
private Manifest getManifestFromJar(File jarFile) throws IOException {
try (ZipFile zf = new ZipFile(jarFile)) {

// must not use getEntry as "well behaving" applications
// must accept the manifest in any capitalization
for (ZipEntry ze : Collections.list(zf.entries())) {
if (MANIFEST_NAME.equalsIgnoreCase(ze.getName())) {
try (InputStreamReader isr =
new InputStreamReader(zf.getInputStream(ze), "UTF-8")) {
return getManifest(isr);
}
}
ZipEntry ze = StreamUtils.enumerationAsStream(zf.entries())
.filter(entry -> MANIFEST_NAME.equalsIgnoreCase(entry.getName()))
.findFirst().orElse(null);
if (ze == null) {
return null;
}
try (InputStreamReader isr = new InputStreamReader(zf.getInputStream(ze), "UTF-8")) {
return getManifest(isr);
}
return null;
}
}

@@ -351,7 +351,7 @@ public class Jar extends Zip {

private boolean jarHasIndex(File jarFile) throws IOException {
try (ZipFile zf = new ZipFile(jarFile)) {
return Collections.list(zf.entries()).stream()
return StreamUtils.enumerationAsStream(zf.entries())
.anyMatch(ze -> INDEX_NAME.equalsIgnoreCase(ze.getName()));
}
}
@@ -524,9 +524,8 @@ public class Jar extends Zip {

private void writeManifest(ZipOutputStream zOut, Manifest manifest)
throws IOException {
for (String warning : Collections.list(manifest.getWarnings())) {
log("Manifest warning: " + warning, Project.MSG_WARN);
}
StreamUtils.enumerationAsStream(manifest.getWarnings())
.forEach(warning -> log("Manifest warning: " + warning, Project.MSG_WARN));

zipDir((Resource) null, zOut, "META-INF/", ZipFileSet.DEFAULT_DIR_MODE,
JAR_MARKER);
@@ -1064,7 +1063,7 @@ public class Jar extends Zip {
throws IOException {
try (org.apache.tools.zip.ZipFile zf = new org.apache.tools.zip.ZipFile(file, "utf-8")) {
Set<String> dirSet = new HashSet<>();
for (org.apache.tools.zip.ZipEntry ze : Collections.list(zf.getEntries())) {
StreamUtils.enumerationAsStream(zf.getEntries()).forEach(ze -> {
String name = ze.getName();
if (ze.isDirectory()) {
dirSet.add(name);
@@ -1077,7 +1076,7 @@ public class Jar extends Zip {
// well.
dirSet.add(name.substring(0, name.lastIndexOf('/') + 1));
}
}
});
dirs.addAll(dirSet);
}
}


+ 4
- 5
src/main/org/apache/tools/ant/taskdefs/Manifest.java View File

@@ -26,7 +26,6 @@ import java.io.PrintWriter;
import java.io.Reader;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.LinkedHashMap;
@@ -39,6 +38,7 @@ import java.util.stream.Collectors;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.util.FileUtils;
import org.apache.tools.ant.util.StreamUtils;

/**
* Holds the data of a jar manifest.
@@ -676,7 +676,7 @@ public class Manifest {
public Object clone() {
Section cloned = new Section();
cloned.setName(name);
Collections.list(getAttributeKeys()).stream()
StreamUtils.enumerationAsStream(getAttributeKeys())
.map(key -> new Attribute(getAttribute(key).getName(),
getAttribute(key).getValue())).forEach(cloned::storeAttribute);
return cloned;
@@ -932,8 +932,7 @@ public class Manifest {

for (String sectionName : Collections.list(other.getSectionNames())) {
Section ourSection = sections.get(sectionName);
Section otherSection
= other.sections.get(sectionName);
Section otherSection = other.sections.get(sectionName);
if (ourSection == null) {
if (otherSection != null) {
addConfiguredSection((Section) otherSection.clone());
@@ -1020,7 +1019,7 @@ public class Manifest {
*/
public Enumeration<String> getWarnings() {
// create a vector and add in the warnings for the main section
List<String> warnings = new ArrayList<>(Collections.list(mainSection.getWarnings()));
List<String> warnings = Collections.list(mainSection.getWarnings());

// add in the warnings for all the sections
sections.values().stream().map(section -> Collections.list(section.getWarnings()))


+ 3
- 3
src/main/org/apache/tools/ant/taskdefs/ManifestTask.java View File

@@ -25,12 +25,12 @@ import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.util.Collections;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.EnumeratedAttribute;
import org.apache.tools.ant.util.StreamUtils;

/**
* Creates a manifest file for inclusion in a JAR, Ant task wrapper
@@ -112,7 +112,7 @@ public class ManifestTask extends Task {
*/
public void addConfiguredSection(Manifest.Section section)
throws ManifestException {
Collections.list(section.getAttributeKeys()).stream()
StreamUtils.enumerationAsStream(section.getAttributeKeys())
.map(section::getAttribute).forEach(this::checkAttribute);
nestedManifest.addConfiguredSection(section);
}
@@ -241,7 +241,7 @@ public class ManifestTask extends Task {
}

// look for and print warnings
Collections.list(nestedManifest.getWarnings())
StreamUtils.enumerationAsStream(nestedManifest.getWarnings())
.forEach(e -> log("Manifest warning: " + e, Project.MSG_WARN));
try {
if ("update".equals(mode.getValue()) && manifestFile.exists()) {


+ 3
- 7
src/main/org/apache/tools/ant/taskdefs/Recorder.java View File

@@ -307,13 +307,9 @@ public class Recorder extends Task implements SubBuildListener {
*/
@SuppressWarnings("unchecked")
private void cleanup() {
Hashtable<String, RecorderEntry> entries
= (Hashtable<String, RecorderEntry>) recorderEntries.clone();
for (Map.Entry<String, RecorderEntry> entry : entries.entrySet()) {
if (entry.getValue().getProject() == getProject()) {
recorderEntries.remove(entry.getKey());
}
}
((Hashtable<String, RecorderEntry>) recorderEntries.clone()).entrySet().stream()
.filter(entry -> entry.getValue().getProject() == getProject())
.forEach(entry -> recorderEntries.remove(entry.getKey()));
getProject().removeBuildListener(this);
}
}

+ 8
- 10
src/main/org/apache/tools/ant/taskdefs/Replace.java View File

@@ -45,6 +45,7 @@ import org.apache.tools.ant.types.resources.FileProvider;
import org.apache.tools.ant.types.resources.FileResource;
import org.apache.tools.ant.types.resources.Union;
import org.apache.tools.ant.util.FileUtils;
import org.apache.tools.ant.util.StreamUtils;

/**
* Replaces all occurrences of one or more string tokens with given
@@ -511,14 +512,12 @@ public class Replace extends MatchingTask {

try {
if (replaceFilterResource != null) {
Properties props = getProperties(replaceFilterResource);
Iterator<Object> e = getOrderedIterator(props);
while (e.hasNext()) {
String tok = e.next().toString();
final Properties properties = getProperties(replaceFilterResource);
StreamUtils.iteratorAsStream(getOrderedIterator(properties)).forEach(tok -> {
Replacefilter replaceFilter = createReplacefilter();
replaceFilter.setToken(tok);
replaceFilter.setValue(props.getProperty(tok));
}
replaceFilter.setValue(properties.getProperty(tok));
});
}

validateAttributes();
@@ -936,10 +935,9 @@ public class Replace extends MatchingTask {
*
* @param props Properties
*/
private Iterator<Object> getOrderedIterator(Properties props) {
List<Object> keys = new ArrayList<>(props.keySet());
keys.sort(Comparator.comparingInt(o -> Objects.toString(o, "").length())
.reversed());
private Iterator<String> getOrderedIterator(Properties props) {
List<String> keys = new ArrayList<>(props.stringPropertyNames());
keys.sort(Comparator.<String>comparingInt(s -> s.length()).reversed());
return keys.iterator();
}
}

+ 2
- 3
src/main/org/apache/tools/ant/taskdefs/condition/And.java View File

@@ -18,9 +18,8 @@

package org.apache.tools.ant.taskdefs.condition;

import java.util.Collections;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.util.StreamUtils;

/**
* &lt;and&gt; condition container.
@@ -38,7 +37,7 @@ public class And extends ConditionBase implements Condition {
*/
@Override
public boolean eval() throws BuildException {
return Collections.list(getConditions()).stream().allMatch(Condition::eval);
return StreamUtils.enumerationAsStream(getConditions()).allMatch(Condition::eval);
}

}

+ 2
- 2
src/main/org/apache/tools/ant/taskdefs/condition/IsSigned.java View File

@@ -19,12 +19,12 @@ package org.apache.tools.ant.taskdefs.condition;

import java.io.File;
import java.io.IOException;
import java.util.Collections;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.ManifestTask;
import org.apache.tools.ant.types.DataType;
import org.apache.tools.ant.util.StreamUtils;
import org.apache.tools.zip.ZipFile;

/**
@@ -72,7 +72,7 @@ public class IsSigned extends DataType implements Condition {
throws IOException {
try (ZipFile jarFile = new ZipFile(zipFile)) {
if (null == name) {
return Collections.list(jarFile.getEntries()).stream()
return StreamUtils.enumerationAsStream(jarFile.getEntries())
.anyMatch(e -> e.getName().startsWith(SIG_START) && e.getName().endsWith(SIG_END));
}
name = replaceInvalidChars(name);


+ 2
- 1
src/main/org/apache/tools/ant/taskdefs/condition/Or.java View File

@@ -21,6 +21,7 @@ package org.apache.tools.ant.taskdefs.condition;
import java.util.Collections;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.util.StreamUtils;

/**
* &lt;or&gt; condition container.
@@ -38,7 +39,7 @@ public class Or extends ConditionBase implements Condition {
*/
@Override
public boolean eval() throws BuildException {
return Collections.list(getConditions()).stream().anyMatch(Condition::eval);
return StreamUtils.enumerationAsStream(getConditions()).anyMatch(Condition::eval);
}

}

+ 4
- 7
src/main/org/apache/tools/ant/taskdefs/condition/Xor.java View File

@@ -20,6 +20,7 @@ package org.apache.tools.ant.taskdefs.condition;
import java.util.Collections;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.util.StreamUtils;

/**
* The <tt>Xor</tt> condition type to exclusive or operations.
@@ -36,13 +37,9 @@ public class Xor extends ConditionBase implements Condition {
*/
@Override
public boolean eval() throws BuildException {
// initial state is false.
boolean state = false;
for (Condition c : Collections.list(getConditions())) {
// every condition is xored against the previous one
state ^= c.eval();
}
return state;
// initial state is false
return StreamUtils.enumerationAsStream(getConditions()).map(Condition::eval)
.reduce((a, b) -> a ^ b).orElse(Boolean.FALSE);
}

}

+ 3
- 3
src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java View File

@@ -28,7 +28,6 @@ import java.lang.reflect.Field;
import java.net.URL;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
@@ -64,6 +63,7 @@ import org.apache.tools.ant.types.resources.URLProvider;
import org.apache.tools.ant.util.FileUtils;
import org.apache.tools.ant.util.JAXPUtils;
import org.apache.tools.ant.util.JavaEnvUtils;
import org.apache.tools.ant.util.StreamUtils;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@@ -619,7 +619,7 @@ public class TraXLiaison implements XSLTLiaison4, ErrorListener, XSLTLoggerAware
if (factory != null) {
setFactory(factory.getName());
// configure factory attributes
Collections.list(factory.getAttributes())
StreamUtils.enumerationAsStream(factory.getAttributes())
.forEach(attr -> setAttribute(attr.getName(), attr.getValue()));
factory.getFeatures()
.forEach(feature -> setFeature(feature.getName(), feature.getValue()));
@@ -633,7 +633,7 @@ public class TraXLiaison implements XSLTLiaison4, ErrorListener, XSLTLoggerAware
}

// configure output properties
Collections.list(xsltTask.getOutputProperties())
StreamUtils.enumerationAsStream(xsltTask.getOutputProperties())
.forEach(prop -> setOutputProperty(prop.getName(), prop.getValue()));

suppressWarnings = xsltTask.getSuppressWarnings();


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/optional/depend/Depend.java View File

@@ -322,7 +322,7 @@ public class Depend extends MatchingTask {
analyzer.addRootClass(info.className);
analyzer.addClassPath(destPath);
analyzer.setClosure(false);
dependencyList = new ArrayList<>(Collections.list(analyzer.getClassDependencies()));
dependencyList = Collections.list(analyzer.getClassDependencies());
dependencyList.forEach(o -> log("Class " + info.className + " depends on " + o,
Project.MSG_DEBUG));
cacheDirty = true;


+ 7
- 4
src/main/org/apache/tools/ant/taskdefs/optional/ejb/WebsphereDeploymentTool.java View File

@@ -21,7 +21,6 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.util.Collections;
import java.util.Hashtable;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
@@ -36,6 +35,7 @@ import org.apache.tools.ant.taskdefs.Java;
import org.apache.tools.ant.types.Environment;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.util.FileUtils;
import org.apache.tools.ant.util.StreamUtils;

/**
* WebSphere deployment tool that augments the ejbjar task.
@@ -667,13 +667,16 @@ public class WebsphereDeploymentTool extends GenericDeploymentTool {
wasJar = new JarFile(websphereJarFile);

//get the list of generic jar entries
Hashtable<String, JarEntry> genericEntries = Collections.list(genericJar.entries()).stream()
Hashtable<String, JarEntry> genericEntries
= StreamUtils.enumerationAsStream(genericJar.entries())
.collect(Collectors.toMap(je -> je.getName().replace('\\', '/'),
je -> je, (a, b) -> b, Hashtable::new));

// get the list of WebSphere jar entries
Hashtable<String, JarEntry> wasEntries = Collections.list(wasJar.entries()).stream()
.collect(Collectors.toMap(ZipEntry::getName, je -> je, (a, b) -> b, Hashtable::new));
Hashtable<String, JarEntry> wasEntries
= StreamUtils.enumerationAsStream(wasJar.entries())
.collect(Collectors.toMap(ZipEntry::getName,
je -> je, (a, b) -> b, Hashtable::new));

// Cycle through generic and make sure its in WebSphere
genericLoader = getClassLoaderFromJar(genericJarFile);


+ 4
- 2
src/main/org/apache/tools/ant/taskdefs/optional/jlink/jlink.java View File

@@ -28,7 +28,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;
import java.util.Vector;
import java.util.zip.CRC32;
@@ -207,7 +207,9 @@ public class jlink {
return;
}
try (ZipFile zipf = new ZipFile(f)) {
for (ZipEntry inputEntry : Collections.list(zipf.entries())) {
Enumeration<? extends ZipEntry> entries = zipf.entries();
while (entries.hasMoreElements()) {
ZipEntry inputEntry = entries.nextElement();
//Ignore manifest entries. They're bound to cause conflicts between
//files that are being merged. User should supply their own
//manifest file when doing the merge.


+ 2
- 2
src/main/org/apache/tools/ant/taskdefs/optional/junit/Enumerations.java View File

@@ -54,8 +54,8 @@ public final class Enumerations {
* @param <T> object type
* @param enums the array of enumerations.
* @return the enumeration over the array of enumerations.
* @deprecated Stream.concat(Collections.list ( one).stream(), Collections.list(two).stream())
* .collect(Collectors.collectingAndThen(Collectors.toList(), Collections::enumeration))
* @deprecated use Stream.concat(Collections.list(one).stream(), Collections.list(two).stream())
* .collect(Collectors.collectingAndThen(Collectors.toList(), Collections::enumeration))
*/
@Deprecated
@SafeVarargs


+ 2
- 12
src/main/org/apache/tools/ant/types/PropertySet.java View File

@@ -24,7 +24,6 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.Properties;
import java.util.Set;
@@ -494,17 +493,8 @@ public class PropertySet extends DataType implements ResourceCollection {
return getRef().toString();
}
dieOnCircularReference();
StringBuilder b = new StringBuilder();
TreeMap<String, Object> sorted = new TreeMap<>(getPropertyMap());
for (Entry<String, Object> e : sorted.entrySet()) {
if (b.length() > 0) {
b.append(", ");
}
b.append(e.getKey());
b.append("=");
b.append(e.getValue());
}
return b.toString();
return new TreeMap<>(getPropertyMap()).entrySet().stream()
.map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining(", "));
}

/**


+ 3
- 4
src/main/org/apache/tools/ant/types/ZipScanner.java View File

@@ -20,14 +20,13 @@ package org.apache.tools.ant.types;

import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.Map;
import java.util.zip.ZipException;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.types.resources.FileProvider;
import org.apache.tools.ant.types.resources.ZipResource;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.ant.util.StreamUtils;
import org.apache.tools.zip.ZipFile;

/**
@@ -62,7 +61,7 @@ public class ZipScanner extends ArchiveScanner {
"Only file provider resources are supported"));

try (ZipFile zf = new ZipFile(srcFile, encoding)) {
for (ZipEntry entry : Collections.list(zf.getEntries())) {
StreamUtils.enumerationAsStream(zf.getEntries()).forEach(entry -> {
Resource r = new ZipResource(srcFile, encoding, entry);
String name = entry.getName();
if (entry.isDirectory()) {
@@ -77,7 +76,7 @@ public class ZipScanner extends ArchiveScanner {
matchFileEntries.put(name, r);
}
}
}
});
} catch (ZipException ex) {
throw new BuildException("Problem reading " + srcFile, ex);
} catch (IOException ex) {


+ 6
- 10
src/main/org/apache/tools/ant/types/optional/depend/DependScanner.java View File

@@ -18,7 +18,6 @@
package org.apache.tools.ant.types.optional.depend;

import java.io.File;
import java.util.Collections;
import java.util.Set;
import java.util.Vector;
import java.util.stream.Collectors;
@@ -27,9 +26,9 @@ import java.util.stream.Stream;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.util.StreamUtils;
import org.apache.tools.ant.util.depend.DependencyAnalyzer;


/**
* DirectoryScanner for finding class dependencies.
*/
@@ -126,14 +125,11 @@ public class DependScanner extends DirectoryScanner {
Set<String> parentSet = Stream.of(parentScanner.getIncludedFiles())
.collect(Collectors.toSet());

for (String classname : Collections.list(analyzer.getClassDependencies())) {
String filename = classname.replace('.', File.separatorChar) + ".class";
File depFile = new File(basedir, filename);
if (depFile.exists() && parentSet.contains(filename)) {
// This is included
included.addElement(filename);
}
}
// This is included
StreamUtils.enumerationAsStream(analyzer.getClassDependencies())
.map(cName -> cName.replace('.', File.separatorChar) + ".class")
.filter(fName -> new File(basedir, fName).exists() && parentSet.contains(fName))
.forEach(fName -> included.addElement(fName));
}

/**


+ 3
- 3
src/main/org/apache/tools/ant/util/CollectionUtils.java View File

@@ -83,7 +83,7 @@ public class CollectionUtils {

// don't need the opposite check as the Dictionaries have the
// same size, so we've also covered all keys of d2 already.
return Collections.list(d1.keys()).stream()
return StreamUtils.enumerationAsStream(d1.keys())
.allMatch(key -> d1.get(key).equals(d2.get(key)));
}

@@ -113,7 +113,7 @@ public class CollectionUtils {
@Deprecated
public static <K, V> void putAll(Dictionary<? super K, ? super V> m1,
Dictionary<? extends K, ? extends V> m2) {
Collections.list(m2.keys()).forEach(key -> m1.put(key, m2.get(key)));
StreamUtils.enumerationAsStream(m2.keys()).forEach(key -> m1.put(key, m2.get(key)));
}

/**
@@ -210,7 +210,7 @@ public class CollectionUtils {
* @param <T> element type
* @return the collection
* @since Ant 1.8.0
* @deprecated instantiate a list an use forEachRemaining(list::add)
* @deprecated instantiate a list and use forEachRemaining(list::add)
*/
@Deprecated
public static <T> Collection<T> asCollection(final Iterator<? extends T> iter) {


+ 33
- 0
src/main/org/apache/tools/ant/util/StreamUtils.java View File

@@ -0,0 +1,33 @@
package org.apache.tools.ant.util;

import java.util.Enumeration;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.function.Consumer;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;

public class StreamUtils {
/**
* Turn Enumeration into a Stream
*
* @param <T> Enumeration type
* @param e Enumeration
* @return Stream
*/
public static <T> Stream<T> enumerationAsStream(Enumeration<T> e) {
return StreamSupport.stream(
new Spliterators.AbstractSpliterator<T>(Long.MAX_VALUE, Spliterator.ORDERED) {
public boolean tryAdvance(Consumer<? super T> action) {
if (e.hasMoreElements()) {
action.accept(e.nextElement());
return true;
}
return false;
}
public void forEachRemaining(Consumer<? super T> action) {
while(e.hasMoreElements()) action.accept(e.nextElement());
}
}, false);
}
}

+ 3
- 1
src/main/org/apache/tools/ant/util/depend/bcel/FullAnalyzer.java View File

@@ -16,6 +16,7 @@
*
*/
package org.apache.tools.ant.util.depend.bcel;

import java.io.File;
import java.io.IOException;
import java.util.Collections;
@@ -27,6 +28,7 @@ import org.apache.bcel.classfile.ClassParser;
import org.apache.bcel.classfile.DescendingVisitor;
import org.apache.bcel.classfile.JavaClass;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.util.StreamUtils;
import org.apache.tools.ant.util.depend.AbstractAnalyzer;

/**
@@ -102,7 +104,7 @@ public class FullAnalyzer extends AbstractAnalyzer {

toAnalyze.clear();
// now recover all the dependencies collected and add to the list.
Collections.list(dependencyVisitor.getDependencies()).stream()
StreamUtils.enumerationAsStream(dependencyVisitor.getDependencies())
.filter(className -> !dependencies.contains(className))
.forEach(toAnalyze::add);
}


+ 33
- 25
src/main/org/apache/tools/tar/TarInputStream.java View File

@@ -30,7 +30,6 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.tools.zip.ZipEncoding;
import org.apache.tools.zip.ZipEncodingHelper;
@@ -480,31 +479,40 @@ public class TarInputStream extends FilterInputStream {
* uid,uname
* SCHILY.devminor, SCHILY.devmajor: don't have setters/getters for those
*/
for (Entry<String, String> ent : headers.entrySet()) {
String key = ent.getKey();
String val = ent.getValue();
if ("path".equals(key)) {
currEntry.setName(val);
} else if ("linkpath".equals(key)) {
currEntry.setLinkName(val);
} else if ("gid".equals(key)) {
currEntry.setGroupId(Long.parseLong(val));
} else if ("gname".equals(key)) {
currEntry.setGroupName(val);
} else if ("uid".equals(key)) {
currEntry.setUserId(Long.parseLong(val));
} else if ("uname".equals(key)) {
currEntry.setUserName(val);
} else if ("size".equals(key)) {
currEntry.setSize(Long.parseLong(val));
} else if ("mtime".equals(key)) {
currEntry.setModTime((long) (Double.parseDouble(val) * 1000));
} else if ("SCHILY.devminor".equals(key)) {
currEntry.setDevMinor(Integer.parseInt(val));
} else if ("SCHILY.devmajor".equals(key)) {
currEntry.setDevMajor(Integer.parseInt(val));
headers.forEach((key, val) -> {
switch (key) {
case "path":
currEntry.setName(val);
break;
case "linkpath":
currEntry.setLinkName(val);
break;
case "gid":
currEntry.setGroupId(Long.parseLong(val));
break;
case "gname":
currEntry.setGroupName(val);
break;
case "uid":
currEntry.setUserId(Long.parseLong(val));
break;
case "uname":
currEntry.setUserName(val);
break;
case "size":
currEntry.setSize(Long.parseLong(val));
break;
case "mtime":
currEntry.setModTime((long) (Double.parseDouble(val) * 1000));
break;
case "SCHILY.devminor":
currEntry.setDevMinor(Integer.parseInt(val));
break;
case "SCHILY.devmajor":
currEntry.setDevMajor(Integer.parseInt(val));
break;
}
}
});
}

/**


+ 5
- 10
src/tests/junit/org/apache/tools/ant/AntClassLoaderDelegationTest.java View File

@@ -24,7 +24,7 @@ import java.net.URL;
import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.util.FileUtils;
import org.junit.Before;
@@ -52,8 +52,7 @@ public class AntClassLoaderDelegationTest {
}

/** Sample resource present in build/testcases/ */
private static final String TEST_RESOURCE
= "apache/tools/ant/IncludeTest.class";
private static final String TEST_RESOURCE = "apache/tools/ant/IncludeTest.class";

@SuppressWarnings("resource")
@Test
@@ -75,11 +74,11 @@ public class AntClassLoaderDelegationTest {
URL urlFromParent = new URL("http://ant.apache.org/" + TEST_RESOURCE);
assertEquals("correct resources (regular delegation order)",
Arrays.asList(urlFromParent, urlFromPath),
enum2List(acl.getResources(TEST_RESOURCE)));
Collections.list(acl.getResources(TEST_RESOURCE)));
acl = new AntClassLoader(parent, p, path, false);
assertEquals("correct resources (reverse delegation order)",
Arrays.asList(urlFromPath, urlFromParent),
enum2List(acl.getResources(TEST_RESOURCE)));
Collections.list(acl.getResources(TEST_RESOURCE)));
}

@SuppressWarnings("resource")
@@ -99,11 +98,7 @@ public class AntClassLoaderDelegationTest {
acl.setIsolated(true);
assertEquals("correct resources (reverse delegation order)",
Collections.singletonList(urlFromPath),
enum2List(acl.getResources(TEST_RESOURCE)));
}

private static List<URL> enum2List(Enumeration<URL> e) {
return Collections.list(e);
Collections.list(acl.getResources(TEST_RESOURCE)));
}

/** Special loader that just knows how to find TEST_RESOURCE. */


+ 2
- 2
src/tests/junit/org/apache/tools/ant/taskdefs/JarTest.java View File

@@ -24,7 +24,6 @@ import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Collections;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

@@ -32,6 +31,7 @@ import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.BuildFileRule;
import org.apache.tools.ant.FileUtilities;
import org.apache.tools.ant.util.FileUtils;
import org.apache.tools.ant.util.StreamUtils;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -239,7 +239,7 @@ public class JarTest {
public void testNoDuplicateIndex() throws IOException {
buildRule.executeTarget("testIndexTests");
try (ZipFile archive = new ZipFile(new File(getOutputDir(), tempJar))) {
assertEquals(1, (int) Collections.list(archive.entries()).stream()
assertEquals(1, StreamUtils.enumerationAsStream(archive.entries())
.filter(ze -> ze.getName().equals("META-INF/INDEX.LIST")).count());
}
}


Loading…
Cancel
Save