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

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

commit 02c73d0253ec093869c7cbfb87f9ea82fa7a7529
Author: Elliotte Rusty Harold <elh...@ibiblio.org>
AuthorDate: Wed Jul 16 10:20:11 2025 -0400

    Catch exceptions on all paths
---
 .../dependency/analyzer/ClassFileVisitor.java      |  7 +---
 .../dependency/analyzer/ClassFileVisitorUtils.java | 44 +++++++++++++---------
 .../analyzer/asm/DependencyClassFileVisitor.java   | 16 +++++---
 3 files changed, 38 insertions(+), 29 deletions(-)

diff --git 
a/src/main/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitor.java
 
b/src/main/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitor.java
index 27d1d1b..981cf59 100644
--- 
a/src/main/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitor.java
+++ 
b/src/main/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitor.java
@@ -26,11 +26,6 @@ import java.io.InputStream;
  * @author <a href="mailto:markhob...@gmail.com";>Mark Hobson</a>
  */
 public interface ClassFileVisitor {
-    /**
-     * <p>visitClass.</p>
-     *
-     * @param className a {@link java.lang.String} object.
-     * @param in a {@link java.io.InputStream} object.
-     */
+
     void visitClass(String className, InputStream in);
 }
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 b2211c3..89589e8 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
@@ -21,6 +21,7 @@ package org.apache.maven.shared.dependency.analyzer;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.UncheckedIOException;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
@@ -32,6 +33,8 @@ import java.util.jar.JarInputStream;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import org.apache.maven.shared.dependency.analyzer.asm.VisitClassException;
+
 /**
  * Utility to visit classes in a library given either as a jar file or an 
exploded directory.
  *
@@ -44,9 +47,9 @@ public final class ClassFileVisitorUtils {
     }
 
     /**
-     * @param url     a {@link java.net.URL} object
+     * @param url the URL of the jar file or directory to visit
      * @param visitor a {@link 
org.apache.maven.shared.dependency.analyzer.ClassFileVisitor} object
-     * @throws java.io.IOException if any
+     * @throws java.io.IOException I/O error or corrupt class file
      */
     public static void accept(URL url, ClassFileVisitor visitor) throws 
IOException {
         if (url.getPath().endsWith(".jar")) {
@@ -85,38 +88,43 @@ public final class ClassFileVisitorUtils {
     }
 
     private static void acceptDirectory(File directory, ClassFileVisitor 
visitor) throws IOException {
-
-        List<Path> classFiles;
         try (Stream<Path> walk = Files.walk(directory.toPath())) {
-            classFiles = walk.filter(path -> 
path.getFileName().toString().endsWith(".class"))
+            List<Path> classFiles = walk.filter(
+                            path -> 
path.getFileName().toString().endsWith(".class"))
                     .collect(Collectors.toList());
-        }
-
-        for (Path path : classFiles) {
-            try (InputStream in = Files.newInputStream(path)) {
-                try {
-                    visitClass(directory, path, in, visitor);
-                } catch (RuntimeException e) {
-                    // visitClass throws RuntimeException
-                    throw new RuntimeException(
-                            String.format("%s from directory = %s, path = %s", 
e.getMessage(), directory, path), e);
+            for (Path path : classFiles) {
+                try (InputStream in = Files.newInputStream(path)) {
+                    try {
+                        visitClass(directory, path, in, visitor);
+                    } catch (IOException e) {
+                        throw new IOException(
+                                String.format("%s from directory = %s, path = 
%s", e.getMessage(), directory, path), e);
+                    }
                 }
             }
         }
     }
 
-    private static void visitClass(File baseDirectory, Path path, InputStream 
in, ClassFileVisitor visitor) {
+    private static void visitClass(File baseDirectory, Path path, InputStream 
in, ClassFileVisitor visitor)
+            throws IOException {
         // 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);
     }
 
-    private static void visitClass(String stringPath, InputStream in, 
ClassFileVisitor visitor, char separator) {
+    private static void visitClass(String stringPath, InputStream in, 
ClassFileVisitor visitor, char separator)
+            throws IOException {
         String className = stringPath.substring(0, stringPath.length() - 6);
 
         className = className.replace(separator, '.');
 
-        visitor.visitClass(className, in);
+        try {
+            visitor.visitClass(className, in);
+        } catch (UncheckedIOException e) {
+            throw e.getCause();
+        } catch (VisitClassException e) {
+            throw new IOException(e);
+        }
     }
 }
diff --git 
a/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DependencyClassFileVisitor.java
 
b/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DependencyClassFileVisitor.java
index f8930b8..f59bdd8 100644
--- 
a/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DependencyClassFileVisitor.java
+++ 
b/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DependencyClassFileVisitor.java
@@ -52,7 +52,6 @@ public class DependencyClassFileVisitor implements 
ClassFileVisitor {
      * <p>Constructor for DependencyClassFileVisitor.</p>
      */
     public DependencyClassFileVisitor(ClassesPatterns excludedClasses) {
-
         this.excludedClasses = excludedClasses;
     }
 
@@ -63,7 +62,14 @@ public class DependencyClassFileVisitor implements 
ClassFileVisitor {
         this(new ClassesPatterns());
     }
 
-    /** {@inheritDoc} */
+    /**
+     * Visits a class.
+     *
+     * @param className the name of the class being visited
+     * @param in the {@link java.io.InputStream} to read the byte code from
+     * @throws VisitClassException if the .class file is corrupt
+     * @throws UncheckedIOException if an I/O error occurs while reading the 
class file
+     */
     @Override
     public void visitClass(String className, InputStream in) {
         try {
@@ -83,10 +89,10 @@ public class DependencyClassFileVisitor implements 
ClassFileVisitor {
             AnnotationVisitor annotationVisitor = new 
DefaultAnnotationVisitor(resultCollector, className);
             SignatureVisitor signatureVisitor = new 
DefaultSignatureVisitor(resultCollector, className);
             FieldVisitor fieldVisitor = new 
DefaultFieldVisitor(annotationVisitor, resultCollector, className);
-            MethodVisitor mv =
+            MethodVisitor methodVisitor =
                     new DefaultMethodVisitor(annotationVisitor, 
signatureVisitor, resultCollector, className);
             ClassVisitor classVisitor = new DefaultClassVisitor(
-                    signatureVisitor, annotationVisitor, fieldVisitor, mv, 
resultCollector, className);
+                    signatureVisitor, annotationVisitor, fieldVisitor, 
methodVisitor, resultCollector, className);
 
             reader.accept(classVisitor, 0);
         } catch (IOException exception) {
@@ -123,7 +129,7 @@ public class DependencyClassFileVisitor implements 
ClassFileVisitor {
      * <p>getDependencyUsages.</p>
      *
      * @return the set of classes referenced by visited class files, paired 
with
-     * classes declaring the references.
+     *     classes declaring the references
      */
     public Set<DependencyUsage> getDependencyUsages() {
         return resultCollector.getDependencyUsages();

Reply via email to