java-callgraph

Example from the ASM documentation

5/27/2011 4:41:28 AM

Details

diff --git a/src/main/java/gr/gousiosg/callgraph/ClassPrinter.java b/src/main/java/gr/gousiosg/callgraph/ClassPrinter.java
new file mode 100644
index 0000000..e21d484
--- /dev/null
+++ b/src/main/java/gr/gousiosg/callgraph/ClassPrinter.java
@@ -0,0 +1,47 @@
+package gr.gousiosg.callgraph;
+
+import org.objectweb.asm.AnnotationVisitor;
+import org.objectweb.asm.Attribute;
+import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.FieldVisitor;
+import org.objectweb.asm.MethodVisitor;
+
+public class ClassPrinter implements ClassVisitor {
+    public void visit(int version, int access, String name, String signature,
+            String superName, String[] interfaces) {
+        System.out.println(name + " extends " + superName + " {");
+    }
+
+    public void visitSource(String source, String debug) {
+    }
+
+    public void visitOuterClass(String owner, String name, String desc) {
+    }
+
+    public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
+        return null;
+    }
+
+    public void visitAttribute(Attribute attr) {
+    }
+
+    public void visitInnerClass(String name, String outerName,
+            String innerName, int access) {
+    }
+
+    public FieldVisitor visitField(int access, String name, String desc,
+            String signature, Object value) {
+        System.out.println("    " + desc + " " + name);
+        return null;
+    }
+
+    public MethodVisitor visitMethod(int access, String name, String desc,
+            String signature, String[] exceptions) {
+        System.out.println("    " + name + desc);
+        return null;
+    }
+
+    public void visitEnd() {
+        System.out.println("}");
+    }
+}
diff --git a/src/main/java/gr/gousiosg/callgraph/JCallGraph.java b/src/main/java/gr/gousiosg/callgraph/JCallGraph.java
index 2f8a306..1e22617 100644
--- a/src/main/java/gr/gousiosg/callgraph/JCallGraph.java
+++ b/src/main/java/gr/gousiosg/callgraph/JCallGraph.java
@@ -1,9 +1,26 @@
+
 package gr.gousiosg.callgraph;
 
-public class JCallGraph 
-{
-    public static void main( String[] args )
-    {
-        System.out.println( "Hello World!" );
+import java.io.IOException;
+
+import org.objectweb.asm.ClassReader;
+
+/**
+ * Constructs a callgraph out of a JAR archive. Can combine multiple archives
+ * into a single call graph.
+ * 
+ * @author Georgios Gousios <gousiosg@gmail.com>
+ * 
+ */
+public class JCallGraph {
+
+    public static void main(String[] args) {
+        try {
+            ClassPrinter cp = new ClassPrinter(); 
+            ClassReader cr = new ClassReader("java.lang.Thread"); 
+            cr.accept(cp, 0);
+        } catch (IOException e) {
+            
+        }
     }
 }