Package org.objectweb.asm.commons
Class AnalyzerAdapter
java.lang.Object
org.objectweb.asm.MethodVisitor
org.objectweb.asm.commons.AnalyzerAdapter
public class AnalyzerAdapter
extends org.objectweb.asm.MethodVisitor
A
MethodVisitor
that keeps track of stack map frame changes between visitFrame(int, int, Object[], int, Object[])
calls. This adapter must be used with the 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.-
Field Summary
FieldsModifier and TypeFieldDescriptionThe local variable slots for the current execution frame.The operand stack slots for the current execution frame.The uninitialized types in the current execution frame.Fields inherited from class org.objectweb.asm.MethodVisitor
api, mv
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
AnalyzerAdapter
(int api, String owner, int access, String name, String descriptor, org.objectweb.asm.MethodVisitor methodVisitor) Constructs a newAnalyzerAdapter
.AnalyzerAdapter
(String owner, int access, String name, String descriptor, org.objectweb.asm.MethodVisitor methodVisitor) Constructs a newAnalyzerAdapter
. -
Method Summary
Modifier and TypeMethodDescriptionvoid
visitFieldInsn
(int opcode, String owner, String name, String descriptor) void
visitFrame
(int type, int numLocal, Object[] local, int numStack, Object[] stack) void
visitIincInsn
(int varIndex, int increment) void
visitInsn
(int opcode) void
visitIntInsn
(int opcode, int operand) void
visitInvokeDynamicInsn
(String name, String descriptor, org.objectweb.asm.Handle bootstrapMethodHandle, Object... bootstrapMethodArguments) void
visitJumpInsn
(int opcode, org.objectweb.asm.Label label) void
visitLabel
(org.objectweb.asm.Label label) void
visitLdcInsn
(Object value) void
visitLocalVariable
(String name, String descriptor, String signature, org.objectweb.asm.Label start, org.objectweb.asm.Label end, int index) void
visitLookupSwitchInsn
(org.objectweb.asm.Label dflt, int[] keys, org.objectweb.asm.Label[] labels) void
visitMaxs
(int maxStack, int maxLocals) void
visitMethodInsn
(int opcodeAndSource, String owner, String name, String descriptor, boolean isInterface) void
visitMultiANewArrayInsn
(String descriptor, int numDimensions) void
visitTableSwitchInsn
(int min, int max, org.objectweb.asm.Label dflt, org.objectweb.asm.Label... labels) void
visitTypeInsn
(int opcode, String type) void
visitVarInsn
(int opcode, int varIndex) Methods inherited from class org.objectweb.asm.MethodVisitor
getDelegate, visitAnnotableParameterCount, visitAnnotation, visitAnnotationDefault, visitAttribute, visitCode, visitEnd, visitInsnAnnotation, visitLineNumber, visitLocalVariableAnnotation, visitMethodInsn, visitParameter, visitParameterAnnotation, visitTryCatchAnnotation, visitTryCatchBlock, visitTypeAnnotation
-
Field Details
-
locals
The local variable slots for the current execution frame. Primitive types are represented byOpcodes.TOP
,Opcodes.INTEGER
,Opcodes.FLOAT
,Opcodes.LONG
,Opcodes.DOUBLE
,Opcodes.NULL
orOpcodes.UNINITIALIZED_THIS
(long and double are represented by two elements, the second one being TOP). Reference types are represented by String objects (representing internal names, seeType.getInternalName()
), and uninitialized types by Label objects (this label designates the NEW instruction that created this uninitialized value). This field is null for unreachable instructions. -
stack
The operand stack slots for the current execution frame. Primitive types are represented byOpcodes.TOP
,Opcodes.INTEGER
,Opcodes.FLOAT
,Opcodes.LONG
,Opcodes.DOUBLE
,Opcodes.NULL
orOpcodes.UNINITIALIZED_THIS
(long and double are represented by two elements, the second one being TOP). Reference types are represented by String objects (representing internal names, seeType.getInternalName()
), and uninitialized types by Label objects (this label designates the NEW instruction that created this uninitialized value). This field is null for unreachable instructions. -
uninitializedTypes
The uninitialized types in the current execution frame. This map associates internal names to Label objects (seeType.getInternalName()
). Each label designates a NEW instruction that created the currently uninitialized types, and the associated internal name represents the NEW operand, i.e. the final, initialized type value.
-
-
Constructor Details
-
AnalyzerAdapter
public AnalyzerAdapter(String owner, int access, String name, String descriptor, org.objectweb.asm.MethodVisitor methodVisitor) Constructs a newAnalyzerAdapter
. Subclasses must not use this constructor. Instead, they must use theAnalyzerAdapter(int, String, int, String, String, MethodVisitor)
version.- Parameters:
owner
- the owner's class name.access
- the method's access flags (seeOpcodes
).name
- the method's name.descriptor
- the method's descriptor (seeType
).methodVisitor
- the method visitor to which this adapter delegates calls. May be null.- Throws:
IllegalStateException
- If a subclass calls this constructor.
-
AnalyzerAdapter
protected AnalyzerAdapter(int api, String owner, int access, String name, String descriptor, org.objectweb.asm.MethodVisitor methodVisitor) Constructs a newAnalyzerAdapter
.- Parameters:
api
- the ASM API version implemented by this visitor. Must be one of theASM
x values inOpcodes
.owner
- the owner's class name.access
- the method's access flags (seeOpcodes
).name
- the method's name.descriptor
- the method's descriptor (seeType
).methodVisitor
- the method visitor to which this adapter delegates calls. May be null.
-
-
Method Details
-
visitFrame
- Overrides:
visitFrame
in classorg.objectweb.asm.MethodVisitor
-
visitInsn
public void visitInsn(int opcode) - Overrides:
visitInsn
in classorg.objectweb.asm.MethodVisitor
-
visitIntInsn
public void visitIntInsn(int opcode, int operand) - Overrides:
visitIntInsn
in classorg.objectweb.asm.MethodVisitor
-
visitVarInsn
public void visitVarInsn(int opcode, int varIndex) - Overrides:
visitVarInsn
in classorg.objectweb.asm.MethodVisitor
-
visitTypeInsn
- Overrides:
visitTypeInsn
in classorg.objectweb.asm.MethodVisitor
-
visitFieldInsn
- Overrides:
visitFieldInsn
in classorg.objectweb.asm.MethodVisitor
-
visitMethodInsn
public void visitMethodInsn(int opcodeAndSource, String owner, String name, String descriptor, boolean isInterface) - Overrides:
visitMethodInsn
in classorg.objectweb.asm.MethodVisitor
-
visitInvokeDynamicInsn
public void visitInvokeDynamicInsn(String name, String descriptor, org.objectweb.asm.Handle bootstrapMethodHandle, Object... bootstrapMethodArguments) - Overrides:
visitInvokeDynamicInsn
in classorg.objectweb.asm.MethodVisitor
-
visitJumpInsn
public void visitJumpInsn(int opcode, org.objectweb.asm.Label label) - Overrides:
visitJumpInsn
in classorg.objectweb.asm.MethodVisitor
-
visitLabel
public void visitLabel(org.objectweb.asm.Label label) - Overrides:
visitLabel
in classorg.objectweb.asm.MethodVisitor
-
visitLdcInsn
- Overrides:
visitLdcInsn
in classorg.objectweb.asm.MethodVisitor
-
visitIincInsn
public void visitIincInsn(int varIndex, int increment) - Overrides:
visitIincInsn
in classorg.objectweb.asm.MethodVisitor
-
visitTableSwitchInsn
public void visitTableSwitchInsn(int min, int max, org.objectweb.asm.Label dflt, org.objectweb.asm.Label... labels) - Overrides:
visitTableSwitchInsn
in classorg.objectweb.asm.MethodVisitor
-
visitLookupSwitchInsn
public void visitLookupSwitchInsn(org.objectweb.asm.Label dflt, int[] keys, org.objectweb.asm.Label[] labels) - Overrides:
visitLookupSwitchInsn
in classorg.objectweb.asm.MethodVisitor
-
visitMultiANewArrayInsn
- Overrides:
visitMultiANewArrayInsn
in classorg.objectweb.asm.MethodVisitor
-
visitLocalVariable
public void visitLocalVariable(String name, String descriptor, String signature, org.objectweb.asm.Label start, org.objectweb.asm.Label end, int index) - Overrides:
visitLocalVariable
in classorg.objectweb.asm.MethodVisitor
-
visitMaxs
public void visitMaxs(int maxStack, int maxLocals) - Overrides:
visitMaxs
in classorg.objectweb.asm.MethodVisitor
-