MethodVisitor that keeps track of stack map frame changes between visitFrame(int, int, Object[], int, Object[]) calls. This adapter must be used with the org.objectweb.asm.ClassReader#EXPAND_FRAMES option. Each visitX instruction delegates to
the next visitor in the chain, if any, and then simulates the effect of this instruction on the
stack map frame, represented by locals and stack. The next visitor in the chain
can get the state of the stack map frame before each instruction by reading the value of
these fields in its visitX methods (this requires a reference to the AnalyzerAdapter that
is before it in the chain). If this adapter is used with a class that does not contain stack map
table attributes (i.e., pre Java 6 classes) then this adapter may not be able to compute the
stack map frame for each instruction. In this case no exception is thrown but the locals
and stack fields will be null for these instructions.
| Modifier and Type | Field and Description |
|---|---|
| private List | labels
The labels that designate the next instruction to be visited. |
| public List | locals
The local variable slots for the current execution frame. |
| private int | maxLocals
The maximum number of local variables of this method. |
| private int | maxStack
The maximum stack size of this method. |
| private String | owner
The owner's class name. |
| public List | stack
The operand stack slots for the current execution frame. |
| public Map | uninitializedTypes
The uninitialized types in the current execution frame. |
| Access | Constructor and Description |
|---|---|
| public | AnalyzerAdapter(final String
the owner's class name. owner, final int the method's access flags (see access, final String Opcodes).the method's name. name, final String the method's descriptor (see descriptor, final MethodVisitor Type).the method visitor to which this adapter delegates calls. May be null. methodVisitor)Constructs a new |
| protected | AnalyzerAdapter(final int
the ASM API version implemented by this visitor. Must be one of the api, final String ASMx values in Opcodes.the owner's class name. owner, final int the method's access flags (see access, final String Opcodes).the method's name. name, final String the method's descriptor (see descriptor, final MethodVisitor Type).the method visitor to which this adapter delegates calls. May be null. methodVisitor)Constructs a new |
| Modifier and Type | Method and Description |
|---|---|
| private void | |
| private Object | |
| private Object | |
| private void | |
| private void | |
| private void | |
| private void | |
| private void | |
| public void | visitFieldInsn(final int
the opcode of the type instruction to be visited. This opcode is either
GETSTATIC, PUTSTATIC, GETFIELD or PUTFIELD. opcode, final String the internal name of the field's owner class (see owner, final String Type#getInternalName()).the field's name. name, final String the field's descriptor (see descriptor)
Visits a field instruction.
Type). |
| public void | visitFrame(final int
the type of this stack map frame. Must be type, final int Opcodes#F_NEW for expanded
frames, or Opcodes#F_FULL, Opcodes#F_APPEND, Opcodes#F_CHOP, Opcodes#F_SAME or Opcodes#F_APPEND, Opcodes#F_SAME1 for compressed frames.the number of local variables in the visited frame. Long and double values
count for one variable. numLocal, final Object[] the local variable types in this frame. This array must not be modified. Primitive
types are represented by local, final int Opcodes#TOP, Opcodes#INTEGER, Opcodes#FLOAT, Opcodes#LONG, Opcodes#DOUBLE, Opcodes#NULL or
Opcodes#UNINITIALIZED_THIS (long and double are represented by a single element).
Reference types are represented by String objects (representing internal names, see Type#getInternalName()), and uninitialized types by Label objects (this label designates
the NEW instruction that created this uninitialized value).the number of operand stack elements in the visited frame. Long and double
values count for one stack element. numStack, final Object[] the operand stack types in this frame. This array must not be modified. Its
content has the same format as the "local" array. stack)Overrides org. |
| private static void | |
| public void | visitIincInsn(final int
index of the local variable to be incremented. varIndex, final int amount to increment the local variable by. increment)
Visits an IINC instruction.
|
| public void | visitInsn(final int
the opcode of the instruction to be visited. This opcode is either NOP,
ACONST_NULL, ICONST_M1, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5,
LCONST_0, LCONST_1, FCONST_0, FCONST_1, FCONST_2, DCONST_0, DCONST_1, IALOAD, LALOAD,
FALOAD, DALOAD, AALOAD, BALOAD, CALOAD, SALOAD, IASTORE, LASTORE, FASTORE, DASTORE,
AASTORE, BASTORE, CASTORE, SASTORE, POP, POP2, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2,
SWAP, IADD, LADD, FADD, DADD, ISUB, LSUB, FSUB, DSUB, IMUL, LMUL, FMUL, DMUL, IDIV, LDIV,
FDIV, DDIV, IREM, LREM, FREM, DREM, INEG, LNEG, FNEG, DNEG, ISHL, LSHL, ISHR, LSHR, IUSHR,
LUSHR, IAND, LAND, IOR, LOR, IXOR, LXOR, I2L, I2F, I2D, L2I, L2F, L2D, F2I, F2L, F2D, D2I,
D2L, D2F, I2B, I2C, I2S, LCMP, FCMPL, FCMPG, DCMPL, DCMPG, IRETURN, LRETURN, FRETURN,
DRETURN, ARETURN, RETURN, ARRAYLENGTH, ATHROW, MONITORENTER, or MONITOREXIT. opcode)Overrides org. |
| public void | visitIntInsn(final int
the opcode of the instruction to be visited. This opcode is either BIPUSH, SIPUSH
or NEWARRAY. opcode, final int the operand of the instruction to be visited. operand)When opcode is BIPUSH, operand value should be between Byte.MIN_VALUE and Byte.MAX_VALUE. When opcode is SIPUSH, operand value should be between Short.MIN_VALUE and Short.MAX_VALUE. When opcode is NEWARRAY, operand value should be one of Opcodes#T_BOOLEAN, Opcodes#T_CHAR, Opcodes#T_FLOAT, Opcodes#T_DOUBLE, Opcodes#T_BYTE,
Opcodes#T_SHORT, Opcodes#T_INT or Opcodes#T_LONG.Overrides org. |
| public void | visitInvokeDynamicInsn(final String
the method's name. name, final String the method's descriptor (see descriptor, final Handle Type).the bootstrap method. bootstrapMethodHandle, final Object... bootstrapMethodArguments)Overrides org. |
| public void | visitJumpInsn(final int
the opcode of the type instruction to be visited. This opcode is either IFEQ,
IFNE, IFLT, IFGE, IFGT, IFLE, IF_ICMPEQ, IF_ICMPNE, IF_ICMPLT, IF_ICMPGE, IF_ICMPGT,
IF_ICMPLE, IF_ACMPEQ, IF_ACMPNE, GOTO, JSR, IFNULL or IFNONNULL. opcode, final Label the operand of the instruction to be visited. This operand is a label that
designates the instruction to which the jump instruction may jump. label)
Visits a jump instruction.
|
| public void | visitLabel(final Label
a label)Label object.Overrides org. |
| public void | visitLdcInsn(final Object
the constant to be loaded on the stack. This parameter must be a non null value)Integer, a Float, a Long, a Double, a String, a Type of OBJECT or ARRAY sort for .class constants, for classes whose version is
49, a Type of METHOD sort for MethodType, a Handle for MethodHandle
constants, for classes whose version is 51 or a ConstantDynamic for a constant
dynamic for classes whose version is 55.Overrides org. |
| public void | visitLocalVariable(final String
the name of a local variable. name, final String the type descriptor of this local variable. descriptor, final String the type signature of this local variable. May be null if the local
variable type does not use generic types. signature, final Label the first instruction corresponding to the scope of this local variable
(inclusive). start, final Label the last instruction corresponding to the scope of this local variable (exclusive). end, final int the local variable's index. index)Overrides org. |
| public void | visitLookupSwitchInsn(final Label
beginning of the default handler block. dflt, final int[] the values of the keys. keys, final Label[] beginnings of the handler blocks. labels)labels[i] is the beginning of the
handler block for the keys[i] key.Overrides org. |
| public void | visitMaxs(final int
maximum stack size of the method. maxStack, final int maximum number of local variables for the method. maxLocals)Overrides org. |
| public void | visitMethodInsn(final int
the opcode of the type instruction to be visited. This opcode is either
INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC or INVOKEINTERFACE. opcodeAndSource, final String the internal name of the method's owner class (see owner, final String Type#getInternalName()).the method's name. name, final String the method's descriptor (see descriptor, final boolean Type).if the method's owner class is an interface. isInterface)
Visits a method instruction.
|
| public void | visitMultiANewArrayInsn(final String
an array type descriptor (see descriptor, final int Type).the number of dimensions of the array to allocate. numDimensions)Overrides org. |
| public void | visitTableSwitchInsn(final int
the minimum key value. min, final int the maximum key value. max, final Label beginning of the default handler block. dflt, final Label... beginnings of the handler blocks. labels)labels[i] is the beginning of the
handler block for the min + i key.Overrides org. |
| public void | visitTypeInsn(final int
the opcode of the type instruction to be visited. This opcode is either NEW,
ANEWARRAY, CHECKCAST or INSTANCEOF. opcode, final String the operand of the instruction to be visited. This operand must be the internal
name of an object or array class (see type)
Visits a type instruction.
Type#getInternalName()). |
| public void | visitVarInsn(final int
the opcode of the local variable instruction to be visited. This opcode is either
ILOAD, LLOAD, FLOAD, DLOAD, ALOAD, ISTORE, LSTORE, FSTORE, DSTORE, ASTORE or RET. opcode, final int the operand of the instruction to be visited. This operand is the index of a
local variable. varIndex)Overrides org. |
| labels | back to summary |
|---|---|
| private List<Label> labels The labels that designate the next instruction to be visited. May be null. | |
| locals | back to summary |
|---|---|
| public List<Object> locals The local variable slots for the current execution frame. Primitive types are represented by
| |
| maxLocals | back to summary |
|---|---|
| private int maxLocals The maximum number of local variables of this method. | |
| maxStack | back to summary |
|---|---|
| private int maxStack The maximum stack size of this method. | |
| owner | back to summary |
|---|---|
| private String owner The owner's class name. | |
| stack | back to summary |
|---|---|
| public List<Object> stack The operand stack slots for the current execution frame. Primitive types are represented by
| |
| uninitializedTypes | back to summary |
|---|---|
| public Map<Object, Object> uninitializedTypes The uninitialized types in the current execution frame. This map associates internal names to
Label objects (see | |
| AnalyzerAdapter | back to summary |
|---|---|
| public AnalyzerAdapter(final String owner, final int access, final String name, final String descriptor, final MethodVisitor methodVisitor) Constructs a new
| |
| AnalyzerAdapter | back to summary |
|---|---|
| protected AnalyzerAdapter(final int api, final String owner, final int access, final String name, final String descriptor, final MethodVisitor methodVisitor) Constructs a new
| |
| execute | back to summary |
|---|---|
| private void execute(final int opcode, final int intArg, final String stringArg) | |
| get | back to summary |
|---|---|
| private Object get(final int local) | |
| pop | back to summary |
|---|---|
| private Object pop() | |
| pop | back to summary |
|---|---|
| private void pop(final int numSlots) | |
| pop | back to summary |
|---|---|
| private void pop(final String descriptor) | |
| push | back to summary |
|---|---|
| private void push(final Object type) | |
| pushDescriptor | back to summary |
|---|---|
| private void pushDescriptor(final String fieldOrMethodDescriptor) | |
| set | back to summary |
|---|---|
| private void set(final int local, final Object type) | |
| visitFieldInsn | back to summary |
|---|---|
| public void visitFieldInsn(final int opcode, final String owner, final String name, final String descriptor) Overrides org. Doc from org. Visits a field instruction. A field instruction is an instruction that loads or stores the value of a field of an object.
| |
| visitFrame | back to summary |
|---|---|
| public void visitFrame(final int type, final int numLocal, final Object[] local, final int numStack, final Object[] stack) Overrides org. Doc from org. Visits the current state of the local variables and operand stack elements. This method must(*)
be called just before any instruction i that follows an unconditional branch
instruction such as GOTO or THROW, that is the target of a jump instruction, or that starts an
exception handler block. The visited types must describe the values of the local variables and
of the operand stack elements just before i is executed.
In both cases the first frame, corresponding to the method's parameters and access flags, is implicit and must not be visited. Also, it is illegal to visit two or more frames for the same code location (i.e., at least one instruction must be visited between two calls to visitFrame).
| |
| visitFrameTypes | back to summary |
|---|---|
| private static void visitFrameTypes(final int numTypes, final Object[] frameTypes, final List<Object> result) | |
| visitIincInsn | back to summary |
|---|---|
| public void visitIincInsn(final int varIndex, final int increment) Overrides org. Doc from org. Visits an IINC instruction.
| |
| visitInsn | back to summary |
|---|---|
| public void visitInsn(final int opcode) Overrides org. Doc from org. Visits a zero operand instruction.
| |
| visitIntInsn | back to summary |
|---|---|
| public void visitIntInsn(final int opcode, final int operand) Overrides org. Doc from org. Visits an instruction with a single int operand.
| |
| visitInvokeDynamicInsn | back to summary |
|---|---|
| public void visitInvokeDynamicInsn(final String name, final String descriptor, final Handle bootstrapMethodHandle, final Object... bootstrapMethodArguments) Overrides org. Doc from org. Visits an invokedynamic instruction.
| |
| visitJumpInsn | back to summary |
|---|---|
| public void visitJumpInsn(final int opcode, final Label label) Overrides org. Doc from org. Visits a jump instruction. A jump instruction is an instruction that may jump to another instruction.
| |
| visitLabel | back to summary |
|---|---|
| public void visitLabel(final Label label) Overrides org. Doc from org. Visits a label. A label designates the instruction that will be visited just after it. | |
| visitLdcInsn | back to summary |
|---|---|
| public void visitLdcInsn(final Object value) Overrides org. Doc from org. Visits a LDC instruction. Note that new constant types may be added in future versions of the Java Virtual Machine. To easily detect new constant types, implementations of this method should check for unexpected constant types, like this:
if (cst instanceof Integer) {
// ...
} else if (cst instanceof Float) {
// ...
} else if (cst instanceof Long) {
// ...
} else if (cst instanceof Double) {
// ...
} else if (cst instanceof String) {
// ...
} else if (cst instanceof Type) {
int sort = ((Type) cst).getSort();
if (sort == Type.OBJECT) {
// ...
} else if (sort == Type.ARRAY) {
// ...
} else if (sort == Type.METHOD) {
// ...
} else {
// throw an exception
}
} else if (cst instanceof Handle) {
// ...
} else if (cst instanceof ConstantDynamic) {
// ...
} else {
// throw an exception
}
| |
| visitLocalVariable | back to summary |
|---|---|
| public void visitLocalVariable(final String name, final String descriptor, final String signature, final Label start, final Label end, final int index) Overrides org. Doc from org. Visits a local variable declaration.
| |
| visitLookupSwitchInsn | back to summary |
|---|---|
| public void visitLookupSwitchInsn(final Label dflt, final int[] keys, final Label[] labels) Overrides org. Doc from org. Visits a LOOKUPSWITCH instruction. | |
| visitMaxs | back to summary |
|---|---|
| public void visitMaxs(final int maxStack, final int maxLocals) Overrides org. Doc from org. Visits the maximum stack size and the maximum number of local variables of the method.
| |
| visitMethodInsn | back to summary |
|---|---|
| public void visitMethodInsn(final int opcodeAndSource, final String owner, final String name, final String descriptor, final boolean isInterface) Overrides org. Doc from org. Visits a method instruction. A method instruction is an instruction that invokes a method.
| |
| visitMultiANewArrayInsn | back to summary |
|---|---|
| public void visitMultiANewArrayInsn(final String descriptor, final int numDimensions) Overrides org. Doc from org. Visits a MULTIANEWARRAY instruction. | |
| visitTableSwitchInsn | back to summary |
|---|---|
| public void visitTableSwitchInsn(final int min, final int max, final Label dflt, final Label... labels) Overrides org. Doc from org. Visits a TABLESWITCH instruction. | |
| visitTypeInsn | back to summary |
|---|---|
| public void visitTypeInsn(final int opcode, final String type) Overrides org. Doc from org. Visits a type instruction. A type instruction is an instruction that takes the internal name of
a class as parameter (see
| |
| visitVarInsn | back to summary |
|---|---|
| public void visitVarInsn(final int opcode, final int varIndex) Overrides org. Doc from org. Visits a local variable instruction. A local variable instruction is an instruction that loads or stores the value of a local variable.
| |