public class LocalVariablesSorter extends MethodVisitor
MethodVisitor that renumbers local variables in their order of appearance. This adapter
allows one to easily add new local variables to a method. It may be used by inheriting from this
class, but the preferred way of using it is via delegation: the next visitor in the chain can
indeed add new locals when needed by calling newLocal(io.ebean.enhance.asm.Type) on this adapter (this requires a
reference back to this LocalVariablesSorter).| Constructor and Description |
|---|
LocalVariablesSorter(int access,
String descriptor,
MethodVisitor methodVisitor)
Constructs a new
LocalVariablesSorter. |
| Modifier and Type | Method and Description |
|---|---|
int |
newLocal(Type type)
Constructs a new local variable of the given type.
|
void |
visitFrame(int type,
int numLocal,
Object[] local,
int numStack,
Object[] stack)
Visits the current state of the local variables and operand stack elements.
|
void |
visitIincInsn(int var,
int increment)
Visits an IINC instruction.
|
void |
visitLocalVariable(String name,
String descriptor,
String signature,
Label start,
Label end,
int index)
Visits a local variable declaration.
|
AnnotationVisitor |
visitLocalVariableAnnotation(int typeRef,
TypePath typePath,
Label[] start,
Label[] end,
int[] index,
String descriptor,
boolean visible)
Visits an annotation on a local variable type.
|
void |
visitMaxs(int maxStack,
int maxLocals)
Visits the maximum stack size and the maximum number of local variables of the method.
|
void |
visitVarInsn(int opcode,
int var)
Visits a local variable instruction.
|
visitAnnotableParameterCount, visitAnnotation, visitAnnotationDefault, visitAttribute, visitCode, visitEnd, visitFieldInsn, visitInsn, visitInsnAnnotation, visitIntInsn, visitInvokeDynamicInsn, visitJumpInsn, visitLabel, visitLdcInsn, visitLineNumber, visitLookupSwitchInsn, visitMethodInsn, visitMethodInsn, visitMultiANewArrayInsn, visitParameter, visitParameterAnnotation, visitTableSwitchInsn, visitTryCatchAnnotation, visitTryCatchBlock, visitTypeAnnotation, visitTypeInsnpublic LocalVariablesSorter(int access, String descriptor, MethodVisitor methodVisitor)
LocalVariablesSorter. Subclasses must not use this constructor.
Instead, they must use the LocalVariablesSorter(int, int, String, MethodVisitor)
version.access - access flags of the adapted method.descriptor - the method's descriptor (see Type).methodVisitor - the method visitor to which this adapter delegates calls.IllegalStateException - if a subclass calls this constructor.public void visitVarInsn(int opcode, int var)
MethodVisitorvisitVarInsn in class MethodVisitoropcode - 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.var - the operand of the instruction to be visited. This operand is the index of a local
variable.public void visitIincInsn(int var, int increment)
MethodVisitorvisitIincInsn in class MethodVisitorvar - index of the local variable to be incremented.increment - amount to increment the local variable by.public void visitMaxs(int maxStack, int maxLocals)
MethodVisitorvisitMaxs in class MethodVisitormaxStack - maximum stack size of the method.maxLocals - maximum number of local variables for the method.public void visitLocalVariable(String name, String descriptor, String signature, Label start, Label end, int index)
MethodVisitorvisitLocalVariable in class MethodVisitorname - the name of a local variable.descriptor - the type descriptor of this local variable.signature - the type signature of this local variable. May be null if the local
variable type does not use generic types.start - the first instruction corresponding to the scope of this local variable
(inclusive).end - the last instruction corresponding to the scope of this local variable (exclusive).index - the local variable's index.public AnnotationVisitor visitLocalVariableAnnotation(int typeRef, TypePath typePath, Label[] start, Label[] end, int[] index, String descriptor, boolean visible)
MethodVisitorvisitLocalVariableAnnotation in class MethodVisitortypeRef - a reference to the annotated type. The sort of this type reference must be
TypeReference.LOCAL_VARIABLE or TypeReference.RESOURCE_VARIABLE. See TypeReference.typePath - the path to the annotated type argument, wildcard bound, array element type, or
static inner type within 'typeRef'. May be null if the annotation targets
'typeRef' as a whole.start - the fist instructions corresponding to the continuous ranges that make the scope
of this local variable (inclusive).end - the last instructions corresponding to the continuous ranges that make the scope of
this local variable (exclusive). This array must have the same size as the 'start' array.index - the local variable's index in each range. This array must have the same size as
the 'start' array.descriptor - the class descriptor of the annotation class.visible - true if the annotation is visible at runtime.public void visitFrame(int type, int numLocal, Object[] local, int numStack, Object[] stack)
MethodVisitorOpcodes.V1_6. Opcodes.F_SAME representing frame with exactly the same locals as the
previous frame and with the empty stack.
Opcodes.F_SAME1 representing frame with exactly the same locals as the
previous frame and with single value on the stack ( numStack is 1 and
stack[0] contains value for the type of the stack item).
Opcodes.F_APPEND representing frame with current locals are the same as the
locals in the previous frame, except that additional locals are defined (
numLocal is 1, 2 or 3 and local elements contains values
representing added types).
Opcodes.F_CHOP representing frame with current locals are the same as the
locals in the previous frame, except that the last 1-3 locals are absent and with
the empty stack (numLocal is 1, 2 or 3).
Opcodes.F_FULL representing complete frame data.
visitFrame in class MethodVisitortype - the type of this stack map frame. Must be 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.numLocal - the number of local variables in the visited frame.local - the local variable types in this frame. This array must not be modified. Primitive
types are represented by 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), and
uninitialized types by Label objects (this label designates the NEW instruction that
created this uninitialized value).numStack - the number of operand stack elements in the visited frame.stack - the operand stack types in this frame. This array must not be modified. Its
content has the same format as the "local" array.Copyright © 2019. All rights reserved.