aboutsummaryrefslogtreecommitdiff
path: root/src/test/test/javassist/bytecode/analysis/ErrorFinder.java
blob: e131ffb982905a9f7a11233f7246e11912536095 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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()));
        }
    }
}