package test.javassist.bytecode.analysis; import java.io.BufferedReader; import java.io.FileReader; import javassist.ClassPool; import javassist.CtClass; import javassist.CtMethod; import javassist.bytecode.analysis.Analyzer; /** * Simple testing tool that verifies class files can be analyzed. * * @author Jason T. Greene */ public class ErrorFinder { public static void main(String[] args) throws Exception { ClassPool pool = ClassPool.getDefault(); String className = args[0]; if (!className.equals("-file")) { analyzeClass(pool, className); return; } FileReader reader = new FileReader(args[1]); BufferedReader lineReader = new BufferedReader(reader); String line = lineReader.readLine(); while (line != null) { analyzeClass(pool, line); line = lineReader.readLine(); } } private static void analyzeClass(ClassPool pool, String className) { try { CtClass clazz = pool.get(className); CtMethod[] methods = clazz.getDeclaredMethods(); for (int i = 0; i < methods.length; i++) analyzeMethod(clazz, methods[i]); } catch (Throwable e) { System.out.println("FAIL: CLASS: " + className + " " + e.getClass() + ":" + e.getMessage()); } } private static void analyzeMethod(CtClass clazz, CtMethod method) { String methodName = clazz.getName() + "." + method.getName() + method.getSignature(); System.out.println("START: " + methodName); Analyzer analyzer = new Analyzer(); long time = System.currentTimeMillis(); try { analyzer.analyze(clazz, method.getMethodInfo2()); System.out.println("SUCCESS: " + methodName + " - " + (System.currentTimeMillis() - time)); } catch (Exception e) { System.out.println("FAIL: " + methodName + " - " + (e.getMessage() == null ? e.getClass().getName() : e.getMessage())); } } }