final class jdk.jfr.internal.instrument.JIClassInstrumentation
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: jdk.jfr.internal.instrument.JIClassInstrumentation
  super_class: java.lang.Object
{
  private final java.lang.Class<?> instrumentor;
    descriptor: Ljava/lang/Class;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/lang/Class<*>;

  private final java.lang.String targetName;
    descriptor: Ljava/lang/String;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.lang.String instrumentorName;
    descriptor: Ljava/lang/String;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final byte[] newBytes;
    descriptor: [B
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final jdk.internal.org.objectweb.asm.ClassReader targetClassReader;
    descriptor: Ljdk/internal/org/objectweb/asm/ClassReader;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final jdk.internal.org.objectweb.asm.ClassReader instrClassReader;
    descriptor: Ljdk/internal/org/objectweb/asm/ClassReader;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  void <init>(java.lang.Class<?>, java.lang.Class<?>, );
    descriptor: (Ljava/lang/Class;Ljava/lang/Class;[B)V
    flags: (0x0000) 
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // jdk.jfr.internal.instrument.JIClassInstrumentation this
        start local 1 // java.lang.Class instrumentor
        start local 2 // java.lang.Class target
        start local 3 // byte[] old_target_bytes
         0: .line 69
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 70
            aload 0 /* this */
            aload 1 /* instrumentor */
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            putfield jdk.jfr.internal.instrument.JIClassInstrumentation.instrumentorName:Ljava/lang/String;
         2: .line 71
            aload 0 /* this */
            aload 2 /* target */
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            putfield jdk.jfr.internal.instrument.JIClassInstrumentation.targetName:Ljava/lang/String;
         3: .line 72
            aload 0 /* this */
            aload 1 /* instrumentor */
            putfield jdk.jfr.internal.instrument.JIClassInstrumentation.instrumentor:Ljava/lang/Class;
         4: .line 73
            aload 0 /* this */
            new jdk.internal.org.objectweb.asm.ClassReader
            dup
            aload 3 /* old_target_bytes */
            invokespecial jdk.internal.org.objectweb.asm.ClassReader.<init>:([B)V
            putfield jdk.jfr.internal.instrument.JIClassInstrumentation.targetClassReader:Ljdk/internal/org/objectweb/asm/ClassReader;
         5: .line 74
            aload 0 /* this */
            new jdk.internal.org.objectweb.asm.ClassReader
            dup
            aload 1 /* instrumentor */
            invokestatic jdk.jfr.internal.instrument.JIClassInstrumentation.getOriginalClassBytes:(Ljava/lang/Class;)[B
            invokespecial jdk.internal.org.objectweb.asm.ClassReader.<init>:([B)V
            putfield jdk.jfr.internal.instrument.JIClassInstrumentation.instrClassReader:Ljdk/internal/org/objectweb/asm/ClassReader;
         6: .line 75
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual jdk.jfr.internal.instrument.JIClassInstrumentation.makeBytecode:()[B
            putfield jdk.jfr.internal.instrument.JIClassInstrumentation.newBytes:[B
         7: .line 76
            aload 2 /* target */
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            aload 0 /* this */
            getfield jdk.jfr.internal.instrument.JIClassInstrumentation.newBytes:[B
            invokestatic jdk.jfr.internal.Utils.writeGeneratedASM:(Ljava/lang/String;[B)V
         8: .line 77
            return
        end local 3 // byte[] old_target_bytes
        end local 2 // java.lang.Class target
        end local 1 // java.lang.Class instrumentor
        end local 0 // jdk.jfr.internal.instrument.JIClassInstrumentation this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    9     0              this  Ljdk/jfr/internal/instrument/JIClassInstrumentation;
            0    9     1      instrumentor  Ljava/lang/Class<*>;
            0    9     2            target  Ljava/lang/Class<*>;
            0    9     3  old_target_bytes  [B
    Exceptions:
      throws java.lang.ClassNotFoundException, java.io.IOException
    Signature: (Ljava/lang/Class<*>;Ljava/lang/Class<*>;[B)V
    MethodParameters:
                  Name  Flags
      instrumentor      
      target            
      old_target_bytes  

  private static byte[] getOriginalClassBytes(java.lang.Class<?>);
    descriptor: (Ljava/lang/Class;)[B
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=6, args_size=1
        start local 0 // java.lang.Class clazz
         0: .line 80
            new java.io.ByteArrayOutputStream
            dup
            invokespecial java.io.ByteArrayOutputStream.<init>:()V
            astore 1 /* baos */
        start local 1 // java.io.ByteArrayOutputStream baos
         1: .line 81
            new java.lang.StringBuilder
            dup
            ldc "/"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* clazz */
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            ldc "."
            ldc "/"
            invokevirtual java.lang.String.replace:(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc ".class"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 2 /* name */
        start local 2 // java.lang.String name
         2: .line 82
            aload 2 /* name */
            invokestatic jdk.jfr.internal.SecuritySupport.getResourceAsStream:(Ljava/lang/String;)Ljava/io/InputStream;
            astore 3 /* is */
        start local 3 // java.io.InputStream is
         3: .line 84
            sipush 16384
            newarray 8
            astore 5 /* buffer */
        start local 5 // byte[] buffer
         4: .line 85
            goto 6
        start local 4 // int bytesRead
         5: .line 86
      StackMap locals: java.lang.Class java.io.ByteArrayOutputStream java.lang.String java.io.InputStream int byte[]
      StackMap stack:
            aload 1 /* baos */
            aload 5 /* buffer */
            iconst_0
            iload 4 /* bytesRead */
            invokevirtual java.io.ByteArrayOutputStream.write:([BII)V
        end local 4 // int bytesRead
         6: .line 85
      StackMap locals: java.lang.Class java.io.ByteArrayOutputStream java.lang.String java.io.InputStream top byte[]
      StackMap stack:
            aload 3 /* is */
            aload 5 /* buffer */
            iconst_0
            aload 5 /* buffer */
            arraylength
            invokevirtual java.io.InputStream.read:([BII)I
            dup
            istore 4 /* bytesRead */
        start local 4 // int bytesRead
         7: iconst_m1
            if_icmpne 5
         8: .line 88
            aload 1 /* baos */
            invokevirtual java.io.ByteArrayOutputStream.flush:()V
         9: .line 89
            aload 3 /* is */
            invokevirtual java.io.InputStream.close:()V
        10: .line 90
            aload 1 /* baos */
            invokevirtual java.io.ByteArrayOutputStream.toByteArray:()[B
            areturn
        end local 5 // byte[] buffer
        end local 4 // int bytesRead
        end local 3 // java.io.InputStream is
        end local 2 // java.lang.String name
        end local 1 // java.io.ByteArrayOutputStream baos
        end local 0 // java.lang.Class clazz
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   11     0      clazz  Ljava/lang/Class<*>;
            1   11     1       baos  Ljava/io/ByteArrayOutputStream;
            2   11     2       name  Ljava/lang/String;
            3   11     3         is  Ljava/io/InputStream;
            5    6     4  bytesRead  I
            7   11     4  bytesRead  I
            4   11     5     buffer  [B
    Exceptions:
      throws java.io.IOException
    Signature: (Ljava/lang/Class<*>;)[B
    MethodParameters:
       Name  Flags
      clazz  

  private byte[] makeBytecode();
    descriptor: ()[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=8, locals=7, args_size=1
        start local 0 // jdk.jfr.internal.instrument.JIClassInstrumentation this
         0: .line 97
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 1 /* instrumentationMethods */
        start local 1 // java.util.List instrumentationMethods
         1: .line 98
            aload 0 /* this */
            getfield jdk.jfr.internal.instrument.JIClassInstrumentation.instrumentor:Ljava/lang/Class;
            invokevirtual java.lang.Class.getDeclaredMethods:()[Ljava/lang/reflect/Method;
            dup
            astore 5
            arraylength
            istore 4
            iconst_0
            istore 3
            goto 7
      StackMap locals: jdk.jfr.internal.instrument.JIClassInstrumentation java.util.List top int int java.lang.reflect.Method[]
      StackMap stack:
         2: aload 5
            iload 3
            aaload
            astore 2 /* m */
        start local 2 // java.lang.reflect.Method m
         3: .line 99
            aload 2 /* m */
            ldc Ljdk/jfr/internal/instrument/JIInstrumentationMethod;
            invokevirtual java.lang.reflect.Method.getAnnotation:(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
            checkcast jdk.jfr.internal.instrument.JIInstrumentationMethod
            astore 6 /* im */
        start local 6 // jdk.jfr.internal.instrument.JIInstrumentationMethod im
         4: .line 100
            aload 6 /* im */
            ifnull 6
         5: .line 101
            aload 1 /* instrumentationMethods */
            aload 2 /* m */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 6 // jdk.jfr.internal.instrument.JIInstrumentationMethod im
        end local 2 // java.lang.reflect.Method m
         6: .line 98
      StackMap locals:
      StackMap stack:
            iinc 3 1
      StackMap locals:
      StackMap stack:
         7: iload 3
            iload 4
            if_icmplt 2
         8: .line 107
            new jdk.internal.org.objectweb.asm.tree.ClassNode
            dup
            invokespecial jdk.internal.org.objectweb.asm.tree.ClassNode.<init>:()V
            astore 2 /* temporary */
        start local 2 // jdk.internal.org.objectweb.asm.tree.ClassNode temporary
         9: .line 108
            new jdk.jfr.internal.instrument.JIInliner
            dup
        10: .line 109
            ldc 327680
        11: .line 110
            aload 2 /* temporary */
        12: .line 111
            aload 0 /* this */
            getfield jdk.jfr.internal.instrument.JIClassInstrumentation.targetName:Ljava/lang/String;
        13: .line 112
            aload 0 /* this */
            getfield jdk.jfr.internal.instrument.JIClassInstrumentation.instrumentorName:Ljava/lang/String;
        14: .line 113
            aload 0 /* this */
            getfield jdk.jfr.internal.instrument.JIClassInstrumentation.targetClassReader:Ljdk/internal/org/objectweb/asm/ClassReader;
        15: .line 114
            aload 1 /* instrumentationMethods */
        16: .line 108
            invokespecial jdk.jfr.internal.instrument.JIInliner.<init>:(ILjdk/internal/org/objectweb/asm/ClassVisitor;Ljava/lang/String;Ljava/lang/String;Ljdk/internal/org/objectweb/asm/ClassReader;Ljava/util/List;)V
            astore 3 /* inliner */
        start local 3 // jdk.internal.org.objectweb.asm.ClassVisitor inliner
        17: .line 115
            aload 0 /* this */
            getfield jdk.jfr.internal.instrument.JIClassInstrumentation.instrClassReader:Ljdk/internal/org/objectweb/asm/ClassReader;
            aload 3 /* inliner */
            bipush 8
            invokevirtual jdk.internal.org.objectweb.asm.ClassReader.accept:(Ljdk/internal/org/objectweb/asm/ClassVisitor;I)V
        18: .line 121
            new jdk.internal.org.objectweb.asm.ClassWriter
            dup
            iconst_2
            invokespecial jdk.internal.org.objectweb.asm.ClassWriter.<init>:(I)V
            astore 4 /* cw */
        start local 4 // jdk.internal.org.objectweb.asm.ClassWriter cw
        19: .line 122
            new jdk.jfr.internal.instrument.JIMethodMergeAdapter
            dup
        20: .line 123
            aload 4 /* cw */
        21: .line 124
            aload 2 /* temporary */
        22: .line 125
            aload 1 /* instrumentationMethods */
        23: .line 126
            aload 0 /* this */
            getfield jdk.jfr.internal.instrument.JIClassInstrumentation.instrumentor:Ljava/lang/Class;
            ldc Ljdk/jfr/internal/instrument/JITypeMapping;
            invokevirtual java.lang.Class.getAnnotationsByType:(Ljava/lang/Class;)[Ljava/lang/annotation/Annotation;
            checkcast jdk.jfr.internal.instrument.JITypeMapping[]
        24: .line 122
            invokespecial jdk.jfr.internal.instrument.JIMethodMergeAdapter.<init>:(Ljdk/internal/org/objectweb/asm/ClassVisitor;Ljdk/internal/org/objectweb/asm/tree/ClassNode;Ljava/util/List;[Ljdk/jfr/internal/instrument/JITypeMapping;)V
            astore 5 /* ma */
        start local 5 // jdk.jfr.internal.instrument.JIMethodMergeAdapter ma
        25: .line 127
            aload 0 /* this */
            getfield jdk.jfr.internal.instrument.JIClassInstrumentation.targetClassReader:Ljdk/internal/org/objectweb/asm/ClassReader;
            aload 5 /* ma */
            bipush 8
            invokevirtual jdk.internal.org.objectweb.asm.ClassReader.accept:(Ljdk/internal/org/objectweb/asm/ClassVisitor;I)V
        26: .line 129
            aload 4 /* cw */
            invokevirtual jdk.internal.org.objectweb.asm.ClassWriter.toByteArray:()[B
            areturn
        end local 5 // jdk.jfr.internal.instrument.JIMethodMergeAdapter ma
        end local 4 // jdk.internal.org.objectweb.asm.ClassWriter cw
        end local 3 // jdk.internal.org.objectweb.asm.ClassVisitor inliner
        end local 2 // jdk.internal.org.objectweb.asm.tree.ClassNode temporary
        end local 1 // java.util.List instrumentationMethods
        end local 0 // jdk.jfr.internal.instrument.JIClassInstrumentation this
      LocalVariableTable:
        Start  End  Slot                    Name  Signature
            0   27     0                    this  Ljdk/jfr/internal/instrument/JIClassInstrumentation;
            1   27     1  instrumentationMethods  Ljava/util/List<Ljava/lang/reflect/Method;>;
            3    6     2                       m  Ljava/lang/reflect/Method;
            4    6     6                      im  Ljdk/jfr/internal/instrument/JIInstrumentationMethod;
            9   27     2               temporary  Ljdk/internal/org/objectweb/asm/tree/ClassNode;
           17   27     3                 inliner  Ljdk/internal/org/objectweb/asm/ClassVisitor;
           19   27     4                      cw  Ljdk/internal/org/objectweb/asm/ClassWriter;
           25   27     5                      ma  Ljdk/jfr/internal/instrument/JIMethodMergeAdapter;
    Exceptions:
      throws java.io.IOException, java.lang.ClassNotFoundException

  public byte[] getNewBytes();
    descriptor: ()[B
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // jdk.jfr.internal.instrument.JIClassInstrumentation this
         0: .line 138
            aload 0 /* this */
            getfield jdk.jfr.internal.instrument.JIClassInstrumentation.newBytes:[B
            invokevirtual byte[].clone:()Ljava/lang/Object;
            checkcast byte[]
            areturn
        end local 0 // jdk.jfr.internal.instrument.JIClassInstrumentation this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Ljdk/jfr/internal/instrument/JIClassInstrumentation;
}
SourceFile: "JIClassInstrumentation.java"
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()