Browse Source

More Streams (less StreamUtils)

master
Gintas Grigelionis 7 years ago
parent
commit
70da75c505
9 changed files with 88 additions and 128 deletions
  1. +17
    -27
      src/main/org/apache/tools/ant/ComponentHelper.java
  2. +1
    -6
      src/main/org/apache/tools/ant/RuntimeConfigurable.java
  3. +5
    -6
      src/main/org/apache/tools/ant/XmlLogger.java
  4. +6
    -14
      src/main/org/apache/tools/ant/attribute/BaseIfAttribute.java
  5. +3
    -5
      src/main/org/apache/tools/ant/taskdefs/Recorder.java
  6. +3
    -5
      src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandDeploymentTool.java
  7. +2
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/ejb/DescriptorHandler.java
  8. +44
    -55
      src/main/org/apache/tools/ant/taskdefs/optional/ejb/WeblogicDeploymentTool.java
  9. +7
    -9
      src/main/org/apache/tools/ant/taskdefs/optional/ejb/WebsphereDeploymentTool.java

+ 17
- 27
src/main/org/apache/tools/ant/ComponentHelper.java View File

@@ -34,6 +34,7 @@ import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.Stack;
import java.util.stream.Collectors;

import org.apache.tools.ant.launch.Launcher;
import org.apache.tools.ant.taskdefs.Definer;
@@ -228,7 +229,8 @@ public class ComponentHelper {
public void initSubProject(ComponentHelper helper) {
// add the types of the parent project
@SuppressWarnings("unchecked")
final Hashtable<String, AntTypeDefinition> typeTable = (Hashtable<String, AntTypeDefinition>) helper.antTypeTable.clone();
final Hashtable<String, AntTypeDefinition> typeTable
= (Hashtable<String, AntTypeDefinition>) helper.antTypeTable.clone();
synchronized (antTypeTable) {
for (AntTypeDefinition def : typeTable.values()) {
antTypeTable.put(def.getName(), def);
@@ -239,7 +241,8 @@ public class ComponentHelper {
synchronized (this) {
checkedNamespaces.addAll(inheritedCheckedNamespace);
}
Map<String, List<AntTypeDefinition>> inheritedRestrictedDef = helper.getRestrictedDefinition();
Map<String, List<AntTypeDefinition>> inheritedRestrictedDef
= helper.getRestrictedDefinition();
synchronized (restrictedDefinitions) {
restrictedDefinitions.putAll(inheritedRestrictedDef);
}
@@ -398,15 +401,11 @@ public class ComponentHelper {
synchronized (antTypeTable) {
if (rebuildTaskClassDefinitions) {
taskClassDefinitions.clear();
for (Map.Entry<String, AntTypeDefinition> e : antTypeTable.entrySet()) {
final Class<?> clazz = e.getValue().getExposedClass(project);
if (clazz == null) {
continue;
}
if (Task.class.isAssignableFrom(clazz)) {
taskClassDefinitions.put(e.getKey(), e.getValue().getTypeClass(project));
}
}
antTypeTable.entrySet().stream()
.filter(e -> e.getValue().getExposedClass(project) != null
&& Task.class.isAssignableFrom(e.getValue().getExposedClass(project)))
.forEach(e -> taskClassDefinitions.put(e.getKey(),
e.getValue().getTypeClass(project)));
rebuildTaskClassDefinitions = false;
}
}
@@ -426,15 +425,11 @@ public class ComponentHelper {
synchronized (antTypeTable) {
if (rebuildTypeClassDefinitions) {
typeClassDefinitions.clear();
for (Map.Entry<String, AntTypeDefinition> e : antTypeTable.entrySet()) {
final Class<?> clazz = e.getValue().getExposedClass(project);
if (clazz == null) {
continue;
}
if (!Task.class.isAssignableFrom(clazz)) {
typeClassDefinitions.put(e.getKey(), e.getValue().getTypeClass(project));
}
}
antTypeTable.entrySet().stream()
.filter(e -> e.getValue().getExposedClass(project) != null
&& !Task.class.isAssignableFrom(e.getValue().getExposedClass(project)))
.forEach(e -> typeClassDefinitions.put(e.getKey(),
e.getValue().getTypeClass(project)));
rebuildTypeClassDefinitions = false;
}
}
@@ -1077,14 +1072,9 @@ public class ComponentHelper {
* @return the (possibly empty) list of definitions
*/
private List<AntTypeDefinition> findTypeMatches(String prefix) {
final List<AntTypeDefinition> result = new ArrayList<>();
synchronized (antTypeTable) {
for (AntTypeDefinition def : antTypeTable.values()) {
if (def.getName().startsWith(prefix)) {
result.add(def);
}
}
return antTypeTable.values().stream().filter(def -> def.getName().startsWith(prefix))
.collect(Collectors.toList());
}
return result;
}
}

+ 1
- 6
src/main/org/apache/tools/ant/RuntimeConfigurable.java View File

@@ -43,10 +43,6 @@ public class RuntimeConfigurable implements Serializable {
/** Serialization version */
private static final long serialVersionUID = 1L;

/** Empty Hashtable. */
private static final Hashtable<String, Object> EMPTY_HASHTABLE =
new Hashtable<>(0);

/** Name of the element to configure. */
private String elementTag = null;

@@ -336,8 +332,7 @@ public class RuntimeConfigurable implements Serializable {
* @since Ant 1.6
*/
public synchronized Hashtable<String, Object> getAttributeMap() {
return (attributeMap == null)
? EMPTY_HASHTABLE : new Hashtable<>(attributeMap);
return new Hashtable<>(attributeMap == null ? Collections.emptyMap() : attributeMap);
}

/**


+ 5
- 6
src/main/org/apache/tools/ant/XmlLogger.java View File

@@ -25,13 +25,13 @@ import java.io.Writer;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Hashtable;
import java.util.Map;
import java.util.Stack;

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;
@@ -108,16 +108,16 @@ public class XmlLogger implements BuildLogger {
private Document doc = builder.newDocument();

/** Mapping for when tasks started (Task to TimedElement). */
private Hashtable<Task, TimedElement> tasks = new Hashtable<>();
private Map<Task, TimedElement> tasks = new Hashtable<>();

/** Mapping for when targets started (Target to TimedElement). */
private Hashtable<Target, TimedElement> targets = new Hashtable<>();
private Map<Target, TimedElement> targets = new Hashtable<>();

/**
* Mapping of threads to stacks of elements
* (Thread to Stack of TimedElement).
*/
private Hashtable<Thread, Stack<TimedElement>> threadStacks = new Hashtable<>();
private Map<Thread, Stack<TimedElement>> threadStacks = new Hashtable<>();

/**
* When the build started.
@@ -345,8 +345,7 @@ public class XmlLogger implements BuildLogger {
if (element != null) {
return element;
}
return StreamUtils.enumerationAsStream(tasks.keys())
.filter(UnknownElement.class::isInstance)
return tasks.keySet().stream().filter(UnknownElement.class::isInstance)
.filter(key -> ((UnknownElement) key).getTask() == task).findFirst()
.map(key -> tasks.get(key)).orElse(null);
}


+ 6
- 14
src/main/org/apache/tools/ant/attribute/BaseIfAttribute.java View File

@@ -19,11 +19,10 @@
package org.apache.tools.ant.attribute;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import java.util.stream.Collectors;

import org.apache.tools.ant.ProjectComponent;
import org.apache.tools.ant.RuntimeConfigurable;
import org.apache.tools.ant.UnknownElement;


@@ -68,17 +67,10 @@ public abstract class BaseIfAttribute
* @return a map of attributes.
*/
protected Map<String, String> getParams(UnknownElement el) {
Map<String, String> ret = new HashMap<>();
RuntimeConfigurable rc = el.getWrapper();
Hashtable<String, Object> attributes = rc.getAttributeMap(); // This does a copy!
for (Map.Entry<String, Object> entry : attributes.entrySet()) {
String key = entry.getKey();
if (key.startsWith("ant-attribute:param")) {
int pos = key.lastIndexOf(':');
ret.put(key.substring(pos + 1),
el.getProject().replaceProperties((String) entry.getValue()));
}
}
return ret;
// this makes a copy!
return el.getWrapper().getAttributeMap().entrySet().stream()
.filter(e -> e.getKey().startsWith("ant-attribute:param"))
.collect(Collectors.toMap(e -> e.getKey().substring(e.getKey().lastIndexOf(':') + 1),
e -> el.getProject().replaceProperties((String) e.getValue()), (a, b) -> b));
}
}

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

@@ -18,6 +18,7 @@
package org.apache.tools.ant.taskdefs;

import java.util.Hashtable;
import java.util.Map;

import org.apache.tools.ant.BuildEvent;
import org.apache.tools.ant.BuildException;
@@ -66,7 +67,7 @@ public class Recorder extends Task implements SubBuildListener {
/** Strip task banners if true. */
private boolean emacsMode = false;
/** The list of recorder entries. */
private static Hashtable<String, RecorderEntry> recorderEntries = new Hashtable<>();
private static Map<String, RecorderEntry> recorderEntries = new Hashtable<>();

//////////////////////////////////////////////////////////////////////
// CONSTRUCTORS / INITIALIZERS
@@ -304,11 +305,8 @@ public class Recorder extends Task implements SubBuildListener {
*
* @since Ant 1.7
*/
@SuppressWarnings("unchecked")
private void cleanup() {
((Hashtable<String, RecorderEntry>) recorderEntries.clone()).entrySet().stream()
.filter(entry -> entry.getValue().getProject() == getProject())
.forEach(entry -> recorderEntries.remove(entry.getKey()));
recorderEntries.entrySet().removeIf(e -> e.getValue().getProject() == getProject());
getProject().removeBuildListener(this);
}
}

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

@@ -16,10 +16,8 @@
*
*/


package org.apache.tools.ant.taskdefs.optional.ejb;


import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
@@ -31,6 +29,7 @@ import java.util.Collection;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.ExecTask;
@@ -41,7 +40,6 @@ import org.apache.tools.ant.taskdefs.optional.ejb.EjbJar.DTDLocation;
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.Path;


/**
* BorlandDeploymentTool is dedicated to the Borland Application Server 4.5 and 4.5.1
* This task generates and compiles the stubs and skeletons for all ejb described into the
@@ -60,7 +58,7 @@ import org.apache.tools.ant.types.Path;
* <li>version (int) : tell what is the Borland appserver version 4 or 5 </li>
* </ul>
*
*<PRE>
*<pre>
*
* &lt;ejbjar srcdir=&quot;${build.classes}&quot;
* basejarname=&quot;vsmp&quot;
@@ -74,7 +72,7 @@ import org.apache.tools.ant.types.Path;
* &lt;include name=&quot;demo\helper\*.class&quot;/&gt;
* &lt;/support&gt;
* &lt;/ejbjar&gt;
*</PRE>
*</pre>
*
*/
public class BorlandDeploymentTool extends GenericDeploymentTool


+ 2
- 1
src/main/org/apache/tools/ant/taskdefs/optional/ejb/DescriptorHandler.java View File

@@ -23,6 +23,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.util.Collections;
import java.util.Hashtable;
import java.util.Map;

@@ -233,7 +234,7 @@ public class DescriptorHandler extends HandlerBase {
* @return the map of files
*/
public Hashtable<String, File> getFiles() {
return ejbFiles == null ? new Hashtable<>() : ejbFiles;
return new Hashtable<>(ejbFiles == null ? Collections.emptyMap() : ejbFiles);
}

/**


+ 44
- 55
src/main/org/apache/tools/ant/taskdefs/optional/ejb/WeblogicDeploymentTool.java View File

@@ -21,13 +21,16 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.JarOutputStream;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
@@ -36,7 +39,6 @@ import org.apache.tools.ant.AntClassLoader;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Java;
import org.apache.tools.ant.taskdefs.optional.ejb.EjbJar.DTDLocation;
import org.apache.tools.ant.types.Environment;
import org.apache.tools.ant.types.Environment.Variable;
import org.apache.tools.ant.types.Path;
@@ -424,9 +426,7 @@ public class WeblogicDeploymentTool extends GenericDeploymentTool {
handler.registerDTD(PUBLICID_WEBLOGIC_EJB510, weblogicDTD);
handler.registerDTD(PUBLICID_WEBLOGIC_EJB600, weblogicDTD);

for (DTDLocation dtdLocation : getConfig().dtdLocations) {
handler.registerDTD(dtdLocation.getPublicId(), dtdLocation.getLocation());
}
getConfig().dtdLocations.forEach(l -> handler.registerDTD(l.getPublicId(), l.getLocation()));
return handler;
}

@@ -685,73 +685,62 @@ public class WeblogicDeploymentTool extends GenericDeploymentTool {
genericJar = new JarFile(genericJarFile);
wlJar = new JarFile(weblogicJarFile);

Hashtable<String, JarEntry> genericEntries = new Hashtable<>();
Hashtable<String, JarEntry> wlEntries = new Hashtable<>();
Hashtable<String, JarEntry> replaceEntries = new Hashtable<>();
Map<String, JarEntry> replaceEntries = new HashMap<>();

//get the list of generic jar entries
for (Enumeration<JarEntry> e = genericJar.entries(); e.hasMoreElements();) {
JarEntry je = e.nextElement();
genericEntries.put(je.getName().replace('\\', '/'), je);
}
Map<String, JarEntry> genericEntries = genericJar.stream()
.collect(Collectors.toMap(je -> je.getName().replace('\\', '/'),
je -> je, (a, b) -> b));
// get the list of WebLogic jar entries
for (Enumeration<JarEntry> e = wlJar.entries(); e.hasMoreElements();) {
JarEntry je = e.nextElement();
wlEntries.put(je.getName(), je);
}
Map<String, JarEntry> wlEntries = wlJar.stream().collect(Collectors.toMap(ZipEntry::getName,
je -> je, (a, b) -> b));

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

for (Enumeration<String> e = genericEntries.keys(); e.hasMoreElements();) {
String filepath = e.nextElement();

if (wlEntries.containsKey(filepath)) {
// File name/path match

// Check files see if same
JarEntry genericEntry = genericEntries.get(filepath);
JarEntry wlEntry = wlEntries.get(filepath);
for (String filepath : genericEntries.keySet()) {
if (!wlEntries.containsKey(filepath)) {
// a file doesn't exist rebuild
log("File " + filepath + " not present in weblogic jar",
Project.MSG_VERBOSE);
rebuild = true;
break;
}
// File name/path match
// Check files see if same
JarEntry genericEntry = genericEntries.get(filepath);
JarEntry wlEntry = wlEntries.get(filepath);

if (genericEntry.getCrc() != wlEntry.getCrc()
|| genericEntry.getSize() != wlEntry.getSize()) {
if (genericEntry.getCrc() != wlEntry.getCrc()
|| genericEntry.getSize() != wlEntry.getSize()) {

if (genericEntry.getName().endsWith(".class")) {
//File are different see if its an object or an interface
String classname
= genericEntry.getName()
if (genericEntry.getName().endsWith(".class")) {
//File are different see if its an object or an interface
String classname = genericEntry.getName()
.replace(File.separatorChar, '.')
.replace('/', '.');

classname = classname.substring(0, classname.lastIndexOf(".class"));

Class<?> genclass = genericLoader.loadClass(classname);

if (genclass.isInterface()) {
//Interface changed rebuild jar.
log("Interface " + genclass.getName()
+ " has changed", Project.MSG_VERBOSE);
rebuild = true;
break;
}
//Object class Changed update it.
replaceEntries.put(filepath, genericEntry);
} else if (!"META-INF/MANIFEST.MF".equals(genericEntry.getName())) {
// it is not the manifest, otherwise we'd ignore it
// File other then class changed rebuild
log("Non class file " + genericEntry.getName()
classname = classname.substring(0, classname.lastIndexOf(".class"));

Class<?> genclass = genericLoader.loadClass(classname);

if (genclass.isInterface()) {
//Interface changed rebuild jar.
log("Interface " + genclass.getName()
+ " has changed", Project.MSG_VERBOSE);
rebuild = true;
break;
}
//Object class Changed update it.
replaceEntries.put(filepath, genericEntry);
} else if (!genericEntry.getName().equals("META-INF/MANIFEST.MF")) {
// it is not the manifest, otherwise we'd ignore it
// File other then class changed rebuild
log("Non class file " + genericEntry.getName()
+ " has changed", Project.MSG_VERBOSE);
rebuild = true;
break;
}
} else {
// a file doesn't exist rebuild

log("File " + filepath + " not present in weblogic jar",
Project.MSG_VERBOSE);
rebuild = true;
break;
}
}



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

@@ -22,6 +22,8 @@ import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.util.Hashtable;
import java.util.HashMap;
import java.util.Map;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.JarOutputStream;
@@ -35,7 +37,6 @@ 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,21 +668,18 @@ public class WebsphereDeploymentTool extends GenericDeploymentTool {
wasJar = new JarFile(websphereJarFile);

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

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

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

Hashtable<String, JarEntry> replaceEntries = new Hashtable<>();
Map<String, JarEntry> replaceEntries = new HashMap<>();
for (String filepath : genericEntries.keySet()) {
if (!wasEntries.containsKey(filepath)) {
// a file doesn't exist rebuild


Loading…
Cancel
Save