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(org.objectweb.asm.Type)
on this adapter (this
requires a reference back to this LocalVariablesSorter
).Modifier and Type | Field and Description |
---|---|
protected int |
firstLocal
Index of the first local variable, after formal parameters.
|
protected int |
nextLocal
Index of the next local variable to be created by
newLocal(org.objectweb.asm.Type) . |
api, mv
Modifier | Constructor and Description |
---|---|
protected |
LocalVariablesSorter(int api,
int access,
String desc,
MethodVisitor mv)
Creates a new
LocalVariablesSorter . |
|
LocalVariablesSorter(int access,
String desc,
MethodVisitor mv)
Creates a new
LocalVariablesSorter . |
Modifier and Type | Method and Description |
---|---|
int |
newLocal(Type type)
Creates a new local variable of the given type.
|
protected int |
newLocalMapping(Type type) |
protected void |
setLocalType(int local,
Type type)
Sets the current type of the given local variable.
|
void |
visitFrame(int type,
int nLocal,
Object[] local,
int nStack,
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 desc,
String signature,
Label start,
Label end,
int index)
Visits a local variable declaration.
|
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.
|
visitAnnotation, visitAnnotationDefault, visitAttribute, visitCode, visitEnd, visitFieldInsn, visitInsn, visitIntInsn, visitInvokeDynamicInsn, visitJumpInsn, visitLabel, visitLdcInsn, visitLineNumber, visitLookupSwitchInsn, visitMethodInsn, visitMultiANewArrayInsn, visitParameterAnnotation, visitTableSwitchInsn, visitTryCatchBlock, visitTypeInsn
protected final int firstLocal
protected int nextLocal
newLocal(org.objectweb.asm.Type)
.public LocalVariablesSorter(int access, String desc, MethodVisitor mv)
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.desc
- the method's descriptor (see Type
).mv
- the method visitor to which this adapter delegates calls.protected LocalVariablesSorter(int api, int access, String desc, MethodVisitor mv)
LocalVariablesSorter
.api
- the ASM API version implemented by this visitor. Must be one
of Opcodes.ASM4
.access
- access flags of the adapted method.desc
- the method's descriptor (see Type
).mv
- the method visitor to which this adapter delegates calls.public void visitVarInsn(int opcode, int var)
MethodVisitor
visitVarInsn
in class MethodVisitor
opcode
- 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)
MethodVisitor
visitIincInsn
in class MethodVisitor
var
- index of the local variable to be incremented.increment
- amount to increment the local variable by.public void visitMaxs(int maxStack, int maxLocals)
MethodVisitor
visitMaxs
in class MethodVisitor
maxStack
- maximum stack size of the method.maxLocals
- maximum number of local variables for the method.public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index)
MethodVisitor
visitLocalVariable
in class MethodVisitor
name
- the name of a local variable.desc
- 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 void visitFrame(int type, int nLocal, Object[] local, int nStack, Object[] stack)
MethodVisitor
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 (nStack
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 (nLocal
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 (nLocals
is 1,
2 or 3). Opcodes.F_FULL
representing complete frame
data.visitFrame
in class MethodVisitor
type
- 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.nLocal
- 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).nStack
- 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.public int newLocal(Type type)
type
- the type of the local variable to be created.protected void setLocalType(int local, Type type)
local
- a local variable identifier, as returned by newLocal()
.type
- the type of the value being stored in the local variableprotected int newLocalMapping(Type type)