Package mockit.asm.methods
Class MethodWriter
java.lang.Object
mockit.asm.BaseWriter
mockit.asm.methods.MethodVisitor
mockit.asm.methods.MethodWriter
A
MethodVisitor
that generates methods in bytecode form. Each visit method of this class appends the bytecode
corresponding to the visited instruction to a byte vector, in the order these methods are called.-
Field Summary
FieldsModifier and TypeFieldDescriptionfinal ClassWriter
The class writer to which this method must be added.Fields inherited from class mockit.asm.BaseWriter
annotations, classOrMemberAccess, cp
-
Constructor Summary
ConstructorsConstructorDescriptionMethodWriter
(ClassWriter cw, int access, String name, String desc, String signature, String[] exceptions, boolean computeFrames) Initializes this MethodWriter. -
Method Summary
Modifier and TypeMethodDescription@org.checkerframework.checker.index.qual.NonNegative int
getSize()
Returns the size of the bytecode of this method.protected void
put
(ByteVector out) Puts the bytecode of this method in the given byte vector.void
visitFieldInsn
(int opcode, String owner, String name, String desc) Visits a field access instruction, which loads or stores the value of a field of an object or a class.void
visitIincInsn
(@org.checkerframework.checker.index.qual.NonNegative int varIndex, int increment) Visits anIINC
instruction.void
visitInsn
(int opcode) Visits a zero operand instruction.void
visitIntInsn
(int opcode, int operand) Visits an instruction with a singleint
operand.void
visitInvokeDynamicInsn
(String name, String desc, MethodHandle bsm, Object... bsmArgs) Visits anINVOKEDYNAMIC
instruction.void
visitJumpInsn
(int opcode, Label label) Visits a jump instruction.void
visitLabel
(Label label) Visits a label, which designates the instruction that will be visited just after it.void
visitLdcInsn
(Object cst) Visits aLDC
instruction.void
visitLineNumber
(@org.checkerframework.checker.index.qual.NonNegative int line, Label start) Visits a line number within the body of the method.void
visitLocalVariable
(String name, String desc, String signature, Label start, Label end, @org.checkerframework.checker.index.qual.NonNegative int index) Visits a local variable declaration.void
visitLookupSwitchInsn
(Label dflt, int[] keys, Label[] labels) Visits aLOOKUPSWITCH
instruction.void
visitMaxStack
(@org.checkerframework.checker.index.qual.NonNegative int maxStack) Visits the maximum stack size of the method.void
visitMethodInsn
(int opcode, String owner, String name, String desc, boolean itf) Visits a method invocation instruction, which invokes a method or constructor.void
visitMultiANewArrayInsn
(String desc, @org.checkerframework.checker.index.qual.NonNegative int dims) Visits aMULTIANEWARRAY
instruction.visitParameterAnnotation
(@org.checkerframework.checker.index.qual.NonNegative int parameter, String desc) Visits an annotation on a parameter of the method being visited.void
visitTableSwitchInsn
(int min, int max, Label dflt, Label... labels) Visits aTABLESWITCH
instruction.void
visitTryCatchBlock
(Label start, Label end, Label handler, String type) Visits atry..catch
block.void
visitTypeInsn
(int opcode, String typeDesc) Visits a type instruction, which takes the internal name of a class as parameter.void
visitVarInsn
(int opcode, @org.checkerframework.checker.index.qual.NonNegative int varIndex) Visits a local variable instruction, which loads or stores the value of a local variable.Methods inherited from class mockit.asm.BaseWriter
createMarkerAttributes, getAnnotationsSize, getConstantPoolGeneration, getMarkerAttributeCount, getMarkerAttributesSize, put, putAccess, putAnnotations, putMarkerAttributes, visitAnnotation, visitEnd
-
Field Details
-
cw
The class writer to which this method must be added.
-
-
Constructor Details
-
MethodWriter
public MethodWriter(@NonNull ClassWriter cw, int access, @NonNull String name, @NonNull String desc, @Nullable String signature, @Nullable String[] exceptions, boolean computeFrames) Initializes this MethodWriter.- Parameters:
cw
- the class writer in which the method must be addedaccess
- the method's access flags (seeOpcodes
)name
- the method's namedesc
- the method's descriptor (seeJavaType
)signature
- the method's signatureexceptions
- the internal names of the method's exceptionscomputeFrames
-true
if the stack map tables must be recomputed from scratch
-
-
Method Details
-
visitParameterAnnotation
@NonNull public AnnotationVisitor visitParameterAnnotation(@org.checkerframework.checker.index.qual.NonNegative int parameter, @NonNull String desc) Description copied from class:MethodVisitor
Visits an annotation on a parameter of the method being visited.- Overrides:
visitParameterAnnotation
in classMethodVisitor
- Parameters:
parameter
- the parameter indexdesc
- the descriptor of the annotation type- Returns:
- a visitor to visit the annotation values, or
null
if this visitor is not interested in visiting this annotation
-
visitInsn
public void visitInsn(int opcode) Description copied from class:MethodVisitor
Visits a zero operand instruction.- Overrides:
visitInsn
in classMethodVisitor
- Parameters:
opcode
- the opcode of the instruction to be visited: NOP, ACONST_NULL, ICONST_M1, ICONST_0 ICONST_0 to ICONST_5, LCONST_0, LCONST_1, FCONST_0 to 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
-
visitIntInsn
public void visitIntInsn(int opcode, int operand) Description copied from class:MethodVisitor
Visits an instruction with a singleint
operand.- Overrides:
visitIntInsn
in classMethodVisitor
- Parameters:
opcode
- the opcode of the instruction to be visited: BIPUSH, SIPUSH, or NEWARRAYoperand
- the operand of the instruction to be visited: when opcode is BIPUSH, it's betweenByte.MIN_VALUE
andByte.MAX_VALUE
; when opcode is SIPUSH, it's betweenShort.MIN_VALUE
andShort.MAX_VALUE
; when opcode is NEWARRAY, the operand value is one of theArrayElementType
values
-
visitVarInsn
public void visitVarInsn(int opcode, @org.checkerframework.checker.index.qual.NonNegative int varIndex) Description copied from class:MethodVisitor
Visits a local variable instruction, which loads or stores the value of a local variable.- Overrides:
visitVarInsn
in classMethodVisitor
- Parameters:
opcode
- the opcode of the local variable instruction to be visited: ILOAD, LLOAD, FLOAD, DLOAD, ALOAD, ISTORE, LSTORE, FSTORE, DSTORE, ASTORE or RETvarIndex
- the operand of the instruction to be visited, which is the index of a local variable
-
visitTypeInsn
Description copied from class:MethodVisitor
Visits a type instruction, which takes the internal name of a class as parameter.- Overrides:
visitTypeInsn
in classMethodVisitor
- Parameters:
opcode
- the opcode of the instruction to be visited: NEW, ANEWARRAY, CHECKCAST, or INSTANCEOFtypeDesc
- the operand of the instruction, which is the internal name of an object or array class
-
visitFieldInsn
public void visitFieldInsn(int opcode, @NonNull String owner, @NonNull String name, @NonNull String desc) Description copied from class:MethodVisitor
Visits a field access instruction, which loads or stores the value of a field of an object or a class.- Overrides:
visitFieldInsn
in classMethodVisitor
- Parameters:
opcode
- the opcode of the instruction to be visited: GETSTATIC, PUTSTATIC, GETFIELD, or PUTFIELDowner
- the internal name of the field's owner classname
- the field's namedesc
- the field's descriptor (seeJavaType
)
-
visitMethodInsn
public void visitMethodInsn(int opcode, @NonNull String owner, @NonNull String name, @NonNull String desc, boolean itf) Description copied from class:MethodVisitor
Visits a method invocation instruction, which invokes a method or constructor.- Overrides:
visitMethodInsn
in classMethodVisitor
- Parameters:
opcode
- the opcode of the instruction: INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC, or INVOKEINTERFACEowner
- the internal name of the method's owner classname
- the method's namedesc
- the method's descriptor (seeJavaType
)itf
- whether the method's owner class is an interface or not
-
visitInvokeDynamicInsn
public void visitInvokeDynamicInsn(@NonNull String name, @NonNull String desc, @NonNull MethodHandle bsm, @NonNull Object... bsmArgs) Description copied from class:MethodVisitor
Visits anINVOKEDYNAMIC
instruction.- Overrides:
visitInvokeDynamicInsn
in classMethodVisitor
- Parameters:
name
- the method's namedesc
- the method's descriptor (seeJavaType
)bsm
- the bootstrap methodbsmArgs
- the bootstrap method constant arguments, where each argument must be anInteger
,Float
,Long
,Double
,String
,JavaType
, orMethodHandle
value
-
visitJumpInsn
Description copied from class:MethodVisitor
Visits a jump instruction.- Overrides:
visitJumpInsn
in classMethodVisitor
- Parameters:
opcode
- the opcode of the jump instruction to be visited: 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 IFNONNULLlabel
- the operand of the instruction to be visited, which is a label that designates the instruction to which the jump instruction may jump
-
visitLabel
Description copied from class:MethodVisitor
Visits a label, which designates the instruction that will be visited just after it.- Overrides:
visitLabel
in classMethodVisitor
-
visitLdcInsn
Description copied from class:MethodVisitor
Visits aLDC
instruction.- Overrides:
visitLdcInsn
in classMethodVisitor
- Parameters:
cst
- the constant to be loaded on the stack, which must be a non nullInteger
/Float
/Long
/Double
/String
, anObjectType
orArrayType
for.class
constants, aMethodType
, or aMethodHandle
-
visitIincInsn
public void visitIincInsn(@org.checkerframework.checker.index.qual.NonNegative int varIndex, int increment) Description copied from class:MethodVisitor
Visits anIINC
instruction.- Overrides:
visitIincInsn
in classMethodVisitor
- Parameters:
varIndex
- index of the local variable to be incrementedincrement
- amount to increment the local variable by
-
visitTableSwitchInsn
Description copied from class:MethodVisitor
Visits aTABLESWITCH
instruction.- Overrides:
visitTableSwitchInsn
in classMethodVisitor
- Parameters:
min
- the minimum key valuemax
- the maximum key valuedflt
- beginning of the default handler blocklabels
- beginnings of the handler blocks;labels[i]
is the beginning of the handler block for themin + i
key
-
visitLookupSwitchInsn
public void visitLookupSwitchInsn(@NonNull Label dflt, @NonNull int[] keys, @NonNull Label[] labels) Description copied from class:MethodVisitor
Visits aLOOKUPSWITCH
instruction.- Overrides:
visitLookupSwitchInsn
in classMethodVisitor
- Parameters:
dflt
- beginning of the default handler blockkeys
- the values of the keyslabels
- beginnings of the handler blocks;labels[i]
is the beginning of the handler block for thekeys[i]
-
visitMultiANewArrayInsn
public void visitMultiANewArrayInsn(@NonNull String desc, @org.checkerframework.checker.index.qual.NonNegative int dims) Description copied from class:MethodVisitor
Visits aMULTIANEWARRAY
instruction.- Overrides:
visitMultiANewArrayInsn
in classMethodVisitor
- Parameters:
desc
- an array type descriptor (seeArrayType
)dims
- number of dimensions of the array to allocate
-
visitTryCatchBlock
public void visitTryCatchBlock(@NonNull Label start, @NonNull Label end, @NonNull Label handler, @Nullable String type) Description copied from class:MethodVisitor
Visits atry..catch
block.- Overrides:
visitTryCatchBlock
in classMethodVisitor
- Parameters:
start
- beginning of the exception handler's scope (inclusive)end
- end of the exception handler's scope (exclusive)handler
- beginning of the exception handler's codetype
- internal name of the type of exceptions handled by the handler, ornull
to catch any exceptions (for "finally" blocks)
-
visitLocalVariable
public void visitLocalVariable(@NonNull String name, @NonNull String desc, @Nullable String signature, @NonNull Label start, @NonNull Label end, @org.checkerframework.checker.index.qual.NonNegative int index) Description copied from class:MethodVisitor
Visits a local variable declaration.- Overrides:
visitLocalVariable
in classMethodVisitor
- Parameters:
name
- the name of the local variabledesc
- the type descriptor of the local variablesignature
- the type signature of the local variable;null
when the local variable type does not use generic typesstart
- 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
-
visitLineNumber
public void visitLineNumber(@org.checkerframework.checker.index.qual.NonNegative int line, @NonNull Label start) Description copied from class:MethodVisitor
Visits a line number within the body of the method.- Overrides:
visitLineNumber
in classMethodVisitor
- Parameters:
line
- a line number, which refers to the source file from which the class was compiledstart
- the first instruction corresponding to this line number
-
visitMaxStack
public void visitMaxStack(@org.checkerframework.checker.index.qual.NonNegative int maxStack) Description copied from class:MethodVisitor
Visits the maximum stack size of the method.- Overrides:
visitMaxStack
in classMethodVisitor
-
getSize
public @org.checkerframework.checker.index.qual.NonNegative int getSize()Returns the size of the bytecode of this method. -
put
Puts the bytecode of this method in the given byte vector.- Overrides:
put
in classBaseWriter
-
getCurrentBlock
-