Example usage for org.objectweb.asm.tree AbstractInsnNode MULTIANEWARRAY_INSN

List of usage examples for org.objectweb.asm.tree AbstractInsnNode MULTIANEWARRAY_INSN

Introduction

In this page you can find the example usage for org.objectweb.asm.tree AbstractInsnNode MULTIANEWARRAY_INSN.

Prototype

int MULTIANEWARRAY_INSN

To view the source code for org.objectweb.asm.tree AbstractInsnNode MULTIANEWARRAY_INSN.

Click Source Link

Document

The type of MultiANewArrayInsnNode instructions.

Usage

From source file:the.bytecode.club.bytecodeviewer.searching.RegexInsnFinder.java

License:Open Source License

/**
 * Refreshes the internal instruction list when you have made changes to the
 * method.//from ww  w . ja  va2  s .c  o m
 */
public void refresh() {
    origInstructions = cleanInsn(mn.instructions);
    final List<AbstractInsnNode> il = new ArrayList<AbstractInsnNode>();
    for (final AbstractInsnNode ain : mn.instructions.toArray())
        if (ain.opcode() >= 0) {
            il.add(ain);
        }
    instructions = il.toArray(new AbstractInsnNode[il.size()]);
    offsets = new int[instructions.length];
    insnString = "";
    for (int i = 0; i < instructions.length; i++) {
        offsets[i] = -1;
        final AbstractInsnNode ain = instructions[i];
        if (ain.opcode() >= 0) {
            if (ain.opcode() >= opcodes.length) {
                try {
                    throw new UnexpectedException("Unknown opcode encountered: " + ain.opcode());
                } catch (final UnexpectedException e) {
                    new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e);
                }
            }
            offsets[i] = insnString.length();
            insnString += opcodes[ain.opcode()];
            switch (ain.type()) {
            case AbstractInsnNode.INT_INSN:
                final IntInsnNode iin = (IntInsnNode) ain;
                insnString += "{" + iin.operand + "}";
                break;
            case AbstractInsnNode.LDC_INSN:
                final LdcInsnNode lin = (LdcInsnNode) ain;
                insnString += "{" + lin.cst.toString().replace("}", "\\}") + "}";
                break;
            case AbstractInsnNode.VAR_INSN:
                final VarInsnNode vin = (VarInsnNode) ain;
                insnString += "_" + vin.var;
                break;
            case AbstractInsnNode.IINC_INSN:
                final IincInsnNode iiin = (IincInsnNode) ain;
                insnString += "{" + iiin.var + "," + iiin.incr + "}";
                break;
            case AbstractInsnNode.FIELD_INSN:
                final FieldInsnNode fin = (FieldInsnNode) ain;
                insnString += "{" + fin.desc + "," + fin.owner + "," + fin.name + "}";
                break;
            case AbstractInsnNode.METHOD_INSN:
                final MethodInsnNode min = (MethodInsnNode) ain;
                insnString += "{" + min.desc + "," + min.owner + "," + min.name + "}";
                break;
            case AbstractInsnNode.TYPE_INSN:
                final TypeInsnNode tin = (TypeInsnNode) ain;
                insnString += "{" + tin.desc + "}";
                break;
            case AbstractInsnNode.MULTIANEWARRAY_INSN:
                final MultiANewArrayInsnNode manain = (MultiANewArrayInsnNode) ain;
                insnString += "{" + manain.dims + "," + manain.desc + "}";
                break;
            default:
                throw new IllegalArgumentException(String.valueOf(ain.type()));
            }
            insnString += " ";
        }
    }
}