Home | History | Annotate | Download | only in analysis
      1 package test.javassist.bytecode.analysis;
      2 
      3 import java.io.BufferedReader;
      4 import java.io.FileReader;
      5 
      6 import javassist.ClassPool;
      7 import javassist.CtClass;
      8 import javassist.CtMethod;
      9 import javassist.bytecode.analysis.Analyzer;
     10 
     11 /**
     12  * Simple testing tool that verifies class files can be analyzed.
     13  *
     14  * @author Jason T. Greene
     15  */
     16 public class ErrorFinder {
     17 
     18     public static void main(String[] args) throws Exception {
     19         ClassPool pool = ClassPool.getDefault();
     20 
     21         String className = args[0];
     22         if (!className.equals("-file")) {
     23             analyzeClass(pool, className);
     24             return;
     25         }
     26 
     27         FileReader reader = new FileReader(args[1]);
     28         BufferedReader lineReader = new BufferedReader(reader);
     29 
     30 
     31         String line = lineReader.readLine();
     32         while (line != null) {
     33             analyzeClass(pool, line);
     34             line = lineReader.readLine();
     35         }
     36     }
     37 
     38     private static void analyzeClass(ClassPool pool, String className) {
     39         try {
     40 
     41             CtClass clazz = pool.get(className);
     42             CtMethod[] methods = clazz.getDeclaredMethods();
     43             for (int i = 0; i < methods.length; i++)
     44                 analyzeMethod(clazz, methods[i]);
     45         } catch (Throwable e) {
     46             System.out.println("FAIL: CLASS: " + className + " " + e.getClass() + ":" + e.getMessage());
     47         }
     48     }
     49 
     50     private static void analyzeMethod(CtClass clazz, CtMethod method) {
     51         String methodName = clazz.getName() + "." + method.getName() + method.getSignature();
     52         System.out.println("START: " + methodName);
     53         Analyzer analyzer = new Analyzer();
     54 
     55         long time = System.currentTimeMillis();
     56         try {
     57             analyzer.analyze(clazz, method.getMethodInfo2());
     58             System.out.println("SUCCESS: " + methodName + " - " + (System.currentTimeMillis() - time));
     59         } catch (Exception e) {
     60             System.out.println("FAIL: " + methodName + " - " + (e.getMessage() == null ? e.getClass().getName() : e.getMessage()));
     61         }
     62     }
     63 }
     64