diff --git a/pom.xml b/pom.xml
index c05ba39..4da995d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -83,12 +83,6 @@
1
-
- org.codehaus.plexus
- plexus-utils
- 3.5.1
-
-
org.ow2.asm
asm
diff --git a/src/main/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitorUtils.java b/src/main/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitorUtils.java
index 20f1652..29cd9b5 100644
--- a/src/main/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitorUtils.java
+++ b/src/main/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitorUtils.java
@@ -19,16 +19,18 @@
package org.apache.maven.shared.dependency.analyzer;
import java.io.File;
-import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarInputStream;
-
-import org.codehaus.plexus.util.DirectoryScanner;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
/**
* Utility to visit classes in a library given either as a jar file or an exploded directory.
@@ -42,11 +44,9 @@ private ClassFileVisitorUtils() {
}
/**
- * accept.
- *
- * @param url a {@link java.net.URL} object.
- * @param visitor a {@link org.apache.maven.shared.dependency.analyzer.ClassFileVisitor} object.
- * @throws java.io.IOException if any.
+ * @param url a {@link java.net.URL} object
+ * @param visitor a {@link org.apache.maven.shared.dependency.analyzer.ClassFileVisitor} object
+ * @throws java.io.IOException if any
*/
public static void accept(URL url, ClassFileVisitor visitor) throws IOException {
if (url.getPath().endsWith(".jar")) {
@@ -77,45 +77,39 @@ private static void acceptJar(URL url, ClassFileVisitor visitor) throws IOExcept
String name = entry.getName();
// ignore files like package-info.class and module-info.class
if (name.endsWith(".class") && name.indexOf('-') == -1) {
- visitClass(name, in, visitor);
+ // Jars(ZIP) always use / as the separator character
+ visitClass(name, in, visitor, '/');
}
}
}
}
private static void acceptDirectory(File directory, ClassFileVisitor visitor) throws IOException {
- if (!directory.isDirectory()) {
- throw new IllegalArgumentException("File is not a directory");
- }
-
- DirectoryScanner scanner = new DirectoryScanner();
-
- scanner.setBasedir(directory);
- scanner.setIncludes(new String[] {"**/*.class"});
-
- scanner.scan();
- String[] paths = scanner.getIncludedFiles();
-
- for (String path : paths) {
- path = path.replace(File.separatorChar, '/');
-
- File file = new File(directory, path);
+ List classFiles;
+ try (Stream walk = Files.walk(directory.toPath())) {
+ classFiles = walk.filter(path -> path.getFileName().toString().endsWith(".class"))
+ .collect(Collectors.toList());
+ }
- try (InputStream in = new FileInputStream(file)) {
- visitClass(path, in, visitor);
+ for (Path path : classFiles) {
+ try (InputStream in = Files.newInputStream(path)) {
+ visitClass(directory, path, in, visitor);
}
}
}
- private static void visitClass(String path, InputStream in, ClassFileVisitor visitor) {
- if (!path.endsWith(".class")) {
- throw new IllegalArgumentException("Path is not a class");
- }
+ private static void visitClass(File baseDirectory, Path path, InputStream in, ClassFileVisitor visitor) {
+ // getPath() returns a String, not a java.nio.file.Path
+ String stringPath =
+ path.toFile().getPath().substring(baseDirectory.getPath().length() + 1);
+ visitClass(stringPath, in, visitor, File.separatorChar);
+ }
- String className = path.substring(0, path.length() - 6);
+ private static void visitClass(String stringPath, InputStream in, ClassFileVisitor visitor, char separator) {
+ String className = stringPath.substring(0, stringPath.length() - 6);
- className = className.replace('/', '.');
+ className = className.replace(separator, '.');
visitor.visitClass(className, in);
}
diff --git a/src/test/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitorUtilsTest.java b/src/test/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitorUtilsTest.java
index e92e48d..1502c8b 100644
--- a/src/test/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitorUtilsTest.java
+++ b/src/test/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitorUtilsTest.java
@@ -33,7 +33,6 @@
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
-import org.junit.Before;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
@@ -46,9 +45,9 @@
* @see ClassFileVisitorUtils
*/
public class ClassFileVisitorUtilsTest {
- private MockVisitor visitor;
+ private TestVisitor visitor = new TestVisitor();
- private static class MockVisitor implements ClassFileVisitor {
+ private static class TestVisitor implements ClassFileVisitor {
final List classNames = new ArrayList<>();
final List data = new ArrayList<>();
@@ -64,11 +63,6 @@ public void visitClass(String className, InputStream in) {
}
}
- @Before
- public void setUp() {
- visitor = new MockVisitor();
- }
-
@Test
public void testAcceptJar() throws IOException {
File file = File.createTempFile("test", ".jar");