Package org.openjdk.jmc.agent.jfr.impl
Class JFRMethodAdvisor
java.lang.Object
org.objectweb.asm.MethodVisitor
org.objectweb.asm.commons.LocalVariablesSorter
org.objectweb.asm.commons.GeneratorAdapter
org.objectweb.asm.commons.AdviceAdapter
org.openjdk.jmc.agent.jfr.impl.JFRMethodAdvisor
- All Implemented Interfaces:
org.objectweb.asm.Opcodes
public class JFRMethodAdvisor
extends org.objectweb.asm.commons.AdviceAdapter
This class is responsible for transforming the method to be instrumented. Code emitter for JFR
next, i.e. the version of JFR distributed with JDK 9 and later.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final org.objectweb.asm.Type[]private org.objectweb.asm.Labelprivate intprivate final org.objectweb.asm.Typeprivate final Class<?> private final org.objectweb.asm.Typeprivate booleanprivate static final Stringprivate final JFRTransformDescriptorprivate org.objectweb.asm.Labelprivate org.objectweb.asm.LabelFields inherited from class org.objectweb.asm.commons.AdviceAdapter
methodAccess, methodDescFields inherited from class org.objectweb.asm.commons.GeneratorAdapter
ADD, AND, DIV, EQ, GE, GT, LE, LT, MUL, NE, NEG, OR, REM, SHL, SHR, SUB, USHR, XORFields inherited from class org.objectweb.asm.commons.LocalVariablesSorter
firstLocal, nextLocalFields inherited from class org.objectweb.asm.MethodVisitor
api, mvFields inherited from interface org.objectweb.asm.Opcodes
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, ACC_MODULE, ACC_NATIVE, ACC_OPEN, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_RECORD, ACC_STATIC, ACC_STATIC_PHASE, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_TRANSITIVE, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM10_EXPERIMENTAL, ASM4, ASM5, ASM6, ASM7, ASM8, ASM9, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, H_GETFIELD, H_GETSTATIC, H_INVOKEINTERFACE, H_INVOKESPECIAL, H_INVOKESTATIC, H_INVOKEVIRTUAL, H_NEWINVOKESPECIAL, H_PUTFIELD, H_PUTSTATIC, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SOURCE_DEPRECATED, SOURCE_MASK, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, V_PREVIEW, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V9 -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedJFRMethodAdvisor(JFRTransformDescriptor transformDescriptor, Class<?> inspectionClass, int api, org.objectweb.asm.MethodVisitor mv, int access, String name, String desc) -
Method Summary
Modifier and TypeMethodDescriptionprivate voidprivate org.objectweb.asm.Typeconvertify(org.objectweb.asm.MethodVisitor mv, Attribute convertable, org.objectweb.asm.Type type) private org.objectweb.asm.Typeconvertify(org.objectweb.asm.MethodVisitor mv, ResolvedConvertable resolvedConvertable, org.objectweb.asm.Type type) private voidGenerates the transformation for instantiating the event type, setting its parameter and field attributes and call begin().private voidemitSettingReturnParam(int opcode, ReturnValue returnValue) private voidloadField(ReferenceChain refChain) protected voidprotected voidonMethodExit(int opcode) voidvoidvisitEnd()private voidwriteAttribute(Attribute param, org.objectweb.asm.Type type) Methods inherited from class org.objectweb.asm.commons.AdviceAdapter
visitFieldInsn, visitInsn, visitIntInsn, visitInvokeDynamicInsn, visitJumpInsn, visitLabel, visitLdcInsn, visitLookupSwitchInsn, visitMethodInsn, visitMultiANewArrayInsn, visitTableSwitchInsn, visitTryCatchBlock, visitTypeInsn, visitVarInsnMethods inherited from class org.objectweb.asm.commons.GeneratorAdapter
arrayLength, arrayLoad, arrayStore, box, cast, catchException, checkCast, dup, dup2, dup2X1, dup2X2, dupX1, dupX2, endMethod, getAccess, getArgumentTypes, getField, getLocalType, getName, getReturnType, getStatic, goTo, ifCmp, ifICmp, ifNonNull, ifNull, ifZCmp, iinc, instanceOf, invokeConstructor, invokeDynamic, invokeInterface, invokeStatic, invokeVirtual, loadArg, loadArgArray, loadArgs, loadArgs, loadLocal, loadLocal, loadThis, mark, mark, math, monitorEnter, monitorExit, newArray, newInstance, newLabel, not, pop, pop2, push, push, push, push, push, push, push, push, push, putField, putStatic, ret, returnValue, setLocalType, storeArg, storeLocal, storeLocal, swap, swap, tableSwitch, tableSwitch, throwException, throwException, unbox, valueOfMethods inherited from class org.objectweb.asm.commons.LocalVariablesSorter
newLocal, newLocalMapping, updateNewLocals, visitFrame, visitIincInsn, visitLocalVariable, visitLocalVariableAnnotation, visitMaxsMethods inherited from class org.objectweb.asm.MethodVisitor
getDelegate, visitAnnotableParameterCount, visitAnnotation, visitAnnotationDefault, visitAttribute, visitInsnAnnotation, visitLineNumber, visitMethodInsn, visitParameter, visitParameterAnnotation, visitTryCatchAnnotation, visitTypeAnnotation
-
Field Details
-
THROWABLE_BINARY_NAME
- See Also:
-
transformDescriptor
-
inspectionClass
-
argumentTypesRef
private final org.objectweb.asm.Type[] argumentTypesRef -
returnTypeRef
private final org.objectweb.asm.Type returnTypeRef -
eventType
private final org.objectweb.asm.Type eventType -
eventLocal
private int eventLocal -
tryBegin
private org.objectweb.asm.Label tryBegin -
tryEnd
private org.objectweb.asm.Label tryEnd -
catchBegin
private org.objectweb.asm.Label catchBegin -
shouldInstrumentThrow
private boolean shouldInstrumentThrow
-
-
Constructor Details
-
JFRMethodAdvisor
protected JFRMethodAdvisor(JFRTransformDescriptor transformDescriptor, Class<?> inspectionClass, int api, org.objectweb.asm.MethodVisitor mv, int access, String name, String desc)
-
-
Method Details
-
visitCode
public void visitCode()- Overrides:
visitCodein classorg.objectweb.asm.commons.AdviceAdapter
-
visitEnd
public void visitEnd()- Overrides:
visitEndin classorg.objectweb.asm.MethodVisitor
-
onMethodEnter
protected void onMethodEnter()- Overrides:
onMethodEnterin classorg.objectweb.asm.commons.AdviceAdapter
-
createEvent
Generates the transformation for instantiating the event type, setting its parameter and field attributes and call begin(). -
loadField
-
writeAttribute
-
convertify
private org.objectweb.asm.Type convertify(org.objectweb.asm.MethodVisitor mv, Attribute convertable, org.objectweb.asm.Type type) throws MalformedConverterException - Throws:
MalformedConverterException
-
convertify
private org.objectweb.asm.Type convertify(org.objectweb.asm.MethodVisitor mv, ResolvedConvertable resolvedConvertable, org.objectweb.asm.Type type) throws MalformedConverterException - Throws:
MalformedConverterException
-
onMethodExit
protected void onMethodExit(int opcode) - Overrides:
onMethodExitin classorg.objectweb.asm.commons.AdviceAdapter
-
emitSettingReturnParam
private void emitSettingReturnParam(int opcode, ReturnValue returnValue) throws MalformedConverterException - Throws:
MalformedConverterException
-
commitEvent
private void commitEvent()
-