MethodVisitor that generates a corresponding 'method_info' structure, as defined in the
Java Virtual Machine Specification (JVMS).
| Modifier and Type | Field and Description |
|---|---|
| private final int | accessFlags
The access_flags field of the method_info JVMS structure. |
| private final ByteVector | code
The 'code' field of the Code attribute. |
| private final int | compute
Indicates what must be computed. |
| pack-priv static final int | COMPUTE_ALL_FRAMES
Indicates that all the stack map frames must be computed. |
| pack-priv static final int | COMPUTE_INSERTED_FRAMES
Indicates that the stack map frames of type F_INSERT must be computed. |
| pack-priv static final int | COMPUTE_MAX_STACK_AND_LOCAL
Indicates that the maximum stack size and the maximum number of local variables must be computed, from scratch. |
| pack-priv static final int | COMPUTE_MAX_STACK_AND_LOCAL_FROM_FRAMES
Indicates that the maximum stack size and the maximum number of local variables must be computed, from the existing stack map frames. |
| pack-priv static final int | COMPUTE_NOTHING
Indicates that nothing must be computed. |
| private Label | currentBasicBlock
The current basic block, i.e. the basic block of the last visited instruction. |
| private int[] | currentFrame
The current stack map frame. |
| private int | currentLocals
The number of local variables in the last visited stack map frame. |
| private ByteVector | defaultValue
The default_value field of the AnnotationDefault attribute, or null. |
| private final String | descriptor
The descriptor of this method. |
| private final int | descriptorIndex
The descriptor_index field of the method_info JVMS structure. |
| private final int[] | exceptionIndexTable
The exception_index_table array of the Exceptions attribute, or null. |
| private Attribute | firstAttribute
The first non standard attribute of this method. |
| private Label | firstBasicBlock
The first basic block of the method. |
| private Attribute | firstCodeAttribute
The first non standard attribute of the Code attribute. |
| private Handler | firstHandler
The first element in the exception handler list (used to generate the exception_table of the Code attribute). |
| private boolean | hasAsmInstructions
Whether the bytecode of this method contains ASM specific instructions. |
| private boolean | hasSubroutines
Whether this method contains subroutines. |
| private int | invisibleAnnotableParameterCount
The number of method parameters that can have runtime visible annotations, or 0. |
| private Label | lastBasicBlock
The last basic block of the method (in bytecode offset order). |
| private int | lastBytecodeOffset
The start offset of the last visited instruction. |
| private AnnotationWriter | lastCodeRuntimeInvisibleTypeAnnotation
The last runtime invisible type annotation of the Code attribute. |
| private AnnotationWriter | lastCodeRuntimeVisibleTypeAnnotation
The last runtime visible type annotation of the Code attribute. |
| private Handler | lastHandler
The last element in the exception handler list (used to generate the exception_table of the Code attribute). |
| private AnnotationWriter | lastRuntimeInvisibleAnnotation
The last runtime invisible annotation of this method. |
| private AnnotationWriter[] | lastRuntimeInvisibleParameterAnnotations
The runtime invisible parameter annotations of this method. |
| private AnnotationWriter | lastRuntimeInvisibleTypeAnnotation
The last runtime invisible type annotation of this method. |
| private AnnotationWriter | lastRuntimeVisibleAnnotation
The last runtime visible annotation of this method. |
| private AnnotationWriter[] | lastRuntimeVisibleParameterAnnotations
The runtime visible parameter annotations of this method. |
| private AnnotationWriter | lastRuntimeVisibleTypeAnnotation
The last runtime visible type annotation of this method. |
| private ByteVector | lineNumberTable
The line_number_table array of the LineNumberTable code attribute, or null. |
| private int | lineNumberTableLength
The line_number_table_length field of the LineNumberTable code attribute. |
| private ByteVector | localVariableTable
The local_variable_table array of the LocalVariableTable code attribute, or null. |
| private int | localVariableTableLength
The local_variable_table_length field of the LocalVariableTable code attribute. |
| private ByteVector | localVariableTypeTable
The local_variable_type_table array of the LocalVariableTypeTable code attribute, or null. |
| private int | localVariableTypeTableLength
The local_variable_type_table_length field of the LocalVariableTypeTable code attribute. |
| private int | maxLocals
The max_locals field of the Code attribute. |
| private int | maxRelativeStackSize
The maximum relative stack size after the last visited instruction. |
| private int | maxStack
The max_stack field of the Code attribute. |
| private static final int | NA
Indicates that |
| private final String | name
The name of this method. |
| private final int | nameIndex
The name_index field of the method_info JVMS structure. |
| private final int | numberOfExceptions
The number_of_exceptions field of the Exceptions attribute. |
| private ByteVector | parameters
The 'parameters' array of the MethodParameters attribute, or null. |
| private int | parametersCount
The parameters_count field of the MethodParameters attribute. |
| private int[] | previousFrame
The last frame that was written in |
| private int | previousFrameOffset
The bytecode offset of the last frame that was written in |
| private int | relativeStackSize
The relative stack size after the last visited instruction. |
| private final int | signatureIndex
The signature_index field of the Signature attribute. |
| private int | sourceLength
The length in bytes in |
| private int | sourceOffset
The offset in bytes in |
| private static final int[] | STACK_SIZE_DELTA
The stack size variation corresponding to each JVM opcode. |
| private ByteVector | stackMapTableEntries
The 'entries' array of the StackMapTable code attribute. |
| private int | stackMapTableNumberOfEntries
The number_of_entries field of the StackMapTable code attribute. |
| private final SymbolTable | symbolTable
Where the constants used in this MethodWriter must be stored. |
| private int | visibleAnnotableParameterCount
The number of method parameters that can have runtime visible annotations, or 0. |
| Access | Constructor and Description |
|---|---|
| pack-priv | MethodWriter(final SymbolTable
where the constants used in this AnnotationWriter must be stored. symbolTable, 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 String Type).the method's signature. May be null. signature, final String[] the internal names of the method's exceptions. May be null. exceptions, final int indicates what must be computed (see #compute). compute)Constructs a new |
| Modifier and Type | Method and Description |
|---|---|
| private void | addSuccessorToCurrentBasicBlock(final int
information about the control flow edge to be added. info, final Label the successor block to be added to the current basic block. successor)Adds a successor to |
| pack-priv boolean | Returns: whether the attributes of this method can be copied from the attributes of the method_info JVMS structure in 'source.b', between 'methodInfoOffset' and 'methodInfoOffset' + 'methodInfoLength'.the source ClassReader from which the attributes of this method might be copied. source, final boolean whether the method_info JVMS structure from which the attributes
of this method might be copied contains a Synthetic attribute. hasSyntheticAttribute, final boolean whether the method_info JVMS structure from which the attributes
of this method might be copied contains a Deprecated attribute. hasDeprecatedAttribute, final int the descriptor_index field of the method_info JVMS structure from which
the attributes of this method might be copied. descriptorIndex, final int the constant pool index contained in the Signature attribute of the
method_info JVMS structure from which the attributes of this method might be copied, or 0. signatureIndex, final int the offset in 'source.b' of the Exceptions attribute of the method_info
JVMS structure from which the attributes of this method might be copied, or 0. exceptionsOffset)Returns whether the attributes of this method can be copied from the attributes of the given method (assuming there is no method visitor between the given ClassReader and this MethodWriter). |
| pack-priv final void | collectAttributePrototypes(final Attribute.
a set of attribute prototypes. attributePrototypesCollects the attributes of this method into the given set of attribute prototypes. |
| private void | |
| private void | |
| pack-priv int | Returns: the size in bytes of the method_info JVMS structure.Returns the size of the method_info JVMS structure generated by this MethodWriter. |
| private void | |
| pack-priv boolean | |
| pack-priv boolean | |
| private void | putAbstractTypes(final int
index of the first type in start, final int currentFrame to write.index of last type in end)currentFrame to write (exclusive).Puts some abstract types of |
| private void | |
| private void | putFrameType(final Object
a frame element type described using the same format as in type)MethodVisitor#visitFrame, i.e. either Opcodes#TOP, Opcodes#INTEGER, Opcodes#FLOAT, Opcodes#LONG, Opcodes#DOUBLE, Opcodes#NULL, or
Opcodes#UNINITIALIZED_THIS, or the internal name of a class, or a Label designating
a NEW instruction (for uninitialized types).Puts the given public API frame element type in |
| pack-priv void | putMethodInfo(final ByteVector
where the method_info structure must be put. output)Puts the content of the method_info JVMS structure generated by this MethodWriter into the given ByteVector. |
| pack-priv void | setMethodAttributesSource(final int
the offset in 'symbolTable.getSource()' of the method_info JVMS
structure from which the attributes of this method will be copied. methodInfoOffset, final int the length in 'symbolTable.getSource()' of the method_info JVMS
structure from which the attributes of this method will be copied. methodInfoLength)Sets the source from which the attributes of this method will be copied. |
| pack-priv void | visitAbstractType(final int
the index of the element to be set in frameIndex, final int currentFrame.an abstract type. abstractType)Sets an abstract type in |
| public void | visitAnnotableParameterCount(final int
the number of method parameters than can have annotations. This number
must be less or equal than the number of parameter types in the method descriptor. It can
be strictly less when a method has synthetic parameters and when these parameters are
ignored when computing parameter indices for the purpose of parameter annotations (see
https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-4.html#jvms-4.7.18). parameterCount, final boolean true to define the number of method parameters that can have
annotations visible at runtime, false to define the number of method parameters
that can have annotations invisible at runtime. visible)Overrides org. |
| public AnnotationVisitor | visitAnnotation(final String
the class descriptor of the annotation class. descriptor, final boolean true if the annotation is visible at runtime. visible)Overrides org. |
| public AnnotationVisitor | visitAnnotationDefault()
Overrides org. |
| public void | visitAttribute(final Attribute
an attribute. attribute)Overrides org. |
| public void | visitCode()
Starts the visit of the method's code, if any (i.e. non abstract method).
|
| public 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)Type).Overrides org. |
| 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)
Visits the current state of the local variables and operand stack elements.
|
| pack-priv void | visitFrameEnd()
Ends the visit of |
| pack-priv int | Returns: the index of the next element to be written in this frame.the bytecode offset of the instruction to which the frame corresponds. offset, final int the number of local variables in the frame. numLocal, final int the number of stack elements in the frame. numStack)Starts the visit of a new stack map frame, stored in |
| public void | visitIincInsn(final int
index of the local variable to be incremented. varIndex, final int amount to increment the local variable by. increment)Overrides org. |
| 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)
Visits a zero operand instruction.
|
| public AnnotationVisitor | visitInsnAnnotation(final int
a reference to the annotated type. The sort of this type reference must be
typeRef, final TypePath TypeReference#INSTANCEOF, TypeReference#NEW, TypeReference#CONSTRUCTOR_REFERENCE, TypeReference#METHOD_REFERENCE, TypeReference#CAST, TypeReference#CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT, TypeReference#METHOD_INVOCATION_TYPE_ARGUMENT, TypeReference#CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT, or TypeReference#METHOD_REFERENCE_TYPE_ARGUMENT. See TypeReference.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. typePath, final String the class descriptor of the annotation class. descriptor, final boolean true if the annotation is visible at runtime. visible)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)Overrides org. |
| public void | visitLabel(final Label
a label)
Visits a label.
Label object. |
| 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 | visitLineNumber(final int
a line number. This number refers to the source file from which the class was
compiled. line, final Label the first instruction corresponding to this line number. start)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 AnnotationVisitor | visitLocalVariableAnnotation(final int
a reference to the annotated type. The sort of this type reference must be
typeRef, final TypePath TypeReference#LOCAL_VARIABLE or TypeReference#RESOURCE_VARIABLE. See TypeReference.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. typePath, final Label[] the fist instructions corresponding to the continuous ranges that make the scope
of this local variable (inclusive). start, final Label[] 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. end, final int[] the local variable's index in each range. This array must have the same size as
the 'start' array. index, final String the class descriptor of the annotation class. descriptor, final boolean true if the annotation is visible at runtime. visible)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)
Visits the maximum stack size and the maximum number of local variables of the method.
|
| public void | visitMethodInsn(final int
the opcode of the type instruction to be visited. This opcode is either
INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC or INVOKEINTERFACE. opcode, 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)Overrides org. |
| 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 | visitParameter(final String
parameter name or null if none is provided. name, final int the parameter's access flags, only access)ACC_FINAL, ACC_SYNTHETIC
or/and ACC_MANDATED are allowed (see Opcodes).Overrides org. |
| public AnnotationVisitor | visitParameterAnnotation(final int
the parameter index. This index must be strictly smaller than the number of
parameters in the method descriptor, and strictly smaller than the parameter count
specified in parameter, final String visitAnnotableParameterCount.Important Note a parameter index i is not required to correspond to the i'th parameter descriptor in the method descriptor, in particular in case of synthetic parameters (see https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-4.html#jvms-4.7.18). the class descriptor of the annotation class. annotationDescriptor, final boolean true if the annotation is visible at runtime. visible)Overrides org. |
| private void | |
| 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 AnnotationVisitor | visitTryCatchAnnotation(final int
a reference to the annotated type. The sort of this type reference must be
typeRef, final TypePath TypeReference#EXCEPTION_PARAMETER. See TypeReference.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. typePath, final String the class descriptor of the annotation class. descriptor, final boolean true if the annotation is visible at runtime. visible)Overrides org. |
| public void | visitTryCatchBlock(final Label
the beginning of the exception handler's scope (inclusive). start, final Label the end of the exception handler's scope (exclusive). end, final Label the beginning of the exception handler's code. handler, final String the internal name of the type of exceptions handled by the handler (see type)Type#getInternalName()), or null to catch any exceptions (for "finally"
blocks).Overrides org. |
| public AnnotationVisitor | visitTypeAnnotation(final int
a reference to the annotated type. The sort of this type reference must be
typeRef, final TypePath TypeReference#METHOD_TYPE_PARAMETER, TypeReference#METHOD_TYPE_PARAMETER_BOUND, TypeReference#METHOD_RETURN, TypeReference#METHOD_RECEIVER, TypeReference#METHOD_FORMAL_PARAMETER or TypeReference#THROWS. See TypeReference.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. typePath, final String the class descriptor of the annotation class. descriptor, final boolean true if the annotation is visible at runtime. visible)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)Type#getInternalName()).Overrides org. |
| 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. |