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

elharo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-dependency-analyzer.git


The following commit(s) were added to refs/heads/master by this push:
     new 93f9e36  [MSHARED-1224] Prefer JDK classes to Plexus utils (#81)
93f9e36 is described below

commit 93f9e364970d50e4afea06ec0280991070d81d24
Author: Elliotte Rusty Harold <elh...@users.noreply.github.com>
AuthorDate: Sat Apr 8 06:41:26 2023 -0400

    [MSHARED-1224] Prefer JDK classes to Plexus utils (#81)
    
    * Prefer JDK classes to Plexus utils
    
    * use Path.toString
    * Use try-with-resource for Files.walk
---
 pom.xml                                            |  6 ---
 .../dependency/analyzer/ClassFileVisitorUtils.java | 60 ++++++++++------------
 .../analyzer/ClassFileVisitorUtilsTest.java        | 10 +---
 3 files changed, 29 insertions(+), 47 deletions(-)

diff --git a/pom.xml b/pom.xml
index c05ba39..4da995d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -83,12 +83,6 @@
       <version>1</version>
     </dependency>
 
-    <dependency>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-utils</artifactId>
-      <version>3.5.1</version>
-    </dependency>
-
     <dependency>
       <groupId>org.ow2.asm</groupId>
       <artifactId>asm</artifactId>
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 @@ public final class ClassFileVisitorUtils {
     }
 
     /**
-     * <p>accept.</p>
-     *
-     * @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 @@ public final class ClassFileVisitorUtils {
                 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<Path> classFiles;
+        try (Stream<Path> 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 java.util.zip.ZipEntry;
 
 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 @@ import static org.assertj.core.api.Assertions.fail;
  * @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<String> classNames = new ArrayList<>();
         final List<String> data = new ArrayList<>();
 
@@ -64,11 +63,6 @@ public class ClassFileVisitorUtilsTest {
         }
     }
 
-    @Before
-    public void setUp() {
-        visitor = new MockVisitor();
-    }
-
     @Test
     public void testAcceptJar() throws IOException {
         File file = File.createTempFile("test", ".jar");

Reply via email to