diff --git a/retrolambda/src/main/java/net/orfjackal/retrolambda/Retrolambda.java b/retrolambda/src/main/java/net/orfjackal/retrolambda/Retrolambda.java index 07d292f0..c72abd29 100644 --- a/retrolambda/src/main/java/net/orfjackal/retrolambda/Retrolambda.java +++ b/retrolambda/src/main/java/net/orfjackal/retrolambda/Retrolambda.java @@ -103,9 +103,7 @@ protected void visitResource(Path relativePath, byte[] content) throws IOExcepti } static void visitFiles(Path inputDir, List includedFiles, FileVisitor visitor) throws IOException { - if (includedFiles != null) { - visitor = new FilteringFileVisitor(includedFiles, visitor); - } + visitor = new FilteringFileVisitor(includedFiles, visitor); Files.walkFileTree(inputDir, visitor); } diff --git a/retrolambda/src/main/java/net/orfjackal/retrolambda/files/FilteringFileVisitor.java b/retrolambda/src/main/java/net/orfjackal/retrolambda/files/FilteringFileVisitor.java index b4733ada..1c464653 100644 --- a/retrolambda/src/main/java/net/orfjackal/retrolambda/files/FilteringFileVisitor.java +++ b/retrolambda/src/main/java/net/orfjackal/retrolambda/files/FilteringFileVisitor.java @@ -15,7 +15,7 @@ public class FilteringFileVisitor implements FileVisitor { private final FileVisitor target; public FilteringFileVisitor(Collection fileFilter, FileVisitor target) { - this.fileFilter = new HashSet<>(fileFilter); + this.fileFilter = fileFilter == null ? null : new HashSet<>(fileFilter); this.target = target; } @@ -26,12 +26,15 @@ public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOEx @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { + if (dir.toString().endsWith("/META-INF/versions")) { + return FileVisitResult.SKIP_SUBTREE; + } return target.preVisitDirectory(dir, attrs); } @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - if (fileFilter.contains(file)) { + if (fileFilter == null || fileFilter.contains(file)) { return target.visitFile(file, attrs); } else { return FileVisitResult.CONTINUE;