Search in sources :

Example 1 with Analyzer

use of jdk.internal.org.objectweb.asm.tree.analysis.Analyzer in project Bytecoder by mirkosertic.

the class CheckClassAdapter method verify.

/**
 * Checks a given class.
 *
 * @param cr
 *            a <code>ClassReader</code> that contains bytecode for the
 *            analysis.
 * @param loader
 *            a <code>ClassLoader</code> which will be used to load
 *            referenced classes. This is useful if you are verifiying
 *            multiple interdependent classes.
 * @param dump
 *            true if bytecode should be printed out not only when errors
 *            are found.
 * @param pw
 *            write where results going to be printed
 */
public static void verify(final ClassReader cr, final ClassLoader loader, final boolean dump, final PrintWriter pw) {
    ClassNode cn = new ClassNode();
    cr.accept(new CheckClassAdapter(cn, false), ClassReader.SKIP_DEBUG);
    Type syperType = cn.superName == null ? null : Type.getObjectType(cn.superName);
    List<MethodNode> methods = cn.methods;
    List<Type> interfaces = new ArrayList<Type>();
    for (Iterator<String> i = cn.interfaces.iterator(); i.hasNext(); ) {
        interfaces.add(Type.getObjectType(i.next()));
    }
    for (int i = 0; i < methods.size(); ++i) {
        MethodNode method = methods.get(i);
        SimpleVerifier verifier = new SimpleVerifier(Type.getObjectType(cn.name), syperType, interfaces, (cn.access & Opcodes.ACC_INTERFACE) != 0);
        Analyzer<BasicValue> a = new Analyzer<BasicValue>(verifier);
        if (loader != null) {
            verifier.setClassLoader(loader);
        }
        try {
            a.analyze(cn.name, method);
            if (!dump) {
                continue;
            }
        } catch (Exception e) {
            e.printStackTrace(pw);
        }
        printAnalyzerResult(method, a, pw);
    }
    pw.flush();
}
Also used : ClassNode(jdk.internal.org.objectweb.asm.tree.ClassNode) SimpleVerifier(jdk.internal.org.objectweb.asm.tree.analysis.SimpleVerifier) ArrayList(java.util.ArrayList) Analyzer(jdk.internal.org.objectweb.asm.tree.analysis.Analyzer) BasicValue(jdk.internal.org.objectweb.asm.tree.analysis.BasicValue) Type(jdk.internal.org.objectweb.asm.Type) MethodNode(jdk.internal.org.objectweb.asm.tree.MethodNode)

Example 2 with Analyzer

use of jdk.internal.org.objectweb.asm.tree.analysis.Analyzer in project jdk8u_jdk by JetBrains.

the class CheckClassAdapter method verify.

/**
     * Checks a given class.
     *
     * @param cr
     *            a <code>ClassReader</code> that contains bytecode for the
     *            analysis.
     * @param loader
     *            a <code>ClassLoader</code> which will be used to load
     *            referenced classes. This is useful if you are verifiying
     *            multiple interdependent classes.
     * @param dump
     *            true if bytecode should be printed out not only when errors
     *            are found.
     * @param pw
     *            write where results going to be printed
     */
public static void verify(final ClassReader cr, final ClassLoader loader, final boolean dump, final PrintWriter pw) {
    ClassNode cn = new ClassNode();
    cr.accept(new CheckClassAdapter(cn, false), ClassReader.SKIP_DEBUG);
    Type syperType = cn.superName == null ? null : Type.getObjectType(cn.superName);
    List<MethodNode> methods = cn.methods;
    List<Type> interfaces = new ArrayList<Type>();
    for (Iterator<String> i = cn.interfaces.iterator(); i.hasNext(); ) {
        interfaces.add(Type.getObjectType(i.next()));
    }
    for (int i = 0; i < methods.size(); ++i) {
        MethodNode method = methods.get(i);
        SimpleVerifier verifier = new SimpleVerifier(Type.getObjectType(cn.name), syperType, interfaces, (cn.access & Opcodes.ACC_INTERFACE) != 0);
        Analyzer<BasicValue> a = new Analyzer<BasicValue>(verifier);
        if (loader != null) {
            verifier.setClassLoader(loader);
        }
        try {
            a.analyze(cn.name, method);
            if (!dump) {
                continue;
            }
        } catch (Exception e) {
            e.printStackTrace(pw);
        }
        printAnalyzerResult(method, a, pw);
    }
    pw.flush();
}
Also used : ClassNode(jdk.internal.org.objectweb.asm.tree.ClassNode) SimpleVerifier(jdk.internal.org.objectweb.asm.tree.analysis.SimpleVerifier) ArrayList(java.util.ArrayList) Analyzer(jdk.internal.org.objectweb.asm.tree.analysis.Analyzer) BasicValue(jdk.internal.org.objectweb.asm.tree.analysis.BasicValue) Type(jdk.internal.org.objectweb.asm.Type) MethodNode(jdk.internal.org.objectweb.asm.tree.MethodNode)

Aggregations

ArrayList (java.util.ArrayList)2 Type (jdk.internal.org.objectweb.asm.Type)2 ClassNode (jdk.internal.org.objectweb.asm.tree.ClassNode)2 MethodNode (jdk.internal.org.objectweb.asm.tree.MethodNode)2 Analyzer (jdk.internal.org.objectweb.asm.tree.analysis.Analyzer)2 BasicValue (jdk.internal.org.objectweb.asm.tree.analysis.BasicValue)2 SimpleVerifier (jdk.internal.org.objectweb.asm.tree.analysis.SimpleVerifier)2