Class 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

      Fields 
      Modifier and Type Field Description
      private org.objectweb.asm.Type[] argumentTypesRef  
      private org.objectweb.asm.Label catchBegin  
      private int eventLocal  
      private org.objectweb.asm.Type eventType  
      private java.lang.Class<?> inspectionClass  
      private org.objectweb.asm.Type returnTypeRef  
      private boolean shouldInstrumentThrow  
      private static java.lang.String THROWABLE_BINARY_NAME  
      private JFRTransformDescriptor transformDescriptor  
      private org.objectweb.asm.Label tryBegin  
      private org.objectweb.asm.Label tryEnd  
      • Fields inherited from class org.objectweb.asm.commons.AdviceAdapter

        methodAccess, methodDesc
      • Fields 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, XOR
      • Fields inherited from class org.objectweb.asm.commons.LocalVariablesSorter

        firstLocal, nextLocal
      • Fields inherited from class org.objectweb.asm.MethodVisitor

        api, mv
      • Fields 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, V9
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected JFRMethodAdvisor​(JFRTransformDescriptor transformDescriptor, java.lang.Class<?> inspectionClass, int api, org.objectweb.asm.MethodVisitor mv, int access, java.lang.String name, java.lang.String desc)  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private void commitEvent()  
      private org.objectweb.asm.Type convertify​(org.objectweb.asm.MethodVisitor mv, Attribute convertable, org.objectweb.asm.Type type)  
      private org.objectweb.asm.Type convertify​(org.objectweb.asm.MethodVisitor mv, ResolvedConvertable resolvedConvertable, org.objectweb.asm.Type type)  
      private void createEvent()
      Generates the transformation for instantiating the event type, setting its parameter and field attributes and call begin().
      private void emitSettingReturnParam​(int opcode, ReturnValue returnValue)  
      private void loadField​(ReferenceChain refChain)  
      protected void onMethodEnter()  
      protected void onMethodExit​(int opcode)  
      void visitCode()  
      void visitEnd()  
      private void writeAttribute​(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, visitVarInsn
      • Methods 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, valueOf
      • Methods inherited from class org.objectweb.asm.commons.LocalVariablesSorter

        newLocal, newLocalMapping, updateNewLocals, visitFrame, visitIincInsn, visitLocalVariable, visitLocalVariableAnnotation, visitMaxs
      • Methods inherited from class org.objectweb.asm.MethodVisitor

        visitAnnotableParameterCount, visitAnnotation, visitAnnotationDefault, visitAttribute, visitInsnAnnotation, visitLineNumber, visitMethodInsn, visitParameter, visitParameterAnnotation, visitTryCatchAnnotation, visitTypeAnnotation
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • THROWABLE_BINARY_NAME

        private static final java.lang.String THROWABLE_BINARY_NAME
        See Also:
        Constant Field Values
      • inspectionClass

        private final java.lang.Class<?> 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 Detail

      • JFRMethodAdvisor

        protected JFRMethodAdvisor​(JFRTransformDescriptor transformDescriptor,
                                   java.lang.Class<?> inspectionClass,
                                   int api,
                                   org.objectweb.asm.MethodVisitor mv,
                                   int access,
                                   java.lang.String name,
                                   java.lang.String desc)