abstract class android.app.SystemServiceRegistry$CachedServiceFetcher<T> implements android.app.SystemServiceRegistry$ServiceFetcher<T>
  minor version: 0
  major version: 59
  flags: flags: (0x0420) ACC_SUPER, ACC_ABSTRACT
  this_class: android.app.SystemServiceRegistry$CachedServiceFetcher
  super_class: java.lang.Object
{
  private final int mCacheIndex;
    descriptor: I
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  void <init>();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // android.app.SystemServiceRegistry$CachedServiceFetcher this
         0: .line 1049
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 1053
            aload 0 /* this */
            getstatic android.app.SystemServiceRegistry.sServiceCacheSize:I
            dup
            iconst_1
            iadd
            putstatic android.app.SystemServiceRegistry.sServiceCacheSize:I
            putfield android.app.SystemServiceRegistry$CachedServiceFetcher.mCacheIndex:I
         2: .line 1054
            return
        end local 0 // android.app.SystemServiceRegistry$CachedServiceFetcher this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Landroid/app/SystemServiceRegistry$CachedServiceFetcher<TT;>;

  public final T getService(android.app.ContextImpl);
    descriptor: (Landroid/app/ContextImpl;)Ljava/lang/Object;
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=3, locals=10, args_size=2
        start local 0 // android.app.SystemServiceRegistry$CachedServiceFetcher this
        start local 1 // android.app.ContextImpl ctx
         0: .line 1059
            aload 1 /* ctx */
            getfield android.app.ContextImpl.mServiceCache:[Ljava/lang/Object;
            astore 2 /* cache */
        start local 2 // java.lang.Object[] cache
         1: .line 1060
            aload 1 /* ctx */
            getfield android.app.ContextImpl.mServiceInitializationStateArray:[I
            astore 3 /* gates */
        start local 3 // int[] gates
         2: .line 1063
      StackMap locals: java.lang.Object[] int[]
      StackMap stack:
            iconst_0
            istore 4 /* doInitialize */
        start local 4 // boolean doInitialize
         3: .line 1064
            aload 2 /* cache */
            dup
            astore 5
            monitorenter
         4: .line 1066
            aload 2 /* cache */
            aload 0 /* this */
            getfield android.app.SystemServiceRegistry$CachedServiceFetcher.mCacheIndex:I
            aaload
            astore 6 /* service */
        start local 6 // java.lang.Object service
         5: .line 1067
            aload 6 /* service */
            ifnonnull 6
            aload 3 /* gates */
            aload 0 /* this */
            getfield android.app.SystemServiceRegistry$CachedServiceFetcher.mCacheIndex:I
            iaload
            iconst_3
            if_icmpne 8
         6: .line 1068
      StackMap locals: int java.lang.Object[] java.lang.Object
      StackMap stack:
            aload 6 /* service */
            aload 5
            monitorexit
         7: areturn
         8: .line 1076
      StackMap locals:
      StackMap stack:
            aload 3 /* gates */
            aload 0 /* this */
            getfield android.app.SystemServiceRegistry$CachedServiceFetcher.mCacheIndex:I
            iaload
            iconst_2
            if_icmpne 10
         9: .line 1077
            aload 3 /* gates */
            aload 0 /* this */
            getfield android.app.SystemServiceRegistry$CachedServiceFetcher.mCacheIndex:I
            iconst_0
            iastore
        10: .line 1084
      StackMap locals:
      StackMap stack:
            aload 3 /* gates */
            aload 0 /* this */
            getfield android.app.SystemServiceRegistry$CachedServiceFetcher.mCacheIndex:I
            iaload
            ifne 13
        11: .line 1085
            iconst_1
            istore 4 /* doInitialize */
        12: .line 1086
            aload 3 /* gates */
            aload 0 /* this */
            getfield android.app.SystemServiceRegistry$CachedServiceFetcher.mCacheIndex:I
            iconst_1
            iastore
        end local 6 // java.lang.Object service
        13: .line 1064
      StackMap locals:
      StackMap stack:
            aload 5
            monitorexit
        14: goto 17
      StackMap locals:
      StackMap stack: java.lang.Throwable
        15: aload 5
            monitorexit
        16: athrow
        17: .line 1090
      StackMap locals:
      StackMap stack:
            iload 4 /* doInitialize */
            ifeq 52
        18: .line 1093
            aconst_null
            astore 5 /* service */
        start local 5 // java.lang.Object service
        19: .line 1094
            iconst_3
            istore 6 /* newState */
        start local 6 // int newState
        20: .line 1098
            aload 0 /* this */
            aload 1 /* ctx */
            invokevirtual android.app.SystemServiceRegistry$CachedServiceFetcher.createService:(Landroid/app/ContextImpl;)Ljava/lang/Object;
            astore 5 /* service */
        21: .line 1099
            iconst_2
            istore 6 /* newState */
        22: .line 1101
            goto 43
      StackMap locals: android.app.SystemServiceRegistry$CachedServiceFetcher android.app.ContextImpl java.lang.Object[] int[] int java.lang.Object int
      StackMap stack: android.os.ServiceManager$ServiceNotFoundException
        23: astore 7 /* e */
        start local 7 // android.os.ServiceManager$ServiceNotFoundException e
        24: .line 1102
            aload 7 /* e */
            invokestatic android.app.SystemServiceRegistry.onServiceNotFound:(Landroid/os/ServiceManager$ServiceNotFoundException;)V
        end local 7 // android.os.ServiceManager$ServiceNotFoundException e
        25: .line 1105
            aload 2 /* cache */
            dup
            astore 9
            monitorenter
        26: .line 1106
            aload 2 /* cache */
            aload 0 /* this */
            getfield android.app.SystemServiceRegistry$CachedServiceFetcher.mCacheIndex:I
            aload 5 /* service */
            aastore
        27: .line 1107
            aload 3 /* gates */
            aload 0 /* this */
            getfield android.app.SystemServiceRegistry$CachedServiceFetcher.mCacheIndex:I
            iload 6 /* newState */
            iastore
        28: .line 1108
            aload 2 /* cache */
            invokevirtual java.lang.Object.notifyAll:()V
        29: .line 1105
            aload 9
            monitorexit
        30: goto 51
      StackMap locals: android.app.SystemServiceRegistry$CachedServiceFetcher android.app.ContextImpl java.lang.Object[] int[] int java.lang.Object int top top java.lang.Object[]
      StackMap stack: java.lang.Throwable
        31: aload 9
            monitorexit
        32: athrow
        33: .line 1104
      StackMap locals: android.app.SystemServiceRegistry$CachedServiceFetcher android.app.ContextImpl java.lang.Object[] int[] int java.lang.Object int
      StackMap stack: java.lang.Throwable
            astore 8
        34: .line 1105
            aload 2 /* cache */
            dup
            astore 9
            monitorenter
        35: .line 1106
            aload 2 /* cache */
            aload 0 /* this */
            getfield android.app.SystemServiceRegistry$CachedServiceFetcher.mCacheIndex:I
            aload 5 /* service */
            aastore
        36: .line 1107
            aload 3 /* gates */
            aload 0 /* this */
            getfield android.app.SystemServiceRegistry$CachedServiceFetcher.mCacheIndex:I
            iload 6 /* newState */
            iastore
        37: .line 1108
            aload 2 /* cache */
            invokevirtual java.lang.Object.notifyAll:()V
        38: .line 1105
            aload 9
            monitorexit
        39: goto 42
      StackMap locals: android.app.SystemServiceRegistry$CachedServiceFetcher android.app.ContextImpl java.lang.Object[] int[] int java.lang.Object int top java.lang.Throwable java.lang.Object[]
      StackMap stack: java.lang.Throwable
        40: aload 9
            monitorexit
        41: athrow
        42: .line 1110
      StackMap locals:
      StackMap stack:
            aload 8
            athrow
        43: .line 1105
      StackMap locals: android.app.SystemServiceRegistry$CachedServiceFetcher android.app.ContextImpl java.lang.Object[] int[] int java.lang.Object int
      StackMap stack:
            aload 2 /* cache */
            dup
            astore 9
            monitorenter
        44: .line 1106
            aload 2 /* cache */
            aload 0 /* this */
            getfield android.app.SystemServiceRegistry$CachedServiceFetcher.mCacheIndex:I
            aload 5 /* service */
            aastore
        45: .line 1107
            aload 3 /* gates */
            aload 0 /* this */
            getfield android.app.SystemServiceRegistry$CachedServiceFetcher.mCacheIndex:I
            iload 6 /* newState */
            iastore
        46: .line 1108
            aload 2 /* cache */
            invokevirtual java.lang.Object.notifyAll:()V
        47: .line 1105
            aload 9
            monitorexit
        48: goto 51
      StackMap locals: android.app.SystemServiceRegistry$CachedServiceFetcher android.app.ContextImpl java.lang.Object[] int[] int java.lang.Object int top top java.lang.Object[]
      StackMap stack: java.lang.Throwable
        49: aload 9
            monitorexit
        50: athrow
        51: .line 1111
      StackMap locals: android.app.SystemServiceRegistry$CachedServiceFetcher android.app.ContextImpl java.lang.Object[] int[] int java.lang.Object int
      StackMap stack:
            aload 5 /* service */
            areturn
        end local 6 // int newState
        end local 5 // java.lang.Object service
        52: .line 1115
      StackMap locals:
      StackMap stack:
            aload 2 /* cache */
            dup
            astore 5
            monitorenter
        53: .line 1116
            goto 61
        54: .line 1118
      StackMap locals: java.lang.Object[]
      StackMap stack:
            aload 2 /* cache */
            invokevirtual java.lang.Object.wait:()V
        55: .line 1119
            goto 61
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
        56: pop
        57: .line 1120
            ldc "SystemServiceRegistry"
            ldc "getService() interrupted"
            invokestatic android.util.Log.w:(Ljava/lang/String;Ljava/lang/String;)I
            pop
        58: .line 1121
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            invokevirtual java.lang.Thread.interrupt:()V
        59: .line 1122
            aload 5
            monitorexit
        60: aconst_null
            areturn
        61: .line 1116
      StackMap locals:
      StackMap stack:
            aload 3 /* gates */
            aload 0 /* this */
            getfield android.app.SystemServiceRegistry$CachedServiceFetcher.mCacheIndex:I
            iaload
            iconst_2
            if_icmplt 54
        62: .line 1115
            aload 5
            monitorexit
        63: goto 2
      StackMap locals:
      StackMap stack: java.lang.Throwable
        64: aload 5
            monitorexit
        65: athrow
        end local 4 // boolean doInitialize
        end local 3 // int[] gates
        end local 2 // java.lang.Object[] cache
        end local 1 // android.app.ContextImpl ctx
        end local 0 // android.app.SystemServiceRegistry$CachedServiceFetcher this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   66     0          this  Landroid/app/SystemServiceRegistry$CachedServiceFetcher<TT;>;
            0   66     1           ctx  Landroid/app/ContextImpl;
            1   66     2         cache  [Ljava/lang/Object;
            2   66     3         gates  [I
            3   66     4  doInitialize  Z
            5   13     6       service  TT;
           19   52     5       service  TT;
           20   52     6      newState  I
           24   25     7             e  Landroid/os/ServiceManager$ServiceNotFoundException;
      Exception table:
        from    to  target  type
           4     7      15  any
           8    14      15  any
          15    16      15  any
          20    22      23  Class android.os.ServiceManager$ServiceNotFoundException
          26    30      31  any
          31    32      31  any
          20    25      33  any
          35    39      40  any
          40    41      40  any
          44    48      49  any
          49    50      49  any
          54    55      56  Class java.lang.InterruptedException
          53    60      64  any
          61    63      64  any
          64    65      64  any
    Signature: (Landroid/app/ContextImpl;)TT;
    MethodParameters:
      Name  Flags
      ctx   

  public abstract T createService(android.app.ContextImpl);
    descriptor: (Landroid/app/ContextImpl;)Ljava/lang/Object;
    flags: (0x0401) ACC_PUBLIC, ACC_ABSTRACT
    Exceptions:
      throws android.os.ServiceManager$ServiceNotFoundException
    Signature: (Landroid/app/ContextImpl;)TT;
    MethodParameters:
      Name  Flags
      ctx   
}
Signature: <T:Ljava/lang/Object;>Ljava/lang/Object;Landroid/app/SystemServiceRegistry$ServiceFetcher<TT;>;
SourceFile: "SystemServiceRegistry.java"
NestHost: android.app.SystemServiceRegistry
InnerClasses:
  abstract CachedServiceFetcher = android.app.SystemServiceRegistry$CachedServiceFetcher of android.app.SystemServiceRegistry
  abstract ServiceFetcher = android.app.SystemServiceRegistry$ServiceFetcher of android.app.SystemServiceRegistry
  public ServiceNotFoundException = android.os.ServiceManager$ServiceNotFoundException of android.os.ServiceManager