Example usage for org.objectweb.asm.util TraceMethodVisitor visitMaxs

List of usage examples for org.objectweb.asm.util TraceMethodVisitor visitMaxs

Introduction

In this page you can find the example usage for org.objectweb.asm.util TraceMethodVisitor visitMaxs.

Prototype

@Override
    public void visitMaxs(final int maxStack, final int maxLocals) 

Source Link

Usage

From source file:org.codehaus.groovy.ant.VerifyClass.java

License:Apache License

private boolean readClass(String clazz) throws IOException {
    ClassReader cr = new ClassReader(new FileInputStream(clazz));
    ClassNode ca = new ClassNode() {
        public void visitEnd() {
            //accept(cv);
        }/*from  w  ww  .ja va  2s.c  om*/
    };
    cr.accept(new CheckClassAdapter(ca), ClassWriter.COMPUTE_MAXS);
    boolean failed = false;

    List methods = ca.methods;
    for (int i = 0; i < methods.size(); ++i) {
        MethodNode method = (MethodNode) methods.get(i);
        if (method.instructions.size() > 0) {
            Analyzer a = new Analyzer(new SimpleVerifier());
            try {
                a.analyze(ca.name, method);
                continue;
            } catch (Exception e) {
                e.printStackTrace();
            }

            if (!failed) {
                failed = true;
                log("verifying of class " + clazz + " failed");
            }
            if (verbose)
                log(method.name + method.desc);

            TraceMethodVisitor mv = new TraceMethodVisitor(null);
            /*= new TraceMethodVisitor(null) {
            public void visitMaxs(int maxStack, int maxLocals) {
                StringBuffer buffer = new StringBuffer();
                for (int i = 0; i < text.size(); ++i) {
                    String s = frames[i] == null ? "null" : frames[i].toString();
                    while (s.length() < maxStack + maxLocals + 1) {
                        s += " ";
                    }
                    buffer.append(Integer.toString(i + 100000).substring(1));
                    buffer.append(" ");
                    buffer.append(s);
                    buffer.append(" : ");
                    buffer.append(text.get(i));
                }
                if (verbose) log(buffer.toString());
            }
            };*/
            for (int j = 0; j < method.instructions.size(); ++j) {
                Object insn = method.instructions.get(j);
                if (insn instanceof AbstractInsnNode) {
                    ((AbstractInsnNode) insn).accept(mv);
                } else {
                    mv.visitLabel((Label) insn);
                }
            }
            mv.visitMaxs(method.maxStack, method.maxLocals);
        }
    }
    return !failed;
}