You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mb...@apache.org on 2018/04/29 19:40:52 UTC

[commons-weaver] 01/13: Java 8; assorted minor refactorings

This is an automated email from the ASF dual-hosted git repository.

mbenson pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-weaver.git

commit 901ba1ae923352168dc5857c3b3d462a915f7e0f
Author: Gary D. Gregory <gg...@apache.org>
AuthorDate: Sun Jan 7 20:53:24 2018 +0000

    Java 8; assorted minor refactorings
---
 BUILDING.txt                                       |   2 +-
 ant/pom.xml                                        |   1 -
 .../commons/weaver/ant/AbstractWeaverTask.java     |   1 -
 .../org/apache/commons/weaver/ant/CleanTask.java   |   4 +-
 .../org/apache/commons/weaver/ant/WeaveTask.java   |   4 +-
 .../apache/commons/weaver/ant/WeaverSettings.java  |   2 -
 maven-plugin/pom.xml                               |   2 +-
 .../commons/weaver/maven/AbstractCWMojo.java       |  12 +-
 .../commons/weaver/maven/AbstractPrepareMojo.java  |   4 +-
 .../commons/weaver/maven/AbstractWeaveMojo.java    |   4 +-
 .../maven/JavaLoggingToMojoLoggingRedirector.java  |  21 +-
 .../apache/commons/weaver/maven/PrepareMojo.java   |   1 -
 .../commons/weaver/maven/TestPrepareMojo.java      |   1 -
 .../apache/commons/weaver/maven/TestWeaveMojo.java |   1 -
 .../org/apache/commons/weaver/maven/WeaveMojo.java |   1 -
 modules/normalizer/pom.xml                         |   2 -
 .../commons/weaver/normalizer/Normalizer.java      |  65 ++---
 .../weaver/normalizer/NormalizerWeaver.java        |   1 -
 .../apache/commons/weaver/normalizer/Utils.java    |   9 +-
 modules/privilizer/weaver/pom.xml                  |   3 -
 .../commons/weaver/privilizer/ActionGenerator.java |   8 +-
 .../weaver/privilizer/BlueprintingVisitor.java     |  52 ++--
 .../apache/commons/weaver/privilizer/Field.java    |  12 +-
 .../commons/weaver/privilizer/FieldAccess.java     |   1 -
 .../apache/commons/weaver/privilizer/Policy.java   |   1 -
 .../commons/weaver/privilizer/Privilizer.java      |  23 +-
 .../weaver/privilizer/PrivilizerCleaner.java       |  11 +-
 .../weaver/privilizer/PrivilizerWeaver.java        |   2 +-
 .../weaver/privilizer/PrivilizingVisitor.java      |   5 +-
 pom.xml                                            |   9 +-
 .../org/apache/commons/weaver/CleanProcessor.java  |   2 +-
 .../java/org/apache/commons/weaver/Finder.java     | 281 +++++++--------------
 .../java/org/apache/commons/weaver/Inflater.java   |  88 +++----
 .../org/apache/commons/weaver/ProcessorBase.java   |   4 +-
 .../org/apache/commons/weaver/WeaveProcessor.java  |   2 +-
 .../apache/commons/weaver/model/ScanRequest.java   |   4 +-
 .../apache/commons/weaver/model/ScanResult.java    |   9 +-
 .../org/apache/commons/weaver/model/Weavable.java  |   2 +-
 .../apache/commons/weaver/model/WeavableClass.java |  39 +--
 .../commons/weaver/model/WeavableConstructor.java  |   1 -
 .../weaver/model/WeavableConstructorParameter.java |   1 -
 .../commons/weaver/model/WeavableExecutable.java   |   3 +-
 .../commons/weaver/model/WeavableMethod.java       |   2 +-
 .../weaver/model/WeavableMethodParameter.java      |   1 -
 .../commons/weaver/model/WeavablePackage.java      |   6 +-
 .../commons/weaver/model/WeavableParameter.java    |   1 -
 .../commons/weaver/model/WeaveEnvironment.java     |  37 +--
 .../apache/commons/weaver/model/WeaveInterest.java |  20 +-
 .../java/org/apache/commons/weaver/utils/Args.java |   1 -
 .../org/apache/commons/weaver/utils/Providers.java |  33 +--
 .../org/apache/commons/weaver/utils/URLArray.java  |  60 ++---
 51 files changed, 300 insertions(+), 562 deletions(-)

diff --git a/BUILDING.txt b/BUILDING.txt
deleted file mode 120000
index 5af3810..0000000
--- a/BUILDING.txt
+++ /dev/null
@@ -1 +0,0 @@
-src/site/markdown/building.md
\ No newline at end of file
diff --git a/BUILDING.txt b/BUILDING.txt
new file mode 100644
index 0000000..0fcdf1e
--- /dev/null
+++ b/BUILDING.txt
@@ -0,0 +1 @@
+link src/site/markdown/building.md
\ No newline at end of file
diff --git a/ant/pom.xml b/ant/pom.xml
index dd472ae..0db620b 100644
--- a/ant/pom.xml
+++ b/ant/pom.xml
@@ -111,7 +111,6 @@ under the License.
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-shade-plugin</artifactId>
-        <version>2.1</version>
         <executions>
           <execution>
             <id>shade</id>
diff --git a/ant/src/main/java/org/apache/commons/weaver/ant/AbstractWeaverTask.java b/ant/src/main/java/org/apache/commons/weaver/ant/AbstractWeaverTask.java
index fde4f9e..50c66c9 100644
--- a/ant/src/main/java/org/apache/commons/weaver/ant/AbstractWeaverTask.java
+++ b/ant/src/main/java/org/apache/commons/weaver/ant/AbstractWeaverTask.java
@@ -66,5 +66,4 @@ public abstract class AbstractWeaverTask extends Task {
         settings.setRefid(new Reference(getProject(), refid));
         add(settings);
     }
-
 }
\ No newline at end of file
diff --git a/ant/src/main/java/org/apache/commons/weaver/ant/CleanTask.java b/ant/src/main/java/org/apache/commons/weaver/ant/CleanTask.java
index a91f9da..1756958 100644
--- a/ant/src/main/java/org/apache/commons/weaver/ant/CleanTask.java
+++ b/ant/src/main/java/org/apache/commons/weaver/ant/CleanTask.java
@@ -42,9 +42,7 @@ public class CleanTask extends AbstractWeaverTask {
     public void execute() {
         try {
             final WeaverSettings settings = Validate.notNull(getSettings(), "settings");
-            final CleanProcessor cleanProcessor =
-                new CleanProcessor(settings.getClasspathEntries(), settings.getTarget(), settings.getProperties());
-            cleanProcessor.clean();
+            new CleanProcessor(settings.getClasspathEntries(), settings.getTarget(), settings.getProperties()).clean();
         } catch (final Exception e) {
             throw new BuildException(e);
         }
diff --git a/ant/src/main/java/org/apache/commons/weaver/ant/WeaveTask.java b/ant/src/main/java/org/apache/commons/weaver/ant/WeaveTask.java
index 414bfb7..31ab7f4 100644
--- a/ant/src/main/java/org/apache/commons/weaver/ant/WeaveTask.java
+++ b/ant/src/main/java/org/apache/commons/weaver/ant/WeaveTask.java
@@ -42,9 +42,7 @@ public class WeaveTask extends AbstractWeaverTask {
     public void execute() {
         try {
             final WeaverSettings settings = Validate.notNull(getSettings(), "settings");
-            final WeaveProcessor weaveProcessor =
-                new WeaveProcessor(settings.getClasspathEntries(), settings.getTarget(), settings.getProperties());
-            weaveProcessor.weave();
+            new WeaveProcessor(settings.getClasspathEntries(), settings.getTarget(), settings.getProperties()).weave();
         } catch (final Exception e) {
             throw new BuildException(e);
         }
diff --git a/ant/src/main/java/org/apache/commons/weaver/ant/WeaverSettings.java b/ant/src/main/java/org/apache/commons/weaver/ant/WeaverSettings.java
index 5533f5f..0686e2f 100644
--- a/ant/src/main/java/org/apache/commons/weaver/ant/WeaverSettings.java
+++ b/ant/src/main/java/org/apache/commons/weaver/ant/WeaverSettings.java
@@ -121,7 +121,6 @@ public class WeaverSettings extends DataType {
         if (includeSystemClasspath) {
             path.add(Path.systemClasspath);
         }
-
         return Arrays.asList(path.list());
     }
 
@@ -227,5 +226,4 @@ public class WeaverSettings extends DataType {
     private WeaverSettings getRef() {
         return getCheckedRef(WeaverSettings.class, "settings");
     }
-
 }
\ No newline at end of file
diff --git a/maven-plugin/pom.xml b/maven-plugin/pom.xml
index 465bc0c..d7ebb30 100644
--- a/maven-plugin/pom.xml
+++ b/maven-plugin/pom.xml
@@ -35,7 +35,7 @@ under the License.
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <maven.version>3.1.0</maven.version>
-    <maven.plugin.version>3.1</maven.plugin.version>
+    <maven.plugin.version>3.5.1</maven.plugin.version>
     <aether.version>1.1.0</aether.version>
   </properties>
 
diff --git a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractCWMojo.java b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractCWMojo.java
index 46f6500..0387719 100755
--- a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractCWMojo.java
+++ b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractCWMojo.java
@@ -23,11 +23,9 @@ import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
-import java.util.ArrayList;
-import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Properties;
-import java.util.Set;
+import java.util.stream.Collectors;
 
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -42,7 +40,6 @@ import org.apache.maven.project.MavenProject;
 import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.collection.CollectRequest;
-import org.eclipse.aether.resolution.ArtifactResult;
 import org.eclipse.aether.resolution.DependencyRequest;
 import org.eclipse.aether.resolution.DependencyResolutionException;
 import org.eclipse.aether.resolution.DependencyResult;
@@ -139,11 +136,8 @@ abstract class AbstractCWMojo extends AbstractMojo {
             repositorySystem.resolveDependencies(repositorySystemSession, new DependencyRequest()
                 .setFilter(new ScopeDependencyFilter(getExcludeScopes())).setCollectRequest(collect));
 
-        final Set<String> result = new LinkedHashSet<String>();
-        for (final ArtifactResult artifactResult : dependencyResult.getArtifactResults()) {
-            result.add(artifactResult.getArtifact().getFile().getAbsolutePath());
-        }
-        return new ArrayList<String>(result);
+        return dependencyResult.getArtifactResults().stream().map(ar -> ar.getArtifact().getFile().getAbsolutePath())
+            .distinct().collect(Collectors.toList());
     }
 
     private String[] getExcludeScopes() {
diff --git a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractPrepareMojo.java b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractPrepareMojo.java
index 4160648..8555626 100644
--- a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractPrepareMojo.java
+++ b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractPrepareMojo.java
@@ -37,11 +37,9 @@ public abstract class AbstractPrepareMojo extends AbstractCWMojo {
             return;
         }
         try {
-            final CleanProcessor cleanProcessor = new CleanProcessor(classpath, target, config);
-            cleanProcessor.clean();
+            new CleanProcessor(classpath, target, config).clean();
         } catch (Exception e) {
             throw new MojoExecutionException("cleaning failed due to " + e.getMessage(), e);
         }
     }
-
 }
diff --git a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractWeaveMojo.java b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractWeaveMojo.java
index 8af0ab1..6638a2e 100644
--- a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractWeaveMojo.java
+++ b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractWeaveMojo.java
@@ -34,11 +34,9 @@ public abstract class AbstractWeaveMojo extends AbstractCWMojo {
     protected void doExecute(final File target, final List<String> classpath, final Properties config)
         throws MojoExecutionException {
         try {
-            final WeaveProcessor weaveProcessor = new WeaveProcessor(classpath, target, config);
-            weaveProcessor.weave();
+            new WeaveProcessor(classpath, target, config).weave();
         } catch (Exception e) {
             throw new MojoExecutionException("weaving failed due to " + e.getMessage(), e);
         }
     }
-
 }
diff --git a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/JavaLoggingToMojoLoggingRedirector.java b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/JavaLoggingToMojoLoggingRedirector.java
index 69f5313..4534cec 100644
--- a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/JavaLoggingToMojoLoggingRedirector.java
+++ b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/JavaLoggingToMojoLoggingRedirector.java
@@ -27,6 +27,7 @@ import java.util.logging.Level;
 import java.util.logging.LogManager;
 import java.util.logging.LogRecord;
 import java.util.logging.Logger;
+import java.util.stream.Stream;
 
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.maven.plugin.MojoExecutionException;
@@ -36,7 +37,7 @@ import org.apache.maven.plugin.logging.Log;
  * This class redirects calls to java.util Logging to Mojo logging.
  */
 public class JavaLoggingToMojoLoggingRedirector {
-    private final List<Handler> removedHandlers = new ArrayList<Handler>();
+    private final List<Handler> removedHandlers = new ArrayList<>();
 
     /**
      * The Maven mojo logger to delegate messages to.
@@ -68,12 +69,10 @@ public class JavaLoggingToMojoLoggingRedirector {
             if (removedHandlers.isEmpty()) {
                 throw new MojoExecutionException("could not remove any handler. aborting.");
             }
-
             // add our own
             activeHandler = new JDKLogHandler();
             activeHandler.setLevel(Level.ALL);
             rootLogger.setLevel(Level.ALL);
-
             rootLogger.addHandler(activeHandler);
         } catch (Exception exc) {
             throw new MojoExecutionException("failed to activate the jul logging redirector", exc);
@@ -87,15 +86,11 @@ public class JavaLoggingToMojoLoggingRedirector {
     public void deactivate() {
         final Logger rootLogger = LogManager.getLogManager().getLogger("");
         // remove old handlers
-        for (final Handler handler : rootLogger.getHandlers()) {
-            if (handler == activeHandler) {
-                rootLogger.removeHandler(handler);
-            }
-        }
-
-        for (final Handler oldHandler : removedHandlers) {
-            rootLogger.addHandler(oldHandler);
+        
+        if (Stream.of(rootLogger.getHandlers()).anyMatch(h -> h == activeHandler)) {
+            rootLogger.removeHandler(activeHandler);
         }
+        removedHandlers.forEach(rootLogger::addHandler);
     }
 
     private class JDKLogHandler extends Handler {
@@ -133,7 +128,6 @@ public class JavaLoggingToMojoLoggingRedirector {
 
         private String getMessage(final LogRecord record) {
             final ResourceBundle bundle = record.getResourceBundle();
-            final Object[] params = record.getParameters();
             final String message;
             if (bundle != null && bundle.containsKey(record.getMessage())) {
                 // todo: cannot enforce Locale.ENGLISH here
@@ -141,6 +135,7 @@ public class JavaLoggingToMojoLoggingRedirector {
             } else {
                 message = record.getMessage();
             }
+            final Object[] params = record.getParameters();
             if (ArrayUtils.isNotEmpty(params)) {
                 return new MessageFormat(message).format(params);
             }
@@ -156,7 +151,5 @@ public class JavaLoggingToMojoLoggingRedirector {
         public void close() {
             // nothing to do
         }
-
     }
-
 }
diff --git a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/PrepareMojo.java b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/PrepareMojo.java
index eda7622..810c9f8 100644
--- a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/PrepareMojo.java
+++ b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/PrepareMojo.java
@@ -49,5 +49,4 @@ public class PrepareMojo extends AbstractPrepareMojo {
     protected File getTarget() {
         return target;
     }
-
 }
diff --git a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/TestPrepareMojo.java b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/TestPrepareMojo.java
index 849d5e9..79ce5eb 100644
--- a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/TestPrepareMojo.java
+++ b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/TestPrepareMojo.java
@@ -51,5 +51,4 @@ public class TestPrepareMojo extends AbstractPrepareMojo {
     protected File getTarget() {
         return target;
     }
-
 }
diff --git a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/TestWeaveMojo.java b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/TestWeaveMojo.java
index db714f6..af5c77d 100644
--- a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/TestWeaveMojo.java
+++ b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/TestWeaveMojo.java
@@ -60,5 +60,4 @@ public class TestWeaveMojo extends AbstractWeaveMojo {
     protected File getTarget() {
         return target;
     }
-
 }
diff --git a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/WeaveMojo.java b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/WeaveMojo.java
index a5d37af..ecdc025 100644
--- a/maven-plugin/src/main/java/org/apache/commons/weaver/maven/WeaveMojo.java
+++ b/maven-plugin/src/main/java/org/apache/commons/weaver/maven/WeaveMojo.java
@@ -50,5 +50,4 @@ public class WeaveMojo extends AbstractWeaveMojo {
     protected File getTarget() {
         return target;
     }
-
 }
diff --git a/modules/normalizer/pom.xml b/modules/normalizer/pom.xml
index 53a9e77..d27fcd8 100644
--- a/modules/normalizer/pom.xml
+++ b/modules/normalizer/pom.xml
@@ -120,7 +120,6 @@ under the License.
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-shade-plugin</artifactId>
-        <version>2.1</version>
         <executions>
           <execution>
             <id>shade</id>
@@ -233,7 +232,6 @@ under the License.
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-dependency-plugin</artifactId>
-        <version>2.10</version>
         <executions>
           <execution>
             <id>it-compile-deps</id>
diff --git a/modules/normalizer/src/main/java/org/apache/commons/weaver/normalizer/Normalizer.java b/modules/normalizer/src/main/java/org/apache/commons/weaver/normalizer/Normalizer.java
index 0ead390..b469c88 100644
--- a/modules/normalizer/src/main/java/org/apache/commons/weaver/normalizer/Normalizer.java
+++ b/modules/normalizer/src/main/java/org/apache/commons/weaver/normalizer/Normalizer.java
@@ -30,6 +30,7 @@ import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Set;
+import java.util.stream.Stream;
 
 import javax.activation.DataSource;
 
@@ -96,7 +97,7 @@ public class Normalizer {
             }
         }
 
-        private final MutablePair<String, String> key = new MutablePair<String, String>();
+        private final MutablePair<String, String> key = new MutablePair<>();
         private final MutableBoolean ignore = new MutableBoolean(false);
         private final MutableBoolean valid = new MutableBoolean(true);
         private final MutableBoolean mustRewriteConstructor = new MutableBoolean(false);
@@ -262,14 +263,10 @@ public class Normalizer {
 
             final DataSource classfile = env.getClassfile(className);
             env.debug("Writing class %s to %s", className, classfile.getName());
-            OutputStream outputStream = null;
-            try {
-                outputStream = classfile.getOutputStream();
+            try (OutputStream outputStream = classfile.getOutputStream()) {
                 IOUtils.write(bytecode, outputStream);
             } catch (final IOException e) {
                 throw new RuntimeException(e);
-            } finally {
-                IOUtils.closeQuietly(outputStream);
             }
         }
     }
@@ -350,15 +347,10 @@ public class Normalizer {
      * @return {@link Map} of enclosing classname to {@link Map} of internal name to {@link ClassWrapper}
      */
     private Map<String, Map<String, ClassWrapper>> byEnclosingClass(final Set<ClassWrapper> sort) {
-        final Map<String, Map<String, ClassWrapper>> result = new HashMap<String, Map<String, ClassWrapper>>();
+        final Map<String, Map<String, ClassWrapper>> result = new HashMap<>();
         for (final ClassWrapper wrapper : sort) {
-            final String outer = wrapper.wrapped.getEnclosingClass().getName();
-            Map<String, ClassWrapper> map = result.get(outer);
-            if (map == null) {
-                map = new LinkedHashMap<String, Normalizer.ClassWrapper>();
-                result.put(outer, map);
-            }
-            map.put(wrapper.wrapped.getName().replace('.', '/'), wrapper);
+            result.computeIfAbsent(wrapper.wrapped.getEnclosingClass().getName(), k -> new LinkedHashMap<>())
+                .put(wrapper.wrapped.getName().replace('.', '/'), wrapper);
         }
         return result;
     }
@@ -380,19 +372,15 @@ public class Normalizer {
         for (final Map.Entry<String, Map<String, ClassWrapper>> entry : byEnclosingClass.entrySet()) {
             final String outer = entry.getKey();
             env.debug("Normalizing %s inner classes of %s", entry.getValue().size(), outer);
-            final Map<String, String> classMap = new HashMap<String, String>();
+            final Map<String, String> classMap = new HashMap<>();
             for (final String merged : entry.getValue().keySet()) {
                 classMap.put(merged, target);
             }
             final Remapper remapper = new SimpleRemapper(classMap);
 
-            InputStream enclosingBytecode = null;
-            try {
-                enclosingBytecode = env.getClassfile(outer).getInputStream();
+            try (InputStream enclosingBytecode = env.getClassfile(outer).getInputStream()) {
                 final ClassReader reader = new ClassReader(enclosingBytecode);
                 reader.accept(new Remap(new WriteClass(reader), remapper, classMap, entry.getValue()), 0);
-            } finally {
-                IOUtils.closeQuietly(enclosingBytecode);
             }
             for (final String merged : entry.getValue().keySet()) {
                 if (env.deleteClassfile(merged)) {
@@ -422,7 +410,7 @@ public class Normalizer {
      */
     private Set<Class<?>> getBroadlyEligibleSubclasses(final Class<?> supertype, final Scanner scanner) {
         final ScanResult scanResult = scanner.scan(new ScanRequest().addSupertypes(supertype));
-        final Set<Class<?>> result = new LinkedHashSet<Class<?>>();
+        final Set<Class<?>> result = new LinkedHashSet<>();
         for (final WeavableClass<?> cls : scanResult.getClasses()) {
             final Class<?> subtype = cls.getTarget();
             final IneligibilityReason reason;
@@ -464,28 +452,18 @@ public class Normalizer {
      */
     private Map<Pair<String, String>, Set<ClassWrapper>> segregate(final Iterable<Class<?>> subtypes)
         throws IOException {
-        final Map<Pair<String, String>, Set<ClassWrapper>> classMap =
-            new LinkedHashMap<Pair<String, String>, Set<ClassWrapper>>();
+        final Map<Pair<String, String>, Set<ClassWrapper>> classMap = new LinkedHashMap<>();
         for (final Class<?> subtype : subtypes) {
             final Inspector inspector = new Inspector();
-            InputStream bytecode = null;
-            try {
-                bytecode = env.getClassfile(subtype).getInputStream();
+            try (InputStream bytecode = env.getClassfile(subtype).getInputStream()) {
                 new ClassReader(bytecode).accept(inspector, 0);
-            } finally {
-                IOUtils.closeQuietly(bytecode);
             }
             if (inspector.ignore()) {
                 continue;
             }
             if (inspector.valid()) {
-                final Pair<String, String> key = inspector.key();
-                Set<ClassWrapper> set = classMap.get(key);
-                if (set == null) {
-                    set = new LinkedHashSet<ClassWrapper>();
-                    classMap.put(key, set);
-                }
-                set.add(new ClassWrapper(subtype, inspector.mustRewriteConstructor()));
+                classMap.computeIfAbsent(inspector.key(), k -> new LinkedHashSet<>())
+                    .add(new ClassWrapper(subtype, inspector.mustRewriteConstructor()));
             } else {
                 env.debug("%s is ineligible for normalization due to %s", subtype,
                     IneligibilityReason.TOO_BUSY_CONSTRUCTOR);
@@ -522,10 +500,7 @@ public class Normalizer {
 
         env.debug("Copying class %s to %s", classWrapper.wrapped.getName(), result);
 
-        InputStream bytecode = null;
-
-        try {
-            bytecode = env.getClassfile(classWrapper.wrapped).getInputStream();
+        try (InputStream bytecode = env.getClassfile(classWrapper.wrapped).getInputStream()) {
             final ClassReader reader = new ClassReader(bytecode);
 
             final ClassVisitor writeClass = new WriteClass();
@@ -542,7 +517,6 @@ public class Normalizer {
                     final String superName, final String[] interfaces) {
                     supertype = Type.getObjectType(superName);
                     writeClass.visit(version, Opcodes.ACC_PUBLIC, result, signature, superName, interfaces);
-
                     visitAnnotation(Type.getType(Marker.class).getDescriptor(), false);
                 }
 
@@ -600,8 +574,6 @@ public class Normalizer {
                     writeClass.visitEnd();
                 }
             }, 0);
-        } finally {
-            IOUtils.closeQuietly(bytecode);
         }
         return result;
     }
@@ -614,13 +586,6 @@ public class Normalizer {
      */
     @SuppressWarnings("PMD.UseVarargs") //varargs not needed here
     private static Type[] toObjectTypes(final String[] types) {
-        if (types == null) {
-            return null;
-        }
-        final Type[] result = new Type[types.length];
-        for (int i = 0; i < types.length; i++) {
-            result[i] = Type.getObjectType(types[i]);
-        }
-        return result;
+        return types == null ? null : Stream.of(types).map(Type::getObjectType).toArray(Type[]::new);
     }
 }
diff --git a/modules/normalizer/src/main/java/org/apache/commons/weaver/normalizer/NormalizerWeaver.java b/modules/normalizer/src/main/java/org/apache/commons/weaver/normalizer/NormalizerWeaver.java
index 0b8693a..aa769ac 100644
--- a/modules/normalizer/src/main/java/org/apache/commons/weaver/normalizer/NormalizerWeaver.java
+++ b/modules/normalizer/src/main/java/org/apache/commons/weaver/normalizer/NormalizerWeaver.java
@@ -35,5 +35,4 @@ public class NormalizerWeaver implements Weaver {
     public boolean process(final WeaveEnvironment environment, final Scanner scanner) {
         return new Normalizer(environment).normalize(scanner);
     }
-
 }
diff --git a/modules/normalizer/src/main/java/org/apache/commons/weaver/normalizer/Utils.java b/modules/normalizer/src/main/java/org/apache/commons/weaver/normalizer/Utils.java
index 93d1bea..1192694 100644
--- a/modules/normalizer/src/main/java/org/apache/commons/weaver/normalizer/Utils.java
+++ b/modules/normalizer/src/main/java/org/apache/commons/weaver/normalizer/Utils.java
@@ -27,9 +27,6 @@ import org.apache.commons.lang3.Validate;
  * Normalization utilities.
  */
 final class Utils {
-    private Utils() {
-    }
-
     /**
      * Validate a package name.
      * @param pkg to validate
@@ -59,7 +56,6 @@ final class Utils {
             }
             Validate.isTrue(Character.isJavaIdentifierPart(chr), unexpected, chr, pos, result);
         }
-
         result = result.replace('.', '/');
         final int last = result.length() - 1;
         if (result.charAt(last) == '/') {
@@ -77,7 +73,7 @@ final class Utils {
      * @return {@link Set} of {@link Class}
      */
     static Set<Class<?>> parseTypes(final String types, final ClassLoader classLoader) {
-        final Set<Class<?>> result = new LinkedHashSet<Class<?>>();
+        final Set<Class<?>> result = new LinkedHashSet<>();
         for (final String token : StringUtils.splitByWholeSeparatorPreserveAllTokens(types, ",")) {
             try {
                 result.add(ClassUtils.getClass(classLoader, token.trim().replace('/', '.')));
@@ -87,4 +83,7 @@ final class Utils {
         }
         return result;
     }
+
+    private Utils() {
+    }
 }
diff --git a/modules/privilizer/weaver/pom.xml b/modules/privilizer/weaver/pom.xml
index 09eeb42..bef4e15 100644
--- a/modules/privilizer/weaver/pom.xml
+++ b/modules/privilizer/weaver/pom.xml
@@ -41,7 +41,6 @@ under the License.
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-weaver-privilizer-api</artifactId>
-      <version>${project.version}</version>
     </dependency>
     <dependency>
       <groupId>org.apache.commons</groupId>
@@ -90,7 +89,6 @@ under the License.
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-shade-plugin</artifactId>
-            <version>2.1</version>
             <executions>
               <execution>
                 <id>shade</id>
@@ -163,7 +161,6 @@ under the License.
     <plugins>
       <plugin>
         <artifactId>maven-invoker-plugin</artifactId>
-        <version>2.0.0</version>
         <configuration>
           <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
           <settingsFile>src/it/settings.xml</settingsFile>
diff --git a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/ActionGenerator.java b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/ActionGenerator.java
index a30fae8..20f2121 100644
--- a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/ActionGenerator.java
+++ b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/ActionGenerator.java
@@ -157,8 +157,7 @@ class ActionGenerator extends Privilizer.WriteClass implements Builder<Type> {
         final SignatureVisitor actionImplemented = type.visitInterface();
         actionImplemented.visitClassType(actionInterface.getInternalName());
         final SignatureVisitor visitTypeArgument = actionImplemented.visitTypeArgument('=');
-        final SignatureReader result = new SignatureReader(privilizer().wrap(methd.getReturnType()).getDescriptor());
-        result.accept(visitTypeArgument);
+        new SignatureReader(privilizer().wrap(methd.getReturnType()).getDescriptor()).accept(visitTypeArgument);
         actionImplemented.visitEnd();
 
         final String signature = type.toString();
@@ -194,7 +193,6 @@ class ActionGenerator extends Privilizer.WriteClass implements Builder<Type> {
             mgen.loadArg(arg++);
             mgen.putField(action, field.name, field.type);
         }
-
         mgen.returnValue();
         final Label end = mgen.mark();
 
@@ -219,16 +217,12 @@ class ActionGenerator extends Privilizer.WriteClass implements Builder<Type> {
             mgen.loadThis();
             mgen.getField(action, field.name, field.type);
         }
-
         mgen.invokeStatic(owner.target, helper);
 
         if (methd.getReturnType().getSort() < Type.ARRAY) {
             mgen.valueOf(methd.getReturnType());
         }
-
         mgen.returnValue();
-
         mgen.endMethod();
     }
-
 }
diff --git a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/BlueprintingVisitor.java b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/BlueprintingVisitor.java
index ba2108a..00a7049 100644
--- a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/BlueprintingVisitor.java
+++ b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/BlueprintingVisitor.java
@@ -31,7 +31,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.Validate;
 import org.apache.commons.lang3.mutable.MutableObject;
@@ -54,27 +53,27 @@ import org.objectweb.asm.tree.MethodNode;
  */
 class BlueprintingVisitor extends Privilizer.PrivilizerClassVisitor {
 
-    private final Set<Type> blueprintTypes = new HashSet<Type>();
-    private final Map<Pair<Type, Method>, MethodNode> blueprintRegistry = new HashMap<Pair<Type, Method>, MethodNode>();
+    private final Set<Type> blueprintTypes = new HashSet<>();
+    private final Map<Pair<Type, Method>, MethodNode> blueprintRegistry = new HashMap<>();
 
-    private final Map<Pair<Type, Method>, String> importedMethods = new HashMap<Pair<Type, Method>, String>();
+    private final Map<Pair<Type, Method>, String> importedMethods = new HashMap<>();
 
-    private final Map<Type, Map<Method, MethodNode>> methodCache = new HashMap<Type, Map<Method, MethodNode>>();
-    private final Map<Pair<Type, String>, FieldAccess> fieldAccessMap = new HashMap<Pair<Type, String>, FieldAccess>();
+    private final Map<Type, Map<Method, MethodNode>> methodCache = new HashMap<>();
+    private final Map<Pair<Type, String>, FieldAccess> fieldAccessMap = new HashMap<>();
 
-    private final ClassVisitor next;
+    private final ClassVisitor nextVisitor;
 
     /**
      * Create a new {@link BlueprintingVisitor}.
      * @param privilizer owner
-     * @param next wrapped
+     * @param nextVisitor wrapped
      * @param config annotation
      */
     BlueprintingVisitor(@SuppressWarnings("PMD.UnusedFormalParameter") final Privilizer privilizer, //false positive
-        final ClassVisitor next,
+        final ClassVisitor nextVisitor,
         final Privilizing config) {
         privilizer.super(new ClassNode(Opcodes.ASM5));
-        this.next = next;
+        this.nextVisitor = nextVisitor;
 
         // load up blueprint methods:
         for (final Privilizing.CallTo callTo : config.value()) {
@@ -104,9 +103,8 @@ class BlueprintingVisitor extends Privilizer.PrivilizerClassVisitor {
             return methodCache.get(type);
         }
         final ClassNode classNode = read(type.getClassName());
-        final Map<Method, MethodNode> result = new HashMap<Method, MethodNode>();
+        final Map<Method, MethodNode> result = new HashMap<>();
 
-        @SuppressWarnings("unchecked")
         final List<MethodNode> methods = classNode.methods;
 
         for (final MethodNode methodNode : methods) {
@@ -120,14 +118,10 @@ class BlueprintingVisitor extends Privilizer.PrivilizerClassVisitor {
 
     private ClassNode read(final String className) {
         final ClassNode result = new ClassNode(Opcodes.ASM5);
-        InputStream bytecode = null;
-        try {
-            bytecode = privilizer().env.getClassfile(className).getInputStream();
+        try (InputStream bytecode = privilizer().env.getClassfile(className).getInputStream();) {
             new ClassReader(bytecode).accept(result, ClassReader.SKIP_DEBUG | ClassReader.EXPAND_FRAMES);
         } catch (final Exception e) {
             throw new RuntimeException(e);
-        } finally {
-            IOUtils.closeQuietly(bytecode);
         }
         return result;
     }
@@ -168,10 +162,10 @@ class BlueprintingVisitor extends Privilizer.PrivilizerClassVisitor {
         final MethodNode source = getMethods(key.getLeft()).get(key.getRight());
 
         @SuppressWarnings("unchecked")
-        final String[] exceptions = (String[]) source.exceptions.toArray(ArrayUtils.EMPTY_STRING_ARRAY);
+        final String[] exceptions = ((List<String>) source.exceptions).toArray(ArrayUtils.EMPTY_STRING_ARRAY);
 
         // non-public fields accessed
-        final Set<FieldAccess> fieldAccesses = new LinkedHashSet<FieldAccess>();
+        final Set<FieldAccess> fieldAccesses = new LinkedHashSet<>();
 
         source.accept(new MethodVisitor(Opcodes.ASM5) {
             @Override
@@ -192,17 +186,14 @@ class BlueprintingVisitor extends Privilizer.PrivilizerClassVisitor {
         MethodVisitor mv = new NestedMethodInvocationHandler(withAccessibleAdvice, key.getLeft()); //NOPMD
 
         if (!fieldAccesses.isEmpty()) {
-            // accessesNonPublicFields = true;
-            mv = new AccessibleAdvisor(mv, access, result, source.desc, new ArrayList<FieldAccess>(fieldAccesses));
+            mv = new AccessibleAdvisor(mv, access, result, source.desc, new ArrayList<>(fieldAccesses));
         }
-
         source.accept(mv);
 
         // private can only be called by other privileged methods, so no need to mark as privileged
         if (!Modifier.isPrivate(source.access)) {
             withAccessibleAdvice.visitAnnotation(Type.getType(Privileged.class).getDescriptor(), false).visitEnd();
         }
-
         withAccessibleAdvice.accept(this.cv);
 
         return result;
@@ -212,16 +203,15 @@ class BlueprintingVisitor extends Privilizer.PrivilizerClassVisitor {
         final Pair<Type, String> key = Pair.of(owner, name);
         if (!fieldAccessMap.containsKey(key)) {
             try {
-                final MutableObject<Type> next = new MutableObject<Type>(owner);
-                final Deque<Type> stk = new ArrayDeque<Type>();
+                final MutableObject<Type> next = new MutableObject<>(owner);
+                final Deque<Type> stk = new ArrayDeque<>();
                 while (next.getValue() != null) {
                     stk.push(next.getValue());
-                    InputStream bytecode = null;
-                    try {
-                        bytecode = privilizer().env.getClassfile(next.getValue().getInternalName()).getInputStream();
+                    try (InputStream bytecode =
+                        privilizer().env.getClassfile(next.getValue().getInternalName()).getInputStream()) {
                         new ClassReader(bytecode).accept(privilizer().new PrivilizerClassVisitor() {
                             @Override
-                            @SuppressWarnings("PMD.UseVarargs") //overridden method
+                            @SuppressWarnings("PMD.UseVarargs") // overridden method
                             public void visit(final int version, final int access, final String name,
                                 final String signature, final String superName, final String[] interfaces) {
                                 super.visit(version, access, name, signature, superName, interfaces);
@@ -242,8 +232,6 @@ class BlueprintingVisitor extends Privilizer.PrivilizerClassVisitor {
                                 return null;
                             }
                         }, ClassReader.SKIP_CODE);
-                    } finally {
-                        IOUtils.closeQuietly(bytecode);
                     }
                     if (fieldAccessMap.containsKey(key)) {
                         break;
@@ -260,7 +248,7 @@ class BlueprintingVisitor extends Privilizer.PrivilizerClassVisitor {
     @Override
     public void visitEnd() {
         super.visitEnd();
-        ((ClassNode) cv).accept(next);
+        ((ClassNode) cv).accept(nextVisitor);
     }
 
     private abstract class MethodInvocationHandler extends MethodVisitor {
diff --git a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Field.java b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Field.java
index afa5915..8f9965e 100644
--- a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Field.java
+++ b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Field.java
@@ -18,7 +18,8 @@
  */
 package org.apache.commons.weaver.privilizer;
 
-import org.apache.commons.lang3.ObjectUtils;
+import java.util.Objects;
+
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.Validate;
 import org.objectweb.asm.Type;
@@ -60,7 +61,6 @@ public class Field {
      * @param obj to check for equality
      * @return whether equal
      */
-    @SuppressWarnings("deprecation")
     @Override
     public boolean equals(final Object obj) {
         if (obj == this) {
@@ -70,7 +70,7 @@ public class Field {
             return false;
         }
         final Field other = (Field) obj;
-        return StringUtils.equals(other.name, name) && ObjectUtils.equals(other.type, type);
+        return StringUtils.equals(other.name, name) && Objects.equals(other.type, type);
     }
 
     /**
@@ -79,10 +79,6 @@ public class Field {
      */
     @Override
     public int hashCode() {
-        int result = 57 << 2;
-        result |= name.hashCode();
-        result <<= 4;
-        result |= type.hashCode();
-        return result;
+        return Objects.hash(name, type);
     }
 }
diff --git a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/FieldAccess.java b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/FieldAccess.java
index ba5554c..cc1542e 100644
--- a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/FieldAccess.java
+++ b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/FieldAccess.java
@@ -67,5 +67,4 @@ public class FieldAccess extends Field {
         final int result = super.hashCode() << 4;
         return result | owner.hashCode();
     }
-
 }
diff --git a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Policy.java b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Policy.java
index cef9344..762e1d9 100644
--- a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Policy.java
+++ b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Policy.java
@@ -75,5 +75,4 @@ public enum Policy {
     public boolean isConditional() {
         return this == ON_INIT || this == DYNAMIC;
     }
-
 }
\ No newline at end of file
diff --git a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilizer.java b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilizer.java
index ffa839b..d1e7ab4 100644
--- a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilizer.java
+++ b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilizer.java
@@ -110,17 +110,12 @@ public class Privilizer {
             if (verify) {
                 verify(className, bytecode);
             }
-
             final DataSource classfile = env.getClassfile(className);
             env.debug("Writing class %s to resource %s", className, classfile.getName());
-            OutputStream outputStream = null;
-            try {
-                outputStream = classfile.getOutputStream();
+            try (OutputStream outputStream = classfile.getOutputStream()) {
                 IOUtils.write(bytecode, outputStream);
             } catch (final IOException e) {
                 throw new RuntimeException(e);
-            } finally {
-                IOUtils.closeQuietly(outputStream);
             }
         }
     }
@@ -201,9 +196,7 @@ public class Privilizer {
     void blueprint(final Class<?> type, final Privilizing privilizing) {
         final Object[] args = { type.getName(), privilizing };
         env.debug("blueprinting class %s %s", args);
-        InputStream bytecode = null;
-        try {
-            bytecode = env.getClassfile(type).getInputStream();
+        try (InputStream bytecode = env.getClassfile(type).getInputStream()) {
             final ClassReader classReader = new ClassReader(bytecode);
 
             ClassVisitor cvr;
@@ -214,27 +207,21 @@ public class Privilizer {
             classReader.accept(cvr, ClassReader.EXPAND_FRAMES);
         } catch (final Exception e) {
             throw new RuntimeException(e);
-        } finally {
-            IOUtils.closeQuietly(bytecode);
         }
     }
 
     void privilize(final Class<?> type) {
         final Object[] args = { type.getName() };
         env.debug("privilizing class %s", args);
-        InputStream bytecode = null;
-        try {
-            bytecode = env.getClassfile(type).getInputStream();
+        try (InputStream bytecode = env.getClassfile(type).getInputStream()) {
             final ClassReader classReader = new ClassReader(bytecode);
-            ClassVisitor cv; //NOPMD
+            ClassVisitor cv; // NOPMD
             cv = new WriteClass(classReader, ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS);
             cv = new PrivilizingVisitor(this, cv);
 
             classReader.accept(cv, ClassReader.EXPAND_FRAMES);
         } catch (final Exception e) {
             throw new RuntimeException(e);
-        } finally {
-            IOUtils.closeQuietly(bytecode);
         }
     }
 
@@ -255,7 +242,7 @@ public class Privilizer {
         Validate.validState(StringUtils.isBlank(error), error);
 
         final ClassVisitor checkInnerClasses = new ClassVisitor(Opcodes.ASM5, null) {
-            final Set<String> innerNames = new HashSet<String>();
+            final Set<String> innerNames = new HashSet<>();
 
             @Override
             public void visitInnerClass(final String name, final String outerName, final String innerName,
diff --git a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerCleaner.java b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerCleaner.java
index 1f6c799..4c45ffa 100644
--- a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerCleaner.java
+++ b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerCleaner.java
@@ -23,7 +23,6 @@ import java.lang.annotation.ElementType;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.commons.weaver.model.ScanRequest;
 import org.apache.commons.weaver.model.Scanner;
 import org.apache.commons.weaver.model.WeavableClass;
@@ -43,7 +42,7 @@ public class PrivilizerCleaner implements Cleaner {
     public boolean clean(final WeaveEnvironment environment, final Scanner scanner) {
         final Privilizer privilizer = new Privilizer(environment);
 
-        final List<String> toDelete = new ArrayList<String>();
+        final List<String> toDelete = new ArrayList<>();
 
         final ScanRequest scanRequest = new ScanRequest().add(WeaveInterest.of(Privilized.class, ElementType.TYPE));
 
@@ -56,13 +55,11 @@ public class PrivilizerCleaner implements Cleaner {
             final String className = weavableClass.getTarget().getName();
             environment.debug("Class %s privilized with %s; deleting.", className, privilizedPolicy);
 
-            InputStream bytecode = null;
-            try {
-                bytecode = privilizer.env.getClassfile(className).getInputStream();
+            try (InputStream bytecode = privilizer.env.getClassfile(className).getInputStream()) {
                 final ClassReader classReader = new ClassReader(bytecode);
                 classReader.accept(new ClassVisitor(Opcodes.ASM5) {
                     @Override
-                    @SuppressWarnings("PMD.UseVarargs") //overridden method
+                    @SuppressWarnings("PMD.UseVarargs") // overridden method
                     public void visit(final int version, final int access, final String name, final String signature,
                         final String superName, final String[] interfaces) {
                         toDelete.add(name);
@@ -78,8 +75,6 @@ public class PrivilizerCleaner implements Cleaner {
                 }, ClassReader.SKIP_CODE + ClassReader.SKIP_DEBUG + ClassReader.SKIP_FRAMES);
             } catch (final Exception e) {
                 throw new RuntimeException(e);
-            } finally {
-                IOUtils.closeQuietly(bytecode);
             }
         }
         boolean result = false;
diff --git a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerWeaver.java b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerWeaver.java
index e7e7149..44e53bb 100644
--- a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerWeaver.java
+++ b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerWeaver.java
@@ -38,7 +38,7 @@ public class PrivilizerWeaver implements Weaver {
     public boolean process(final WeaveEnvironment weaveEnvironment, final Scanner scanner) {
         final Privilizer privilizer = new Privilizer(weaveEnvironment);
 
-        final Set<Class<?>> privilizedTypes = new LinkedHashSet<Class<?>>();
+        final Set<Class<?>> privilizedTypes = new LinkedHashSet<>();
 
         // handle blueprints:
         for (final WeavableClass<?> type : scanner.scan(
diff --git a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizingVisitor.java b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizingVisitor.java
index ec4374c..8d4c1a5 100644
--- a/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizingVisitor.java
+++ b/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizingVisitor.java
@@ -42,7 +42,7 @@ import org.objectweb.asm.commons.StaticInitMerger;
  * ASM {@link ClassVisitor} to privilize {@link Privileged} methods.
  */
 class PrivilizingVisitor extends Privilizer.PrivilizerClassVisitor {
-    final Map<Method, String> privilegedMethods = new LinkedHashMap<Method, String>();
+    final Map<Method, String> privilegedMethods = new LinkedHashMap<>();
     boolean annotated;
     final Policy policy;
     final AccessLevel accessLevel;
@@ -148,7 +148,6 @@ class PrivilizingVisitor extends Privilizer.PrivilizerClassVisitor {
                 } else {
                     privilizer().env.debug("setting up unconditional privileged execution due to policy %s", policy);
                 }
-
                 // generate action:
                 final Type[] ctorArgs;
                 if (instanceMethod) {
@@ -190,7 +189,6 @@ class PrivilizingVisitor extends Privilizer.PrivilizerClassVisitor {
                     // throw
                     throwException();
                 }
-
                 // end original method
                 endMethod();
 
@@ -199,7 +197,6 @@ class PrivilizingVisitor extends Privilizer.PrivilizerClassVisitor {
                 mv.visitCode();
             }
         };
-
     }
 
     @Override
diff --git a/pom.xml b/pom.xml
index 0503308..c3bf4cc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -61,8 +61,8 @@ under the License.
 
     <!-- most Java-related items are defined in parent/pom.xml;
          define these here for the animal-sniffer config of commons-parent: -->
-    <maven.compiler.source>1.6</maven.compiler.source>
-    <maven.compiler.target>1.6</maven.compiler.target>
+    <maven.compiler.source>1.8</maven.compiler.source>
+    <maven.compiler.target>1.8</maven.compiler.target>
 
     <ant.version>1.9.4</ant.version>
     <asm.version>5.1</asm.version>
@@ -119,6 +119,11 @@ under the License.
           </configuration>
         </plugin>
         <plugin>
+	        <groupId>org.apache.maven.plugins</groupId>
+	        <artifactId>maven-shade-plugin</artifactId>
+	        <version>3.1.1</version>
+        </plugin>
+        <plugin>
           <groupId>org.apache.rat</groupId>
           <artifactId>apache-rat-plugin</artifactId>
           <configuration>
diff --git a/processor/src/main/java/org/apache/commons/weaver/CleanProcessor.java b/processor/src/main/java/org/apache/commons/weaver/CleanProcessor.java
index af4004d..0f9ad99 100644
--- a/processor/src/main/java/org/apache/commons/weaver/CleanProcessor.java
+++ b/processor/src/main/java/org/apache/commons/weaver/CleanProcessor.java
@@ -62,7 +62,7 @@ public class CleanProcessor extends ProcessorBase<Cleaner> {
      */
     public void clean() {
         if (!target.exists()) {
-            log.warning("Target directory " + target + " does not exist; nothing to do!");
+            log.warning(() -> String.format("Target directory %s does not exist; nothing to do!", target));
         }
         for (final Cleaner cleaner : providers) {
             final WeaveEnvironment env = new LocalWeaveEnvironment(target, classLoader, configuration,
diff --git a/processor/src/main/java/org/apache/commons/weaver/Finder.java b/processor/src/main/java/org/apache/commons/weaver/Finder.java
index f86d60a..548998e 100644
--- a/processor/src/main/java/org/apache/commons/weaver/Finder.java
+++ b/processor/src/main/java/org/apache/commons/weaver/Finder.java
@@ -33,9 +33,13 @@ import java.util.IdentityHashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.function.Supplier;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Predicate;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.Validate;
@@ -63,7 +67,7 @@ class Finder extends AnnotationFinder implements Scanner {
 
     private abstract class AnnotationInflater extends AnnotationCapturer {
         final Class<? extends Annotation> annotationType;
-        final Map<String, Object> elements = new LinkedHashMap<String, Object>();
+        final Map<String, Object> elements = new LinkedHashMap<>();
 
         AnnotationInflater(final String desc, final AnnotationVisitor wrapped) {
             super(wrapped);
@@ -136,7 +140,7 @@ class Finder extends AnnotationFinder implements Scanner {
         @Override
         public AnnotationVisitor visitArray(final String name) {
             final AnnotationCapturer owner = this;
-            final List<Object> values = new ArrayList<Object>();
+            final List<Object> values = new ArrayList<>();
             return new AnnotationCapturer(super.visitArray(name)) {
 
                 @Override
@@ -180,18 +184,7 @@ class Finder extends AnnotationFinder implements Scanner {
         @Override
         public void visitEnd() {
             super.visitEnd();
-            classfileAnnotationsFor(info).add(inflate());
-        }
-
-        private List<Annotation> classfileAnnotationsFor(final Info info) {
-            synchronized (CLASSFILE_ANNOTATIONS) {
-                if (!CLASSFILE_ANNOTATIONS.get().containsKey(info)) {
-                    final List<Annotation> result = new ArrayList<Annotation>();
-                    CLASSFILE_ANNOTATIONS.get().put(info, result);
-                    return result;
-                }
-            }
-            return CLASSFILE_ANNOTATIONS.get().get(info);
+            CLASSFILE_ANNOTATIONS.get().computeIfAbsent(info, k -> new ArrayList<>()).add(inflate());
         }
     }
 
@@ -361,36 +354,25 @@ class Finder extends AnnotationFinder implements Scanner {
         public T get() {
             return target;
         }
-
     }
 
     /**
      * Helper class for finding elements with annotations (including those with classfile-level retention).
      */
     public final class WithAnnotations {
-        private static final String INIT = "<init>";
-
         private WithAnnotations() {
         }
 
         public List<Annotated<Package>> findAnnotatedPackages(final Class<? extends Annotation> annotation) {
             Finder.this.findAnnotatedPackages(annotation);
-            final List<Annotated<Package>> result = new ArrayList<Annotated<Package>>();
-            for (final Info info : getAnnotationInfos(annotation.getName())) {
-                if (info instanceof PackageInfo) {
-                    final PackageInfo packageInfo = (PackageInfo) info;
-                    try {
-                        final IncludesClassfile<Package> annotated =
-                            new IncludesClassfile<Package>(packageInfo.get(), classfileAnnotationsFor(packageInfo));
-                        if (annotated.isAnnotationPresent(annotation)) {
-                            result.add(annotated);
-                        }
-                    } catch (final ClassNotFoundException e) {
-                        continue;
-                    }
+
+            return typed(PackageInfo.class, getAnnotationInfos(annotation.getName())::stream).map(packageInfo -> {
+                try {
+                    return new IncludesClassfile<>(packageInfo.get(), classfileAnnotationsFor(packageInfo));
+                } catch (ClassNotFoundException e) {
+                    return null;
                 }
-            }
-            return result;
+            }).filter(hasAnnotation(annotation)).collect(Collectors.toList());
         }
 
         /**
@@ -405,212 +387,138 @@ class Finder extends AnnotationFinder implements Scanner {
         public List<Annotated<Class<?>>> findAnnotatedClasses(final Class<? extends Annotation> annotation) {
             Finder.this.findAnnotatedClasses(annotation);
 
-            final List<Annotated<Class<?>>> annotatedClasses = annotate(getAnnotationInfos(annotation.getName()));
-            CollectionUtils.filter(annotatedClasses, new Predicate<Annotated<Class<?>>>() {
-
-                @Override
-                public boolean evaluate(final Annotated<Class<?>> annotatedClass) {
-                    return annotatedClass.isAnnotationPresent(annotation);
-                }
-            });
-            return annotatedClasses;
+            return annotate(getAnnotationInfos(annotation.getName())).stream().filter(hasAnnotation(annotation))
+                .collect(Collectors.toList());
         }
 
         private List<Annotated<Class<?>>> annotate(final Collection<? extends Info> infos) {
-            final List<Annotated<Class<?>>> result = new ArrayList<Annotated<Class<?>>>();
-            for (final Info info : infos) {
-                if (info instanceof ClassInfo) {
-                    final ClassInfo classInfo = (ClassInfo) info;
-
-                    try {
-                        result
-                            .add(new IncludesClassfile<Class<?>>(classInfo.get(), classfileAnnotationsFor(classInfo)));
-                    } catch (final ClassNotFoundException e) {
-                        continue;
-                    }
+            return typed(ClassInfo.class, infos::stream).map(classInfo -> {
+                try {
+                    return new IncludesClassfile<Class<?>>(classInfo.get(), classfileAnnotationsFor(classInfo));
+                } catch (ClassNotFoundException e1) {
+                    return null;
                 }
-            }
-            return result;
+            }).filter(Objects::nonNull).collect(Collectors.toList());
         }
 
         public List<Annotated<Class<?>>> findAssignableTypes(final Class<?> supertype) {
-            final List<Annotated<Class<?>>> result = new ArrayList<Annotated<Class<?>>>();
-            final List<?> assignableTypes;
-            if (supertype.isInterface()) {
-                assignableTypes = Finder.this.findImplementations(supertype);
-            } else {
-                assignableTypes = Finder.this.findSubclasses(supertype);
-            }
+            @SuppressWarnings({ "unchecked", "rawtypes" })
+            final List<Class<?>> assignableTypes = (List) (supertype.isInterface()
+                ? Finder.this.findImplementations(supertype) : Finder.this.findSubclasses(supertype));
 
-            for (final Object object : assignableTypes) {
-                final ClassInfo classInfo = classInfos.get(((Class<?>) object).getName());
-                final IncludesClassfile<Class<?>> annotated;
-                try {
-                    annotated = new IncludesClassfile<Class<?>>(classInfo.get(), classfileAnnotationsFor(classInfo));
-                } catch (final ClassNotFoundException e) {
-                    continue;
-                }
-                result.add(annotated);
-            }
-            return result;
+            return assignableTypes.stream().map(Class::getName).map(classInfos::get)
+                .<IncludesClassfile<Class<?>>> map(classInfo -> {
+                    try {
+                        return new IncludesClassfile<>(classInfo.get(), classfileAnnotationsFor(classInfo));
+                    } catch (final ClassNotFoundException e) {
+                        return null;
+                    }
+                }).filter(Objects::nonNull).collect(Collectors.toList());
         }
 
         public List<Annotated<Method>> findAnnotatedMethods(final Class<? extends Annotation> annotation) {
             Finder.this.findAnnotatedMethods(annotation);
-            final List<Annotated<Method>> result = new ArrayList<Annotated<Method>>();
-            for (final Info info : getAnnotationInfos(annotation.getName())) {
-                if (info instanceof MethodInfo) {
-                    final MethodInfo methodInfo = (MethodInfo) info;
-                    if (INIT.equals(methodInfo.getName())) {
-                        continue;
-                    }
-                    IncludesClassfile<Method> annotated;
+
+            return typed(MethodInfo.class, getAnnotationInfos(annotation.getName())::stream).filter(CTOR.negate())
+                .map(methodInfo -> {
                     try {
-                        annotated =
-                            new IncludesClassfile<Method>((Method) methodInfo.get(),
-                                classfileAnnotationsFor(methodInfo));
+                        return new IncludesClassfile<>((Method) methodInfo.get(),
+                            classfileAnnotationsFor(methodInfo));
                     } catch (final ClassNotFoundException e) {
-                        continue;
+                        return null;
                     }
-                    if (annotated.isAnnotationPresent(annotation)) {
-                        result.add(annotated);
-                    }
-                }
-            }
-            return result;
-
+                }).filter(hasAnnotation(annotation)).collect(Collectors.toList());
         }
 
         public List<Annotated<Parameter<Method>>> findAnnotatedMethodParameters(
             final Class<? extends Annotation> annotationType) {
             Finder.this.findAnnotatedMethodParameters(annotationType);
-            final List<Annotated<Parameter<Method>>> result = new ArrayList<Annotated<Parameter<Method>>>();
-            for (final Info info : getAnnotationInfos(annotationType.getName())) {
-                if (info instanceof ParameterInfo) {
-                    final ParameterInfo parameterInfo = (ParameterInfo) info;
-                    if (INIT.equals(parameterInfo.getDeclaringMethod().getName())) {
-                        continue;
-                    }
-                    Parameter<Method> parameter;
+
+            return typed(ParameterInfo.class, getAnnotationInfos(annotationType.getName())::stream)
+                .filter(isCtor(ParameterInfo::getDeclaringMethod).negate()).map(parameterInfo -> {
                     try {
                         @SuppressWarnings("unchecked")
-                        final Parameter<Method> unchecked = (Parameter<Method>) parameterInfo.get();
-                        parameter = unchecked;
+                        final Parameter<Method> parameter = (Parameter<Method>) parameterInfo.get();
+                        return new IncludesClassfile<>(parameter, classfileAnnotationsFor(parameterInfo));
                     } catch (final ClassNotFoundException e) {
-                        continue;
-                    }
-                    final IncludesClassfile<Parameter<Method>> annotated =
-                        new IncludesClassfile<Parameter<Method>>(parameter, classfileAnnotationsFor(parameterInfo));
-                    if (annotated.isAnnotationPresent(annotationType)) {
-                        result.add(annotated);
+                        return null;
                     }
-                }
-            }
-            return result;
+                }).filter(hasAnnotation(annotationType)).collect(Collectors.toList());
         }
 
         public List<Annotated<Constructor<?>>> findAnnotatedConstructors(final Class<? extends Annotation> annotation) {
             Finder.this.findAnnotatedConstructors(annotation);
-            final List<Annotated<Constructor<?>>> result = new ArrayList<Annotated<Constructor<?>>>();
-            for (final Info info : getAnnotationInfos(annotation.getName())) {
-                if (info instanceof MethodInfo) {
-                    final MethodInfo methodInfo = (MethodInfo) info;
-                    if (!INIT.equals(methodInfo.getName())) {
-                        continue;
-                    }
-                    final IncludesClassfile<Constructor<?>> annotated;
+
+            return typed(MethodInfo.class, getAnnotationInfos(annotation.getName())::stream).filter(CTOR)
+                .map(methodInfo -> {
                     try {
-                        annotated =
-                            new IncludesClassfile<Constructor<?>>((Constructor<?>) methodInfo.get(),
-                                classfileAnnotationsFor(methodInfo));
+                        final IncludesClassfile<Constructor<?>> annotated = new IncludesClassfile<>(
+                            (Constructor<?>) methodInfo.get(), classfileAnnotationsFor(methodInfo));
+                        return annotated;
                     } catch (final ClassNotFoundException e) {
-                        continue;
-                    }
-                    if (annotated.isAnnotationPresent(annotation)) {
-                        result.add(annotated);
+                        return null;
                     }
-                }
-            }
-            return result;
+                }).filter(hasAnnotation(annotation)).collect(Collectors.toList());
         }
 
         public List<Annotated<Parameter<Constructor<?>>>> findAnnotatedConstructorParameters(
             final Class<? extends Annotation> annotation) {
             Finder.this.findAnnotatedConstructorParameters(annotation);
-            final List<Annotated<Parameter<Constructor<?>>>> result =
-                new ArrayList<Annotated<Parameter<Constructor<?>>>>();
-            for (final Info info : getAnnotationInfos(annotation.getName())) {
-                if (info instanceof ParameterInfo) {
-                    final ParameterInfo parameterInfo = (ParameterInfo) info;
-                    if (!INIT.equals(parameterInfo.getDeclaringMethod().getName())) {
-                        continue;
-                    }
-                    Parameter<Constructor<?>> parameter;
+
+            return typed(ParameterInfo.class, getAnnotationInfos(annotation.getName())::stream)
+                .filter(isCtor(ParameterInfo::getDeclaringMethod)).map(parameterInfo -> {
                     try {
                         @SuppressWarnings("unchecked")
-                        final Parameter<Constructor<?>> unchecked = (Parameter<Constructor<?>>) parameterInfo.get();
-                        parameter = unchecked;
+                        final Parameter<Constructor<?>> parameter = (Parameter<Constructor<?>>) parameterInfo.get();
+                        return new IncludesClassfile<>(parameter, classfileAnnotationsFor(parameterInfo));
                     } catch (final ClassNotFoundException e) {
-                        continue;
+                        return null;
                     }
-                    final IncludesClassfile<Parameter<Constructor<?>>> annotated =
-                        new IncludesClassfile<Parameter<Constructor<?>>>(parameter,
-                            classfileAnnotationsFor(parameterInfo));
-                    if (annotated.isAnnotationPresent(annotation)) {
-                        result.add(annotated);
-                    }
-                }
-            }
-            return result;
+                }).filter(hasAnnotation(annotation)).collect(Collectors.toList());
         }
 
         public List<Annotated<Field>> findAnnotatedFields(final Class<? extends Annotation> annotation) {
             Finder.this.findAnnotatedFields(annotation);
-            final List<Annotated<Field>> result = new ArrayList<Annotated<Field>>();
-            for (final Info info : getAnnotationInfos(annotation.getName())) {
-                if (info instanceof FieldInfo) {
-                    final FieldInfo fieldInfo = (FieldInfo) info;
-                    try {
-                        final IncludesClassfile<Field> annotated =
-                            new IncludesClassfile<Field>((Field) fieldInfo.get(), classfileAnnotationsFor(fieldInfo));
-                        if (annotated.isAnnotationPresent(annotation)) {
-                            result.add(annotated);
-                        }
-                    } catch (final ClassNotFoundException e) {
-                        continue;
-                    }
+
+            return typed(FieldInfo.class, getAnnotationInfos(annotation.getName())::stream).map(fieldInfo -> {
+                try {
+                    return new IncludesClassfile<>((Field) fieldInfo.get(), classfileAnnotationsFor(fieldInfo));
+                } catch (final ClassNotFoundException e) {
+                    return null;
                 }
-            }
-            return result;
+            }).filter(hasAnnotation(annotation)).collect(Collectors.toList());
         }
 
         private List<Annotation> classfileAnnotationsFor(final Info info) {
-            synchronized (classfileAnnotations) {
-                if (!classfileAnnotations.containsKey(info)) {
-                    final List<Annotation> result = new ArrayList<Annotation>();
-                    classfileAnnotations.put(info, result);
-                    return result;
-                }
-            }
-            return classfileAnnotations.get(info);
+            return classfileAnnotations.computeIfAbsent(info, k -> new ArrayList<>());
         }
-
     }
 
     private static final int ASM_FLAGS = ClassReader.SKIP_CODE + ClassReader.SKIP_DEBUG + ClassReader.SKIP_FRAMES;
 
+    private static final String INIT = "<init>";
+
+    private static final Predicate<MethodInfo> CTOR = methodInfo -> INIT.equals(methodInfo.getName());
+
     /**
      * The {@link #classfileAnnotations} member stores these; however the scanning takes place in the scope of the super
      * constructor call, thus there is no opportunity to set the reference beforehand. To work around this, we use a
      * static ThreadLocal with an initializer and pull/clear its value when we return from the super constructor. :P
      */
     private static final ThreadLocal<Map<Info, List<Annotation>>> CLASSFILE_ANNOTATIONS =
-        new ThreadLocal<Map<Info, List<Annotation>>>() {
-            @Override
-            protected Map<Info, List<Annotation>> initialValue() {
-                return new IdentityHashMap<AnnotationFinder.Info, List<Annotation>>();
-            }
-        };
+        ThreadLocal.withInitial(IdentityHashMap::new);
+
+    private static <T, U> Stream<U> typed(Class<U> type, Supplier<Stream<T>> stream) {
+        return stream.get().filter(type::isInstance).map(type::cast);
+    }
+
+    private static Predicate<Annotated<?>> hasAnnotation(Class<? extends Annotation> annotation) {
+        return annotated -> annotated != null && annotated.isAnnotationPresent(annotation);
+    }
+
+    private static <T> Predicate<T> isCtor(Function<? super T, MethodInfo> xform) {
+        return t -> CTOR.test(xform.apply(t));
+    }
 
     private final WithAnnotations withAnnotations = new WithAnnotations();
     private final Map<Info, List<Annotation>> classfileAnnotations;
@@ -643,8 +551,7 @@ class Finder extends AnnotationFinder implements Scanner {
     @Override
     protected void readClassDef(final InputStream bytecode) throws IOException {
         try {
-            final ClassReader classReader = new ClassReader(bytecode);
-            classReader.accept(new Visitor(new InfoBuildingVisitor()), ASM_FLAGS);
+            new ClassReader(bytecode).accept(new Visitor(new InfoBuildingVisitor()), ASM_FLAGS);
         } finally {
             bytecode.close();
         }
@@ -737,11 +644,9 @@ class Finder extends AnnotationFinder implements Scanner {
                     break;
                 }
             }
-            for (final Class<?> supertype : request.getSupertypes()) {
-                for (final Annotated<Class<?>> type : this.withAnnotations().findAssignableTypes(supertype)) {
-                    result.getWeavable(type.get()).addAnnotations(type.getAnnotations());
-                }
-            }
+            request.getSupertypes().stream().map(this.withAnnotations()::findAssignableTypes)
+                .flatMap(Collection::stream)
+                .forEach(type -> result.getWeavable(type.get()).addAnnotations(type.getAnnotations()));
         }
         return inflater.inflate(result);
     }
diff --git a/processor/src/main/java/org/apache/commons/weaver/Inflater.java b/processor/src/main/java/org/apache/commons/weaver/Inflater.java
index 0b1dae4..c5b6137 100644
--- a/processor/src/main/java/org/apache/commons/weaver/Inflater.java
+++ b/processor/src/main/java/org/apache/commons/weaver/Inflater.java
@@ -19,9 +19,10 @@
 package org.apache.commons.weaver;
 
 import java.lang.annotation.Annotation;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
 
 import org.apache.commons.weaver.model.ScanResult;
 import org.apache.commons.weaver.model.WeavableClass;
@@ -43,7 +44,7 @@ import org.apache.xbean.finder.Parameter;
  * Adds all classfile annotations to a ScanResult.
  */
 class Inflater {
-    private class InfoMatcher {
+    private class InfoMatcher implements Predicate<Info> {
         final Class<? extends Info> type;
 
         InfoMatcher(final Class<? extends Info> type) {
@@ -51,10 +52,9 @@ class Inflater {
             this.type = type;
         }
 
-        boolean test(final Info info) {
+        public boolean test(final Info info) {
             return type.isInstance(info);
         }
-
     }
 
     private class MethodMatcher extends InfoMatcher {
@@ -66,7 +66,7 @@ class Inflater {
         }
 
         @Override
-        boolean test(final Info info) {
+        public boolean test(final Info info) {
             return super.test(info) && ((MethodInfo) info).isConstructor() == isCtor;
         }
     }
@@ -80,7 +80,7 @@ class Inflater {
         }
 
         @Override
-        boolean test(final Info info) {
+        public boolean test(final Info info) {
             return super.test(info) && ((ParameterInfo) info).getDeclaringMethod().isConstructor() == isCtor;
         }
     }
@@ -107,94 +107,82 @@ class Inflater {
 
     static <I extends Info> Map<I, List<Annotation>> subMap(final Map<Info, List<Annotation>> source,
         final InfoMatcher matcher) {
-        final HashMap<I, List<Annotation>> result = new HashMap<I, List<Annotation>>();
-        for (final Map.Entry<Info, List<Annotation>> entry : source.entrySet()) {
-            if (matcher.test(entry.getKey())) {
-                @SuppressWarnings("unchecked")
-                final I key = (I) entry.getKey();
-                result.put(key, entry.getValue());
-            }
-        }
+        @SuppressWarnings("unchecked")
+        final Map<I, List<Annotation>> result = source.entrySet().stream().filter(e -> matcher.test(e.getKey()))
+            .collect(Collectors.toMap(t -> (I) t.getKey(), Map.Entry::getValue));
+
         return result;
     }
 
     ScanResult inflate(final ScanResult scanResult) {
         for (final WeavablePackage pkg : scanResult.getPackages()) {
-            for (final Map.Entry<PackageInfo, List<Annotation>> entry : packageAnnotations.entrySet()) {
-                if (entry.getKey().getName().equals(pkg.getTarget().getName())) {
-                    pkg.addAnnotations(entry.getValue());
+            packageAnnotations.forEach((k, v) -> {
+                if (k.getName().equals(pkg.getTarget().getName())) {
+                    pkg.addAnnotations(v);
                 }
-            }
+            });
             for (final WeavableClass<?> cls : pkg.getClasses()) {
-                for (final Map.Entry<ClassInfo, List<Annotation>> entry : classAnnotations.entrySet()) {
-                    if (entry.getKey().getName().equals(cls.getTarget().getName())) {
-                        cls.addAnnotations(entry.getValue());
+                classAnnotations.forEach((k, v) -> {
+                    if (k.getName().equals(cls.getTarget().getName())) {
+                        cls.addAnnotations(v);
                     }
-                }
+                });
                 for (final WeavableField<?> fld : cls.getFields()) {
-                    for (final Map.Entry<FieldInfo, List<Annotation>> entry : fieldAnnotations.entrySet()) {
+                    fieldAnnotations.forEach((k, v) -> {
                         try {
-                            if (entry.getKey().get().equals(fld.getTarget())) {
-                                fld.addAnnotations(entry.getValue());
+                            if (k.get().equals(fld.getTarget())) {
+                                fld.addAnnotations(v);
                             }
                         } catch (final ClassNotFoundException cnfe) {
-                            continue;
                         }
-                    }
+                    });
                 }
                 for (final WeavableConstructor<?> ctor : cls.getConstructors()) {
-                    for (final Map.Entry<MethodInfo, List<Annotation>> entry : ctorAnnotations.entrySet()) {
+                    ctorAnnotations.forEach((k, v) -> {
                         try {
-                            if (entry.getKey().get().equals(ctor.getTarget())) {
-                                ctor.addAnnotations(entry.getValue());
+                            if (k.get().equals(ctor.getTarget())) {
+                                ctor.addAnnotations(v);
                             }
                         } catch (final ClassNotFoundException cnfe) {
-                            continue;
                         }
-                    }
+                    });
                     for (final WeavableConstructorParameter<?> param : ctor.getParameters()) {
-                        for (final Map.Entry<ParameterInfo, List<Annotation>> entry : ctorParameterAnnotations
-                            .entrySet()) {
+                        ctorParameterAnnotations.forEach((k, v) -> {
                             try {
-                                final Parameter<?> parameter = entry.getKey().get();
+                                final Parameter<?> parameter = k.get();
                                 if (parameter.getDeclaringExecutable().equals(ctor.getTarget())
                                     && param.getTarget().intValue() == parameter.getIndex()) {
-                                    param.addAnnotations(entry.getValue());
+                                    param.addAnnotations(v);
                                 }
                             } catch (final ClassNotFoundException cnfe) {
-                                continue;
                             }
-                        }
+                        });
                     }
                 }
                 for (final WeavableMethod<?> methd : cls.getMethods()) {
-                    for (final Map.Entry<MethodInfo, List<Annotation>> entry : methodAnnotations.entrySet()) {
+                    methodAnnotations.forEach((k, v) -> {
                         try {
-                            if (entry.getKey().get().equals(methd.getTarget())) {
-                                methd.addAnnotations(entry.getValue());
+                            if (k.get().equals(methd.getTarget())) {
+                                methd.addAnnotations(v);
                             }
                         } catch (final ClassNotFoundException cnfe) {
-                            continue;
                         }
-                    }
+                    });
                     for (final WeavableMethodParameter<?> param : methd.getParameters()) {
-                        for (final Map.Entry<ParameterInfo, List<Annotation>> entry : methodParameterAnnotations
-                            .entrySet()) {
+                        methodParameterAnnotations.forEach((k, v) -> {
                             try {
-                                final Parameter<?> parameter = entry.getKey().get();
+                                final Parameter<?> parameter = k.get();
                                 if (parameter.getDeclaringExecutable().equals(methd.getTarget())
                                     && param.getTarget().intValue() == parameter.getIndex()) {
-                                    param.addAnnotations(entry.getValue());
+                                    param.addAnnotations(v);
                                 }
                             } catch (final ClassNotFoundException cnfe) {
-                                continue;
                             }
-                        }
+                        });
                     }
                 }
             }
         }
         return scanResult;
     }
-
 }
diff --git a/processor/src/main/java/org/apache/commons/weaver/ProcessorBase.java b/processor/src/main/java/org/apache/commons/weaver/ProcessorBase.java
index 1248821..ee449ac 100755
--- a/processor/src/main/java/org/apache/commons/weaver/ProcessorBase.java
+++ b/processor/src/main/java/org/apache/commons/weaver/ProcessorBase.java
@@ -52,7 +52,7 @@ class ProcessorBase<P extends WeaveLifecycleProvider<?>> {
      */
     static <T> Iterable<T> getServiceInstances(final Class<T> type) {
         Validate.notNull(type);
-        final List<T> result = new ArrayList<T>();
+        final List<T> result = new ArrayList<>();
         final ClassLoader typeLoader = type.getClassLoader();
         if (!Thread.currentThread().getContextClassLoader().equals(typeLoader)) {
             for (final T t : ServiceLoader.load(type, typeLoader)) {
@@ -120,7 +120,7 @@ class ProcessorBase<P extends WeaveLifecycleProvider<?>> {
     }
 
     private ClassLoader createClassLoader() {
-        final Set<String> finderClasspath = new LinkedHashSet<String>();
+        final Set<String> finderClasspath = new LinkedHashSet<>();
         finderClasspath.add(target.getAbsolutePath());
         finderClasspath.addAll(classpath);
         return new URLClassLoader(URLArray.fromPaths(finderClasspath));
diff --git a/processor/src/main/java/org/apache/commons/weaver/WeaveProcessor.java b/processor/src/main/java/org/apache/commons/weaver/WeaveProcessor.java
index d77dd93..5624c4e 100644
--- a/processor/src/main/java/org/apache/commons/weaver/WeaveProcessor.java
+++ b/processor/src/main/java/org/apache/commons/weaver/WeaveProcessor.java
@@ -62,7 +62,7 @@ public class WeaveProcessor extends ProcessorBase<Weaver> {
      */
     public void weave() {
         if (!target.exists()) {
-            log.warning("Target directory " + target + " does not exist; nothing to do!");
+            log.warning(() -> String.format("Target directory %s does not exist; nothing to do!", target));
         }
         for (final Weaver weaver : providers) {
             final WeaveEnvironment env = new LocalWeaveEnvironment(target, classLoader, configuration,
diff --git a/processor/src/main/java/org/apache/commons/weaver/model/ScanRequest.java b/processor/src/main/java/org/apache/commons/weaver/model/ScanRequest.java
index 06638b4..1c4cb17 100644
--- a/processor/src/main/java/org/apache/commons/weaver/model/ScanRequest.java
+++ b/processor/src/main/java/org/apache/commons/weaver/model/ScanRequest.java
@@ -35,8 +35,8 @@ import org.apache.commons.weaver.spi.Weaver;
  */
 public class ScanRequest {
 
-    private final List<WeaveInterest> interests = new ArrayList<WeaveInterest>();
-    private final Set<Class<?>> supertypes = new LinkedHashSet<Class<?>>();
+    private final List<WeaveInterest> interests = new ArrayList<>();
+    private final Set<Class<?>> supertypes = new LinkedHashSet<>();
 
     /**
      * Register a {@link WeaveInterest}.
diff --git a/processor/src/main/java/org/apache/commons/weaver/model/ScanResult.java b/processor/src/main/java/org/apache/commons/weaver/model/ScanResult.java
index fdaf892..7f3ce0e 100644
--- a/processor/src/main/java/org/apache/commons/weaver/model/ScanResult.java
+++ b/processor/src/main/java/org/apache/commons/weaver/model/ScanResult.java
@@ -111,7 +111,7 @@ public class ScanResult {
 
         @Override
         public AnnotatedElements<CHILD> with(final Class<? extends Annotation> annotationType) {
-            return new AnnotatedWith<CHILD>(this, annotationType);
+            return new AnnotatedWith<>(this, annotationType);
         }
     }
 
@@ -167,13 +167,13 @@ public class ScanResult {
 
         @Override
         public AnnotatedElements<W> with(final Class<? extends Annotation> annotationType) {
-            return new AnnotatedWith<W>(this, annotationType);
+            return new AnnotatedWith<>(this, annotationType);
         }
 
     }
 
     private final ConcurrentNavigableMap<String, WeavablePackage> packages =
-        new ConcurrentSkipListMap<String, WeavablePackage>();
+        new ConcurrentSkipListMap<>();
 
     /**
      * Public for use by {@link WeaveProcessor}.
@@ -242,7 +242,7 @@ public class ScanResult {
 
             @Override
             public AnnotatedElements<WeavablePackage> with(final Class<? extends Annotation> annotationType) {
-                return new AnnotatedWith<WeavablePackage>(packages.values(), annotationType);
+                return new AnnotatedWith<>(packages.values(), annotationType);
             }
         };
     }
@@ -400,5 +400,4 @@ public class ScanResult {
             }
         };
     }
-
 }
diff --git a/processor/src/main/java/org/apache/commons/weaver/model/Weavable.java b/processor/src/main/java/org/apache/commons/weaver/model/Weavable.java
index fb756ca..37bc4b1 100644
--- a/processor/src/main/java/org/apache/commons/weaver/model/Weavable.java
+++ b/processor/src/main/java/org/apache/commons/weaver/model/Weavable.java
@@ -74,7 +74,7 @@ public abstract class Weavable<SELF extends Weavable<SELF, TARGET>, TARGET> impl
         }
         synchronized (this) {
             if (annotations == null) {
-                annotations = new LinkedHashSet<Annotation>();
+                annotations = new LinkedHashSet<>();
             }
             boolean result = false;
             for (final Annotation ann : toAdd) {
diff --git a/processor/src/main/java/org/apache/commons/weaver/model/WeavableClass.java b/processor/src/main/java/org/apache/commons/weaver/model/WeavableClass.java
index 38f579e..9d78a7a 100644
--- a/processor/src/main/java/org/apache/commons/weaver/model/WeavableClass.java
+++ b/processor/src/main/java/org/apache/commons/weaver/model/WeavableClass.java
@@ -22,7 +22,6 @@ import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.concurrent.ConcurrentNavigableMap;
 import java.util.concurrent.ConcurrentSkipListMap;
 
@@ -34,26 +33,15 @@ import org.apache.commons.weaver.utils.Args;
  * @param <T> type
  */
 public class WeavableClass<T> extends NestedWeavable<WeavableClass<T>, Class<T>, WeavablePackage, Package> {
-    private final ConcurrentNavigableMap<String, WeavableField<T>> fields =
-        new ConcurrentSkipListMap<String, WeavableField<T>>();
+    private final ConcurrentNavigableMap<String, WeavableField<T>> fields = new ConcurrentSkipListMap<>();
 
-    private final ConcurrentNavigableMap<Constructor<T>, WeavableConstructor<T>> ctors =
-        new ConcurrentSkipListMap<Constructor<T>, WeavableConstructor<T>>(new Comparator<Constructor<?>>() {
-
-            @Override
-            public int compare(final Constructor<?> ctor1, final Constructor<?> ctor2) {
-                return Args.compare(ctor1.getParameterTypes(), ctor2.getParameterTypes());
-            }
-        });
+    private final ConcurrentNavigableMap<Constructor<T>, WeavableConstructor<T>> ctors = new ConcurrentSkipListMap<>(
+        (ctor1, ctor2) -> Args.compare(ctor1.getParameterTypes(), ctor2.getParameterTypes()));
 
     private final ConcurrentNavigableMap<Method, WeavableMethod<T>> methods =
-        new ConcurrentSkipListMap<Method, WeavableMethod<T>>(new Comparator<Method>() {
-
-            @Override
-            public int compare(final Method methd1, final Method methd2) {
-                final int result = methd1.getName().compareTo(methd2.getName());
-                return result == 0 ? Args.compare(methd1.getParameterTypes(), methd2.getParameterTypes()) : result;
-            }
+        new ConcurrentSkipListMap<>((methd1, methd2) -> {
+            final int result = methd1.getName().compareTo(methd2.getName());
+            return result == 0 ? Args.compare(methd1.getParameterTypes(), methd2.getParameterTypes()) : result;
         });
 
     /**
@@ -73,10 +61,9 @@ public class WeavableClass<T> extends NestedWeavable<WeavableClass<T>, Class<T>,
     public WeavableField<T> getWeavable(final Field fld) {
         final String key = fld.getName();
         if (fields.containsKey(key)) {
-            final WeavableField<T> result = fields.get(key);
-            return result;
+            return fields.get(key);
         }
-        final WeavableField<T> result = new WeavableField<T>(fld, this);
+        final WeavableField<T> result = new WeavableField<>(fld, this);
         final WeavableField<T> faster = fields.putIfAbsent(key, result);
         return faster == null ? result : faster;
     }
@@ -88,10 +75,9 @@ public class WeavableClass<T> extends NestedWeavable<WeavableClass<T>, Class<T>,
      */
     public WeavableMethod<T> getWeavable(final Method methd) {
         if (methods.containsKey(methd)) {
-            final WeavableMethod<T> result = methods.get(methd);
-            return result;
+            return methods.get(methd);
         }
-        final WeavableMethod<T> result = new WeavableMethod<T>(methd, this);
+        final WeavableMethod<T> result = new WeavableMethod<>(methd, this);
         final WeavableMethod<T> faster = methods.putIfAbsent(methd, result);
         return faster == null ? result : faster;
     }
@@ -103,10 +89,9 @@ public class WeavableClass<T> extends NestedWeavable<WeavableClass<T>, Class<T>,
      */
     public WeavableConstructor<T> getWeavable(final Constructor<T> ctor) {
         if (ctors.containsKey(ctor)) {
-            final WeavableConstructor<T> result = ctors.get(ctor);
-            return result;
+            return ctors.get(ctor);
         }
-        final WeavableConstructor<T> result = new WeavableConstructor<T>(ctor, this);
+        final WeavableConstructor<T> result = new WeavableConstructor<>(ctor, this);
         final WeavableConstructor<T> faster = ctors.putIfAbsent(ctor, result);
         return faster == null ? result : faster;
     }
diff --git a/processor/src/main/java/org/apache/commons/weaver/model/WeavableConstructor.java b/processor/src/main/java/org/apache/commons/weaver/model/WeavableConstructor.java
index 79c1cb0..1a75c7b 100644
--- a/processor/src/main/java/org/apache/commons/weaver/model/WeavableConstructor.java
+++ b/processor/src/main/java/org/apache/commons/weaver/model/WeavableConstructor.java
@@ -52,5 +52,4 @@ public class WeavableConstructor<T> extends
     protected WeavableConstructorParameter<T> createParameter(final int index) {
         return new WeavableConstructorParameter<T>(Integer.valueOf(index), this);
     }
-
 }
diff --git a/processor/src/main/java/org/apache/commons/weaver/model/WeavableConstructorParameter.java b/processor/src/main/java/org/apache/commons/weaver/model/WeavableConstructorParameter.java
index 5ca5cc9..0b5c3d8 100644
--- a/processor/src/main/java/org/apache/commons/weaver/model/WeavableConstructorParameter.java
+++ b/processor/src/main/java/org/apache/commons/weaver/model/WeavableConstructorParameter.java
@@ -36,5 +36,4 @@ public class WeavableConstructorParameter<T> extends
     public WeavableConstructorParameter(final Integer target, final WeavableConstructor<T> parent) {
         super(target, parent);
     }
-
 }
diff --git a/processor/src/main/java/org/apache/commons/weaver/model/WeavableExecutable.java b/processor/src/main/java/org/apache/commons/weaver/model/WeavableExecutable.java
index 4a8b90f..d7df972 100644
--- a/processor/src/main/java/org/apache/commons/weaver/model/WeavableExecutable.java
+++ b/processor/src/main/java/org/apache/commons/weaver/model/WeavableExecutable.java
@@ -49,7 +49,7 @@ public abstract class WeavableExecutable
      */
     protected WeavableExecutable(final TARGET target, final WeavableClass<T> parent) {
         super(target, parent);
-        final List<P> params = new ArrayList<P>();
+        final List<P> params = new ArrayList<>();
         final int paramCount = getParameterTypes().length;
         for (int i = 0; i < paramCount; i++) {
             params.add(createParameter(i));
@@ -94,5 +94,4 @@ public abstract class WeavableExecutable
     public Iterable<P> getParameters() {
         return parameters;
     }
-
 }
diff --git a/processor/src/main/java/org/apache/commons/weaver/model/WeavableMethod.java b/processor/src/main/java/org/apache/commons/weaver/model/WeavableMethod.java
index eb79dec..1c80853 100644
--- a/processor/src/main/java/org/apache/commons/weaver/model/WeavableMethod.java
+++ b/processor/src/main/java/org/apache/commons/weaver/model/WeavableMethod.java
@@ -58,6 +58,6 @@ public class WeavableMethod<T> extends WeavableExecutable<WeavableMethod<T>, Met
      */
     @Override
     protected WeavableMethodParameter<T> createParameter(final int index) {
-        return new WeavableMethodParameter<T>(Integer.valueOf(index), this);
+        return new WeavableMethodParameter<>(Integer.valueOf(index), this);
     }
 }
diff --git a/processor/src/main/java/org/apache/commons/weaver/model/WeavableMethodParameter.java b/processor/src/main/java/org/apache/commons/weaver/model/WeavableMethodParameter.java
index 642119a..19bf38e 100644
--- a/processor/src/main/java/org/apache/commons/weaver/model/WeavableMethodParameter.java
+++ b/processor/src/main/java/org/apache/commons/weaver/model/WeavableMethodParameter.java
@@ -36,5 +36,4 @@ public class WeavableMethodParameter<T> extends
     public WeavableMethodParameter(final Integer target, final WeavableMethod<T> parent) {
         super(target, parent);
     }
-
 }
diff --git a/processor/src/main/java/org/apache/commons/weaver/model/WeavablePackage.java b/processor/src/main/java/org/apache/commons/weaver/model/WeavablePackage.java
index 993ac26..e1a5c9a 100644
--- a/processor/src/main/java/org/apache/commons/weaver/model/WeavablePackage.java
+++ b/processor/src/main/java/org/apache/commons/weaver/model/WeavablePackage.java
@@ -27,8 +27,7 @@ import java.util.concurrent.ConcurrentSkipListMap;
  */
 public class WeavablePackage extends Weavable<WeavablePackage, Package> {
 
-    private final ConcurrentNavigableMap<String, WeavableClass<?>> clazzes =
-        new ConcurrentSkipListMap<String, WeavableClass<?>>();
+    private final ConcurrentNavigableMap<String, WeavableClass<?>> clazzes = new ConcurrentSkipListMap<>();
 
     /**
      * Create a new {@link WeavablePackage} instance.
@@ -51,7 +50,7 @@ public class WeavablePackage extends Weavable<WeavablePackage, Package> {
             final WeavableClass<T> result = (WeavableClass<T>) clazzes.get(key);
             return result;
         }
-        final WeavableClass<T> result = new WeavableClass<T>(cls, this);
+        final WeavableClass<T> result = new WeavableClass<>(cls, this);
         @SuppressWarnings("unchecked")
         final WeavableClass<T> faster = (WeavableClass<T>) clazzes.putIfAbsent(key, result);
         return faster == null ? result : faster;
@@ -74,5 +73,4 @@ public class WeavablePackage extends Weavable<WeavablePackage, Package> {
     public int compareTo(final WeavablePackage arg0) {
         return getTarget().getName().compareTo(arg0.getTarget().getName());
     }
-
 }
diff --git a/processor/src/main/java/org/apache/commons/weaver/model/WeavableParameter.java b/processor/src/main/java/org/apache/commons/weaver/model/WeavableParameter.java
index 9ea5659..09d2d42 100644
--- a/processor/src/main/java/org/apache/commons/weaver/model/WeavableParameter.java
+++ b/processor/src/main/java/org/apache/commons/weaver/model/WeavableParameter.java
@@ -51,5 +51,4 @@ public abstract class WeavableParameter
     protected int localCompareTo(final SELF obj) {
         return getTarget().compareTo(getTarget());
     }
-
 }
diff --git a/processor/src/main/java/org/apache/commons/weaver/model/WeaveEnvironment.java b/processor/src/main/java/org/apache/commons/weaver/model/WeaveEnvironment.java
index e851127..565eb4b 100644
--- a/processor/src/main/java/org/apache/commons/weaver/model/WeaveEnvironment.java
+++ b/processor/src/main/java/org/apache/commons/weaver/model/WeaveEnvironment.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.Properties;
+import java.util.function.Supplier;
 import java.util.logging.Logger;
 
 import javax.activation.DataSource;
@@ -34,8 +35,6 @@ import org.apache.commons.weaver.spi.Weaver;
  * Encapsulates the environment in which a {@link Weaver} or {@link Cleaner} must operate.
  */
 public abstract class WeaveEnvironment {
-    private static final String CONTENT_TYPE = "application/octet-stream";
-
     private class Resource implements DataSource {
         private final String name;
 
@@ -79,6 +78,21 @@ public abstract class WeaveEnvironment {
         }
     }
 
+    private static final String CONTENT_TYPE = "application/octet-stream";
+
+    /**
+     * Convert a classname into a resource name.
+     * @param classname to convert
+     * @return String
+     */
+    protected static String getResourceName(final String classname) {
+        return classname.replace('.', '/') + ".class";
+    }
+
+    private static Supplier<String> supplier(String format, Object... args) {
+        return () -> String.format(format, args);
+    }
+
     /**
      * ClassLoader containing scannable and weavable classes.
      */
@@ -112,7 +126,7 @@ public abstract class WeaveEnvironment {
      * @see String#format(String, Object...)
      */
     public void debug(final String message, final Object... args) {
-        log.fine(String.format(message, args));
+        log.fine(supplier(message, args));
     }
 
     /**
@@ -122,7 +136,7 @@ public abstract class WeaveEnvironment {
      * @see String#format(String, Object...)
      */
     public void verbose(final String message, final Object... args) {
-        log.fine(String.format(message, args));
+        log.fine(supplier(message, args));
     }
 
     /**
@@ -132,7 +146,7 @@ public abstract class WeaveEnvironment {
      * @see String#format(String, Object...)
      */
     public void warn(final String message, final Object... args) {
-        log.warning(String.format(message, args));
+        log.warning(supplier(message, args));
     }
 
     /**
@@ -142,7 +156,7 @@ public abstract class WeaveEnvironment {
      * @see String#format(String, Object...)
      */
     public void info(final String message, final Object... args) {
-        log.info(String.format(message, args));
+        log.info(supplier(message, args));
     }
 
     /**
@@ -152,7 +166,7 @@ public abstract class WeaveEnvironment {
      * @see String#format(String, Object...)
      */
     public void error(final String message, final Object... args) {
-        log.severe(String.format(message, args));
+        log.severe(supplier(message, args));
     }
 
     /**
@@ -214,13 +228,4 @@ public abstract class WeaveEnvironment {
      * @throws IOException on error
      */
     protected abstract OutputStream getOutputStream(String resourceName) throws IOException;
-
-    /**
-     * Convert a classname into a resource name.
-     * @param classname to convert
-     * @return String
-     */
-    protected static String getResourceName(final String classname) {
-        return classname.replace('.', '/') + ".class";
-    }
 }
diff --git a/processor/src/main/java/org/apache/commons/weaver/model/WeaveInterest.java b/processor/src/main/java/org/apache/commons/weaver/model/WeaveInterest.java
index 6b23fac..3fa7a1e 100644
--- a/processor/src/main/java/org/apache/commons/weaver/model/WeaveInterest.java
+++ b/processor/src/main/java/org/apache/commons/weaver/model/WeaveInterest.java
@@ -28,6 +28,16 @@ import java.lang.annotation.ElementType;
 public final class WeaveInterest {
 
     /**
+     * Get a {@link WeaveInterest}.
+     * @param annotationType observed annotation type
+     * @param target attached element type
+     * @return {@link WeaveInterest}
+     */
+    public static WeaveInterest of(final Class<? extends Annotation> annotationType, final ElementType target) {
+        return new WeaveInterest(annotationType, target);
+    }
+
+    /**
      * Observed annotation type.
      */
     public final Class<? extends Annotation> annotationType;
@@ -42,14 +52,4 @@ public final class WeaveInterest {
         this.annotationType = annotationType;
         this.target = target;
     }
-
-    /**
-     * Get a {@link WeaveInterest}.
-     * @param annotationType observed annotation type
-     * @param target attached element type
-     * @return {@link WeaveInterest}
-     */
-    public static WeaveInterest of(final Class<? extends Annotation> annotationType, final ElementType target) {
-        return new WeaveInterest(annotationType, target);
-    }
 }
diff --git a/processor/src/main/java/org/apache/commons/weaver/utils/Args.java b/processor/src/main/java/org/apache/commons/weaver/utils/Args.java
index 23f18a9..8d31a1e 100644
--- a/processor/src/main/java/org/apache/commons/weaver/utils/Args.java
+++ b/processor/src/main/java/org/apache/commons/weaver/utils/Args.java
@@ -52,5 +52,4 @@ public final class Args {
         }
         return -1;
     }
-
 }
diff --git a/processor/src/main/java/org/apache/commons/weaver/utils/Providers.java b/processor/src/main/java/org/apache/commons/weaver/utils/Providers.java
index 8ed4f5d..5c919c8 100755
--- a/processor/src/main/java/org/apache/commons/weaver/utils/Providers.java
+++ b/processor/src/main/java/org/apache/commons/weaver/utils/Providers.java
@@ -28,8 +28,6 @@ import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.commons.collections4.Factory;
-import org.apache.commons.collections4.map.LazyMap;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.Validate;
 import org.apache.commons.weaver.Consumes;
@@ -56,18 +54,18 @@ public final class Providers {
 
             final Map<Class<? extends P>, Set<Class<? extends P>>> dependencyMap = toDependencyMap(providers);
 
-            final Collection<Class<? extends P>> order = new LinkedHashSet<Class<? extends P>>();
+            final Collection<Class<? extends P>> order = new LinkedHashSet<>();
 
-            final Map<Class<? extends P>, State> stateMap = new HashMap<Class<? extends P>, Providers.State>();
-            final Deque<Class<? extends P>> visiting = new ArrayDeque<Class<? extends P>>();
+            final Map<Class<? extends P>, State> stateMap = new HashMap<>();
+            final Deque<Class<? extends P>> visiting = new ArrayDeque<>();
 
             for (final Class<? extends P> type : dependencyMap.keySet()) {
                 final State state = stateMap.get(type);
 
                 if (state == null) {
                     tsort(type, dependencyMap, stateMap, visiting, order);
-                } else if (state == State.VISITING) {
-                    throw new RuntimeException("Unexpected node in visiting state: " + type);
+                } else {
+                    Validate.validState(state != State.VISITING, "Unexpected node in visiting state: %s", type);
                 }
             }
             return imposeOrder(providers, order);
@@ -154,22 +152,15 @@ public final class Providers {
          */
         private Map<Class<? extends P>, Set<Class<? extends P>>> toDependencyMap(final Iterable<P> providers) {
 
-            final Map<Class<? extends P>, Set<Class<? extends P>>> result = LazyMap.lazyMap(
-                new HashMap<Class<? extends P>, Set<Class<? extends P>>>(), new Factory<Set<Class<? extends P>>>() {
-
-                    @Override
-                    public Set<Class<? extends P>> create() {
-                        return new HashSet<Class<? extends P>>();
-                    }
-                });
+            final Map<Class<? extends P>, Set<Class<? extends P>>> result = new HashMap<>();
 
             for (final WeaveLifecycleProvider<?> provider : providers) {
                 @SuppressWarnings("unchecked")
                 final Class<? extends P> type = (Class<? extends P>) provider.getClass();
-                Collections.addAll(result.get(type), consumedBy(type));
+                Collections.addAll(result.computeIfAbsent(type, k -> new HashSet<>()), consumedBy(type));
 
                 for (final Class<? extends P> dependent : producedBy(type)) {
-                    result.get(dependent).add(type);
+                    result.computeIfAbsent(dependent, k -> new HashSet<>()).add(type);
                 }
             }
             return result;
@@ -184,7 +175,7 @@ public final class Providers {
          */
         private Iterable<P> imposeOrder(final Iterable<P> providers, final Iterable<Class<? extends P>> order) {
 
-            final Set<P> result = new LinkedHashSet<P>();
+            final Set<P> result = new LinkedHashSet<>();
 
             for (final Class<? extends P> type : order) {
                 for (final P provider : providers) {
@@ -195,10 +186,6 @@ public final class Providers {
             }
             return Collections.unmodifiableSet(result);
         }
-
-    }
-
-    private Providers() {
     }
 
     /**
@@ -212,4 +199,6 @@ public final class Providers {
         return new SortWorker<P>().sort(providers);
     }
 
+    private Providers() {
+    }
 }
diff --git a/processor/src/main/java/org/apache/commons/weaver/utils/URLArray.java b/processor/src/main/java/org/apache/commons/weaver/utils/URLArray.java
index 5a36acb..855354e 100644
--- a/processor/src/main/java/org/apache/commons/weaver/utils/URLArray.java
+++ b/processor/src/main/java/org/apache/commons/weaver/utils/URLArray.java
@@ -21,47 +21,20 @@ package org.apache.commons.weaver.utils;
 import java.io.File;
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.util.ArrayList;
-import java.util.Iterator;
+import java.util.Collection;
+import java.util.stream.Stream;
 
 /**
  * {@link URL} Array utilities.
  */
 public final class URLArray {
-    private URLArray() {
-    }
-
     /**
      * Convert an {@link Iterable} of filesystem paths.
      * @param files to convert
      * @return URL[]
      */
     public static URL[] fromPaths(final Iterable<String> files) {
-        return fromFiles(new Iterable<File>() {
-
-            @Override
-            public Iterator<File> iterator() {
-                final Iterator<String> path = files.iterator();
-                return new Iterator<File>() {
-
-                    @Override
-                    public boolean hasNext() {
-                        return path.hasNext();
-                    }
-
-                    @Override
-                    public File next() {
-                        final String element = path.next();
-                        return element == null ? null : new File(element);
-                    }
-
-                    @Override
-                    public void remove() {
-                        throw new UnsupportedOperationException();
-                    }
-                };
-            }
-        });
+        return fromFiles(() -> stream(files).map(e -> e == null ? null : new File(e)).iterator());
     }
 
     /**
@@ -70,19 +43,32 @@ public final class URLArray {
      * @return URL[]
      */
     public static URL[] fromFiles(final Iterable<File> files) {
-        final ArrayList<URL> result = new ArrayList<URL>();
-        for (final File file : files) {
-            if (file == null) {
-                result.add(null);
-                continue;
+        return fromFiles(stream(files));
+    }
+
+    private static URL[] fromFiles(final Stream<File> files) {
+        return files.map(f -> {
+            if (f == null) {
+                return null;
             }
             try {
-                result.add(file.toURI().toURL());
+                return f.toURI().toURL();
             } catch (final MalformedURLException e) {
                 // this shouldn't happen
                 throw new RuntimeException(e);
             }
+        }).toArray(URL[]::new);
+    }
+
+    private static <T> Stream<T> stream(Iterable<T> iterable) {
+        if (iterable instanceof Collection<?>) {
+            return ((Collection<T>) iterable).stream();
         }
-        return result.toArray(new URL[result.size()]);
+        final Stream.Builder<T> b = Stream.builder();
+        iterable.forEach(b);
+        return b.build();
+    }
+
+    private URLArray() {
     }
 }

-- 
To stop receiving notification emails like this one, please contact
mbenson@apache.org.