From 9644869c5d5f1ab80aa65c74ea2e27d1fa9fb414 Mon Sep 17 00:00:00 2001 From: cesarsotovalero Date: Mon, 8 Mar 2021 18:18:22 +0100 Subject: [PATCH] Minor fixes --- .../core/analysis/ClassFileVisitorUtils.java | 6 +- .../asm/DependencyClassFileVisitor.java | 88 ++++++++----------- 2 files changed, 42 insertions(+), 52 deletions(-) diff --git a/depclean-core/src/main/java/se/kth/depclean/core/analysis/ClassFileVisitorUtils.java b/depclean-core/src/main/java/se/kth/depclean/core/analysis/ClassFileVisitorUtils.java index 5def37e5..bc1a9ca9 100644 --- a/depclean-core/src/main/java/se/kth/depclean/core/analysis/ClassFileVisitorUtils.java +++ b/depclean-core/src/main/java/se/kth/depclean/core/analysis/ClassFileVisitorUtils.java @@ -19,6 +19,8 @@ * under the License. */ +import org.codehaus.plexus.util.DirectoryScanner; + import java.io.File; import java.io.FileInputStream; import java.io.IOException; @@ -29,8 +31,6 @@ import java.util.jar.JarEntry; import java.util.jar.JarInputStream; -import org.codehaus.plexus.util.DirectoryScanner; - /** * Utility to visit classes in a library given either as a jar file or an exploded directory. */ @@ -82,7 +82,7 @@ private static void acceptJar(URL url, ClassFileVisitor visitor) { try (JarInputStream in = new JarInputStream(url.openStream())) { JarEntry entry = null; - while ((entry = in.getNextJarEntry()) != null) { + while ((entry = in.getNextJarEntry()) != null) {//NOSONAR String name = entry.getName(); // ignore files like package-info.class and module-info.class if (name.endsWith(CLASS) && name.indexOf('-') == -1) { diff --git a/depclean-core/src/main/java/se/kth/depclean/core/analysis/asm/DependencyClassFileVisitor.java b/depclean-core/src/main/java/se/kth/depclean/core/analysis/asm/DependencyClassFileVisitor.java index 8a47f251..d264875e 100644 --- a/depclean-core/src/main/java/se/kth/depclean/core/analysis/asm/DependencyClassFileVisitor.java +++ b/depclean-core/src/main/java/se/kth/depclean/core/analysis/asm/DependencyClassFileVisitor.java @@ -19,6 +19,7 @@ package se.kth.depclean.core.analysis.asm; +import lombok.extern.slf4j.Slf4j; import org.objectweb.asm.AnnotationVisitor; import org.objectweb.asm.ClassReader; import org.objectweb.asm.FieldVisitor; @@ -37,6 +38,7 @@ * * @see #getDependencies() */ +@Slf4j public class DependencyClassFileVisitor implements ClassFileVisitor { private final ResultCollector resultCollector = new ResultCollector(); @@ -47,62 +49,50 @@ public class DependencyClassFileVisitor implements ClassFileVisitor { */ public void visitClass(String className, InputStream in) { try { - try { - ClassReader reader = new ClassReader(in); + ClassReader reader = new ClassReader(in); - // System.out.println("**************************************************"); - // System.out.println("Reading class: " + className); - - final Set constantPoolClassRefs = ConstantPoolParser.getConstantPoolClassReferences(reader.b); - for (String string : constantPoolClassRefs) { - resultCollector.addName(string); - } - - /* visit class members */ - AnnotationVisitor annotationVisitor = new DefaultAnnotationVisitor( - resultCollector - ); - SignatureVisitor signatureVisitor = new DefaultSignatureVisitor( - resultCollector - ); - FieldVisitor fieldVisitor = new DefaultFieldVisitor( - annotationVisitor, - resultCollector - ); - MethodVisitor methodVisitor = new DefaultMethodVisitor( - annotationVisitor, - signatureVisitor, - resultCollector - ); - - DefaultClassVisitor defaultClassVisitor = new DefaultClassVisitor( - signatureVisitor, - annotationVisitor, - fieldVisitor, - methodVisitor, - resultCollector - ); - - reader.accept(defaultClassVisitor, 0); - - // inset edge in the graph based on the bytecode analysis - DefaultCallGraph.addEdge(className, resultCollector.getDependencies()); - resultCollector.clearClasses(); - - } catch (IOException exception) { - exception.printStackTrace(); - } catch (IndexOutOfBoundsException e) { - // some bug inside ASM causes an IOB exception. Log it and move on? - // this happens when the class isn't valid. - System.out.println("Unable to process: " + className); + final Set constantPoolClassRefs = ConstantPoolParser.getConstantPoolClassReferences(reader.b); + for (String string : constantPoolClassRefs) { + resultCollector.addName(string); } + + /* visit class members */ + AnnotationVisitor annotationVisitor = new DefaultAnnotationVisitor( + resultCollector + ); + SignatureVisitor signatureVisitor = new DefaultSignatureVisitor( + resultCollector + ); + FieldVisitor fieldVisitor = new DefaultFieldVisitor( + annotationVisitor, + resultCollector + ); + MethodVisitor methodVisitor = new DefaultMethodVisitor( + annotationVisitor, + signatureVisitor, + resultCollector + ); + + DefaultClassVisitor defaultClassVisitor = new DefaultClassVisitor( + signatureVisitor, + annotationVisitor, + fieldVisitor, + methodVisitor, + resultCollector + ); + + reader.accept(defaultClassVisitor, 0); + + // inset edge in the graph based on the bytecode analysis + DefaultCallGraph.addEdge(className, resultCollector.getDependencies()); resultCollector.clearClasses(); - } catch (IndexOutOfBoundsException e) { + } catch (IndexOutOfBoundsException | IOException e) { // some bug inside ASM causes an IOB exception. Log it and move on? // this happens when the class isn't valid. - System.out.println("Unable to process: " + className); + log.warn("Unable to process: " + className); } + resultCollector.clearClasses(); } // public methods ---------------------------------------------------------