java-callgraph

Process all files in a jar archive

5/27/2011 7:32:22 PM

Details

diff --git a/src/main/java/gr/gousiosg/callgraph/JCallGraph.java b/src/main/java/gr/gousiosg/callgraph/JCallGraph.java
index 6ef87f5..20ccc8f 100644
--- a/src/main/java/gr/gousiosg/callgraph/JCallGraph.java
+++ b/src/main/java/gr/gousiosg/callgraph/JCallGraph.java
@@ -1,8 +1,12 @@
-
 package gr.gousiosg.callgraph;
 
+import java.io.File;
 import java.io.IOException;
+import java.util.Enumeration;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
 
+import org.apache.bcel.Repository;
 import org.apache.bcel.classfile.ClassParser;
 
 
@@ -18,9 +22,22 @@ public class JCallGraph {
     public static void main(String[] args) {
         ClassParser cp;
         try {
-            cp = new ClassParser("/Volumes/Files/Developer/java-callgraph/target/classes/gr/gousiosg/callgraph/ClassVisitor.class");
-            ClassVisitor visitor = new ClassVisitor(cp.parse());
-            visitor.start();
+            
+            JarFile jar = new JarFile(new File("/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar"));
+            
+            Enumeration<JarEntry> entries = jar.entries();
+            while (entries.hasMoreElements()) {
+                JarEntry entry = entries.nextElement();
+                if (entry.isDirectory())
+                    continue;
+                
+                if (!entry.getName().endsWith(".class"))
+                    continue;
+                
+                cp = new ClassParser("/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar", entry.getName());
+                ClassVisitor visitor = new ClassVisitor(cp.parse());
+                visitor.start();
+            }
         } catch (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
diff --git a/src/main/java/gr/gousiosg/callgraph/MethodVisitor.java b/src/main/java/gr/gousiosg/callgraph/MethodVisitor.java
index a504e1d..fb113b6 100644
--- a/src/main/java/gr/gousiosg/callgraph/MethodVisitor.java
+++ b/src/main/java/gr/gousiosg/callgraph/MethodVisitor.java
@@ -34,7 +34,8 @@ public class MethodVisitor extends EmptyVisitor {
     public void start() {
         if (mg.isAbstract() || mg.isNative())
             return;
-        for (InstructionHandle ih = mg.getInstructionList().getStart(); ih != null; ih = ih.getNext()) {
+        for (InstructionHandle ih = mg.getInstructionList().getStart(); 
+                ih != null; ih = ih.getNext()) {
             Instruction i = ih.getInstruction();
             
             if (!visitInstruction(i))
@@ -46,7 +47,8 @@ public class MethodVisitor extends EmptyVisitor {
         short opcode = i.getOpcode();
 
         return ((InstructionConstants.INSTRUCTIONS[opcode] != null)
-                && !(i instanceof ConstantPushInstruction) && !(i instanceof ReturnInstruction));
+                && !(i instanceof ConstantPushInstruction) 
+                && !(i instanceof ReturnInstruction));
     }
 
     /** Method invocation. */