class java.lang.invoke.MethodHandleImpl$CountingWrapper extends java.lang.invoke.DelegatingMethodHandle
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: java.lang.invoke.MethodHandleImpl$CountingWrapper
  super_class: java.lang.invoke.DelegatingMethodHandle
{
  private final java.lang.invoke.MethodHandle target;
    descriptor: Ljava/lang/invoke/MethodHandle;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private int count;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  private java.util.function.Function<java.lang.invoke.MethodHandle, java.lang.invoke.LambdaForm> countingFormProducer;
    descriptor: Ljava/util/function/Function;
    flags: (0x0002) ACC_PRIVATE
    Signature: Ljava/util/function/Function<Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/LambdaForm;>;

  private java.util.function.Function<java.lang.invoke.MethodHandle, java.lang.invoke.LambdaForm> nonCountingFormProducer;
    descriptor: Ljava/util/function/Function;
    flags: (0x0002) ACC_PRIVATE
    Signature: Ljava/util/function/Function<Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/LambdaForm;>;

  private volatile boolean isCounting;
    descriptor: Z
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  private int invocations;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  static final java.lang.invoke.LambdaForm$NamedFunction NF_maybeStopCounting;
    descriptor: Ljava/lang/invoke/LambdaForm$NamedFunction;
    flags: (0x0018) ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=8, locals=2, args_size=0
         0: .line 937
            ldc Ljava/lang/invoke/MethodHandleImpl$CountingWrapper;
            astore 0 /* THIS_CLASS */
        start local 0 // java.lang.Class THIS_CLASS
         1: .line 939
            new java.lang.invoke.LambdaForm$NamedFunction
            dup
            aload 0 /* THIS_CLASS */
            ldc "maybeStopCounting"
            iconst_1
            anewarray java.lang.Class
            dup
            iconst_0
            ldc Ljava/lang/Object;
            aastore
            invokevirtual java.lang.Class.getDeclaredMethod:(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
            invokespecial java.lang.invoke.LambdaForm$NamedFunction.<init>:(Ljava/lang/reflect/Method;)V
            putstatic java.lang.invoke.MethodHandleImpl$CountingWrapper.NF_maybeStopCounting:Ljava/lang/invoke/LambdaForm$NamedFunction;
         2: .line 940
            goto 5
      StackMap locals: java.lang.Class
      StackMap stack: java.lang.ReflectiveOperationException
         3: astore 1 /* ex */
        start local 1 // java.lang.ReflectiveOperationException ex
         4: .line 941
            aload 1 /* ex */
            invokestatic java.lang.invoke.MethodHandleStatics.newInternalError:(Ljava/lang/Exception;)Ljava/lang/InternalError;
            athrow
        end local 1 // java.lang.ReflectiveOperationException ex
        end local 0 // java.lang.Class THIS_CLASS
         5: .line 943
      StackMap locals:
      StackMap stack:
            return
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            1    5     0  THIS_CLASS  Ljava/lang/Class<*>;
            4    5     1          ex  Ljava/lang/ReflectiveOperationException;
      Exception table:
        from    to  target  type
           1     2       3  Class java.lang.ReflectiveOperationException

  private void <init>(java.lang.invoke.MethodHandle, java.lang.invoke.LambdaForm, java.util.function.Function<java.lang.invoke.MethodHandle, java.lang.invoke.LambdaForm>, java.util.function.Function<java.lang.invoke.MethodHandle, java.lang.invoke.LambdaForm>, );
    descriptor: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/LambdaForm;Ljava/util/function/Function;Ljava/util/function/Function;I)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=6, args_size=6
        start local 0 // java.lang.invoke.MethodHandleImpl$CountingWrapper this
        start local 1 // java.lang.invoke.MethodHandle target
        start local 2 // java.lang.invoke.LambdaForm lform
        start local 3 // java.util.function.Function countingFromProducer
        start local 4 // java.util.function.Function nonCountingFormProducer
        start local 5 // int count
         0: .line 867
            aload 0 /* this */
            aload 1 /* target */
            invokevirtual java.lang.invoke.MethodHandle.type:()Ljava/lang/invoke/MethodType;
            aload 2 /* lform */
            invokespecial java.lang.invoke.DelegatingMethodHandle.<init>:(Ljava/lang/invoke/MethodType;Ljava/lang/invoke/LambdaForm;)V
         1: .line 896
            aload 0 /* this */
            getstatic java.lang.invoke.MethodHandleStatics.CUSTOMIZE_THRESHOLD:I
            putfield java.lang.invoke.MethodHandleImpl$CountingWrapper.invocations:I
         2: .line 868
            aload 0 /* this */
            aload 1 /* target */
            putfield java.lang.invoke.MethodHandleImpl$CountingWrapper.target:Ljava/lang/invoke/MethodHandle;
         3: .line 869
            aload 0 /* this */
            iload 5 /* count */
            putfield java.lang.invoke.MethodHandleImpl$CountingWrapper.count:I
         4: .line 870
            aload 0 /* this */
            aload 3 /* countingFromProducer */
            putfield java.lang.invoke.MethodHandleImpl$CountingWrapper.countingFormProducer:Ljava/util/function/Function;
         5: .line 871
            aload 0 /* this */
            aload 4 /* nonCountingFormProducer */
            putfield java.lang.invoke.MethodHandleImpl$CountingWrapper.nonCountingFormProducer:Ljava/util/function/Function;
         6: .line 872
            aload 0 /* this */
            iload 5 /* count */
            ifle 7
            iconst_1
            goto 8
      StackMap locals: java.lang.invoke.MethodHandleImpl$CountingWrapper java.lang.invoke.MethodHandle java.lang.invoke.LambdaForm java.util.function.Function java.util.function.Function int
      StackMap stack: java.lang.invoke.MethodHandleImpl$CountingWrapper
         7: iconst_0
      StackMap locals: java.lang.invoke.MethodHandleImpl$CountingWrapper java.lang.invoke.MethodHandle java.lang.invoke.LambdaForm java.util.function.Function java.util.function.Function int
      StackMap stack: java.lang.invoke.MethodHandleImpl$CountingWrapper int
         8: putfield java.lang.invoke.MethodHandleImpl$CountingWrapper.isCounting:Z
         9: .line 873
            return
        end local 5 // int count
        end local 4 // java.util.function.Function nonCountingFormProducer
        end local 3 // java.util.function.Function countingFromProducer
        end local 2 // java.lang.invoke.LambdaForm lform
        end local 1 // java.lang.invoke.MethodHandle target
        end local 0 // java.lang.invoke.MethodHandleImpl$CountingWrapper this
      LocalVariableTable:
        Start  End  Slot                     Name  Signature
            0   10     0                     this  Ljava/lang/invoke/MethodHandleImpl$CountingWrapper;
            0   10     1                   target  Ljava/lang/invoke/MethodHandle;
            0   10     2                    lform  Ljava/lang/invoke/LambdaForm;
            0   10     3     countingFromProducer  Ljava/util/function/Function<Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/LambdaForm;>;
            0   10     4  nonCountingFormProducer  Ljava/util/function/Function<Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/LambdaForm;>;
            0   10     5                    count  I
    Signature: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/LambdaForm;Ljava/util/function/Function<Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/LambdaForm;>;Ljava/util/function/Function<Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/LambdaForm;>;I)V
    MethodParameters:
                         Name  Flags
      target                   
      lform                    
      countingFromProducer     
      nonCountingFormProducer  
      count                    

  protected java.lang.invoke.MethodHandle getTarget();
    descriptor: ()Ljava/lang/invoke/MethodHandle;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // java.lang.invoke.MethodHandleImpl$CountingWrapper this
         0: .line 878
            aload 0 /* this */
            getfield java.lang.invoke.MethodHandleImpl$CountingWrapper.target:Ljava/lang/invoke/MethodHandle;
            areturn
        end local 0 // java.lang.invoke.MethodHandleImpl$CountingWrapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Ljava/lang/invoke/MethodHandleImpl$CountingWrapper;
    RuntimeVisibleAnnotations: 
      java.lang.invoke.LambdaForm$Hidden()

  public java.lang.invoke.MethodHandle asTypeUncached(java.lang.invoke.MethodType);
    descriptor: (Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=5, args_size=2
        start local 0 // java.lang.invoke.MethodHandleImpl$CountingWrapper this
        start local 1 // java.lang.invoke.MethodType newType
         0: .line 883
            aload 0 /* this */
            getfield java.lang.invoke.MethodHandleImpl$CountingWrapper.target:Ljava/lang/invoke/MethodHandle;
            aload 1 /* newType */
            invokevirtual java.lang.invoke.MethodHandle.asType:(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;
            astore 2 /* newTarget */
        start local 2 // java.lang.invoke.MethodHandle newTarget
         1: .line 885
            aload 0 /* this */
            getfield java.lang.invoke.MethodHandleImpl$CountingWrapper.isCounting:Z
            ifeq 5
         2: .line 887
            aload 0 /* this */
            getfield java.lang.invoke.MethodHandleImpl$CountingWrapper.countingFormProducer:Ljava/util/function/Function;
            aload 2 /* newTarget */
            invokeinterface java.util.function.Function.apply:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.invoke.LambdaForm
            astore 4 /* lform */
        start local 4 // java.lang.invoke.LambdaForm lform
         3: .line 888
            new java.lang.invoke.MethodHandleImpl$CountingWrapper
            dup
            aload 2 /* newTarget */
            aload 4 /* lform */
            aload 0 /* this */
            getfield java.lang.invoke.MethodHandleImpl$CountingWrapper.countingFormProducer:Ljava/util/function/Function;
            aload 0 /* this */
            getfield java.lang.invoke.MethodHandleImpl$CountingWrapper.nonCountingFormProducer:Ljava/util/function/Function;
            getstatic java.lang.invoke.MethodHandleStatics.DONT_INLINE_THRESHOLD:I
            invokespecial java.lang.invoke.MethodHandleImpl$CountingWrapper.<init>:(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/LambdaForm;Ljava/util/function/Function;Ljava/util/function/Function;I)V
            astore 3 /* wrapper */
        end local 4 // java.lang.invoke.LambdaForm lform
        start local 3 // java.lang.invoke.MethodHandle wrapper
         4: .line 889
            goto 6
        end local 3 // java.lang.invoke.MethodHandle wrapper
         5: .line 890
      StackMap locals: java.lang.invoke.MethodHandle
      StackMap stack:
            aload 2 /* newTarget */
            astore 3 /* wrapper */
        start local 3 // java.lang.invoke.MethodHandle wrapper
         6: .line 892
      StackMap locals: java.lang.invoke.MethodHandle
      StackMap stack:
            aload 0 /* this */
            aload 3 /* wrapper */
            dup_x1
            putfield java.lang.invoke.MethodHandleImpl$CountingWrapper.asTypeCache:Ljava/lang/invoke/MethodHandle;
            areturn
        end local 3 // java.lang.invoke.MethodHandle wrapper
        end local 2 // java.lang.invoke.MethodHandle newTarget
        end local 1 // java.lang.invoke.MethodType newType
        end local 0 // java.lang.invoke.MethodHandleImpl$CountingWrapper this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    7     0       this  Ljava/lang/invoke/MethodHandleImpl$CountingWrapper;
            0    7     1    newType  Ljava/lang/invoke/MethodType;
            1    7     2  newTarget  Ljava/lang/invoke/MethodHandle;
            4    5     3    wrapper  Ljava/lang/invoke/MethodHandle;
            6    7     3    wrapper  Ljava/lang/invoke/MethodHandle;
            3    4     4      lform  Ljava/lang/invoke/LambdaForm;
    MethodParameters:
         Name  Flags
      newType  

  private void maybeCustomizeTarget();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // java.lang.invoke.MethodHandleImpl$CountingWrapper this
         0: .line 898
            aload 0 /* this */
            getfield java.lang.invoke.MethodHandleImpl$CountingWrapper.invocations:I
            istore 1 /* c */
        start local 1 // int c
         1: .line 899
            iload 1 /* c */
            iflt 5
         2: .line 900
            iload 1 /* c */
            iconst_1
            if_icmpne 4
         3: .line 901
            aload 0 /* this */
            getfield java.lang.invoke.MethodHandleImpl$CountingWrapper.target:Ljava/lang/invoke/MethodHandle;
            invokevirtual java.lang.invoke.MethodHandle.customize:()V
         4: .line 903
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            iload 1 /* c */
            iconst_1
            isub
            putfield java.lang.invoke.MethodHandleImpl$CountingWrapper.invocations:I
         5: .line 905
      StackMap locals:
      StackMap stack:
            return
        end local 1 // int c
        end local 0 // java.lang.invoke.MethodHandleImpl$CountingWrapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  this  Ljava/lang/invoke/MethodHandleImpl$CountingWrapper;
            1    6     1     c  I

  boolean countDown();
    descriptor: ()Z
    flags: (0x0000) 
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // java.lang.invoke.MethodHandleImpl$CountingWrapper this
         0: .line 908
            aload 0 /* this */
            getfield java.lang.invoke.MethodHandleImpl$CountingWrapper.count:I
            istore 1 /* c */
        start local 1 // int c
         1: .line 909
            aload 0 /* this */
            invokevirtual java.lang.invoke.MethodHandleImpl$CountingWrapper.maybeCustomizeTarget:()V
         2: .line 910
            iload 1 /* c */
            iconst_1
            if_icmpgt 7
         3: .line 912
            aload 0 /* this */
            getfield java.lang.invoke.MethodHandleImpl$CountingWrapper.isCounting:Z
            ifeq 6
         4: .line 913
            aload 0 /* this */
            iconst_0
            putfield java.lang.invoke.MethodHandleImpl$CountingWrapper.isCounting:Z
         5: .line 914
            iconst_1
            ireturn
         6: .line 916
      StackMap locals: int
      StackMap stack:
            iconst_0
            ireturn
         7: .line 919
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 1 /* c */
            iconst_1
            isub
            putfield java.lang.invoke.MethodHandleImpl$CountingWrapper.count:I
         8: .line 920
            iconst_0
            ireturn
        end local 1 // int c
        end local 0 // java.lang.invoke.MethodHandleImpl$CountingWrapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    9     0  this  Ljava/lang/invoke/MethodHandleImpl$CountingWrapper;
            1    9     1     c  I

  static void maybeStopCounting(java.lang.Object);
    descriptor: (Ljava/lang/Object;)V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // java.lang.Object o1
         0: .line 926
            aload 0 /* o1 */
            checkcast java.lang.invoke.MethodHandleImpl$CountingWrapper
            astore 1 /* wrapper */
        start local 1 // java.lang.invoke.MethodHandleImpl$CountingWrapper wrapper
         1: .line 927
            aload 1 /* wrapper */
            invokevirtual java.lang.invoke.MethodHandleImpl$CountingWrapper.countDown:()Z
            ifeq 5
         2: .line 929
            aload 1 /* wrapper */
            getfield java.lang.invoke.MethodHandleImpl$CountingWrapper.nonCountingFormProducer:Ljava/util/function/Function;
            aload 1 /* wrapper */
            getfield java.lang.invoke.MethodHandleImpl$CountingWrapper.target:Ljava/lang/invoke/MethodHandle;
            invokeinterface java.util.function.Function.apply:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.invoke.LambdaForm
            astore 2 /* lform */
        start local 2 // java.lang.invoke.LambdaForm lform
         3: .line 930
            aload 2 /* lform */
            invokevirtual java.lang.invoke.LambdaForm.compileToBytecode:()V
         4: .line 931
            aload 1 /* wrapper */
            aload 2 /* lform */
            invokevirtual java.lang.invoke.MethodHandleImpl$CountingWrapper.updateForm:(Ljava/lang/invoke/LambdaForm;)V
        end local 2 // java.lang.invoke.LambdaForm lform
         5: .line 933
      StackMap locals: java.lang.invoke.MethodHandleImpl$CountingWrapper
      StackMap stack:
            return
        end local 1 // java.lang.invoke.MethodHandleImpl$CountingWrapper wrapper
        end local 0 // java.lang.Object o1
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    6     0       o1  Ljava/lang/Object;
            1    6     1  wrapper  Ljava/lang/invoke/MethodHandleImpl$CountingWrapper;
            3    5     2    lform  Ljava/lang/invoke/LambdaForm;
    RuntimeVisibleAnnotations: 
      java.lang.invoke.LambdaForm$Hidden()
    MethodParameters:
      Name  Flags
      o1    
}
SourceFile: "MethodHandleImpl.java"
NestHost: java.lang.invoke.MethodHandleImpl
InnerClasses:
  abstract Hidden = java.lang.invoke.LambdaForm$Hidden of java.lang.invoke.LambdaForm
  NamedFunction = java.lang.invoke.LambdaForm$NamedFunction of java.lang.invoke.LambdaForm
  CountingWrapper = java.lang.invoke.MethodHandleImpl$CountingWrapper of java.lang.invoke.MethodHandleImpl