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