public abstract class android.util.TimedRemoteCaller<T>
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: android.util.TimedRemoteCaller
  super_class: java.lang.Object
{
  public static final long DEFAULT_CALL_TIMEOUT_MILLIS;
    descriptor: J
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 5000

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

  private final long mCallTimeoutMillis;
    descriptor: J
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final android.util.SparseIntArray mAwaitedCalls;
    descriptor: Landroid/util/SparseIntArray;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    RuntimeInvisibleAnnotations: 
      com.android.internal.annotations.GuardedBy(value = "mLock")

  private final android.util.SparseArray<T> mReceivedCalls;
    descriptor: Landroid/util/SparseArray;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Landroid/util/SparseArray<TT;>;
    RuntimeInvisibleAnnotations: 
      com.android.internal.annotations.GuardedBy(value = "mLock")

  private int mSequenceCounter;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE
    RuntimeInvisibleAnnotations: 
      com.android.internal.annotations.GuardedBy(value = "mLock")

  public void <init>(long);
    descriptor: (J)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // android.util.TimedRemoteCaller this
        start local 1 // long callTimeoutMillis
         0: .line 90
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 69
            aload 0 /* this */
            new java.lang.Object
            dup
            invokespecial java.lang.Object.<init>:()V
            putfield android.util.TimedRemoteCaller.mLock:Ljava/lang/Object;
         2: .line 75
            aload 0 /* this */
            new android.util.SparseIntArray
            dup
            iconst_1
            invokespecial android.util.SparseIntArray.<init>:(I)V
            putfield android.util.TimedRemoteCaller.mAwaitedCalls:Landroid/util/SparseIntArray;
         3: .line 79
            aload 0 /* this */
            new android.util.SparseArray
            dup
            iconst_1
            invokespecial android.util.SparseArray.<init>:(I)V
            putfield android.util.TimedRemoteCaller.mReceivedCalls:Landroid/util/SparseArray;
         4: .line 91
            aload 0 /* this */
            lload 1 /* callTimeoutMillis */
            putfield android.util.TimedRemoteCaller.mCallTimeoutMillis:J
         5: .line 92
            return
        end local 1 // long callTimeoutMillis
        end local 0 // android.util.TimedRemoteCaller this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0    6     0               this  Landroid/util/TimedRemoteCaller<TT;>;
            0    6     1  callTimeoutMillis  J
    MethodParameters:
                   Name  Flags
      callTimeoutMillis  

  protected final int onBeforeRemoteCall();
    descriptor: ()I
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL
    Code:
      stack=4, locals=3, args_size=1
        start local 0 // android.util.TimedRemoteCaller this
         0: .line 100
            aload 0 /* this */
            getfield android.util.TimedRemoteCaller.mLock:Ljava/lang/Object;
            dup
            astore 1
            monitorenter
         1: .line 103
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 0 /* this */
            dup
            getfield android.util.TimedRemoteCaller.mSequenceCounter:I
            dup_x1
            iconst_1
            iadd
            putfield android.util.TimedRemoteCaller.mSequenceCounter:I
            istore 2 /* sequenceId */
        start local 2 // int sequenceId
         2: .line 104
            aload 0 /* this */
            getfield android.util.TimedRemoteCaller.mAwaitedCalls:Landroid/util/SparseIntArray;
            iload 2 /* sequenceId */
            invokevirtual android.util.SparseIntArray.get:(I)I
            ifne 1
         3: .line 106
            aload 0 /* this */
            getfield android.util.TimedRemoteCaller.mAwaitedCalls:Landroid/util/SparseIntArray;
            iload 2 /* sequenceId */
            iconst_1
            invokevirtual android.util.SparseIntArray.put:(II)V
         4: .line 108
            iload 2 /* sequenceId */
            aload 1
            monitorexit
         5: ireturn
        end local 2 // int sequenceId
         6: .line 100
      StackMap locals:
      StackMap stack: java.lang.Throwable
            aload 1
            monitorexit
         7: athrow
        end local 0 // android.util.TimedRemoteCaller this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    8     0        this  Landroid/util/TimedRemoteCaller<TT;>;
            2    6     2  sequenceId  I
      Exception table:
        from    to  target  type
           1     5       6  any
           6     7       6  any

  protected final void onRemoteMethodResult(T, );
    descriptor: (Ljava/lang/Object;I)V
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL
    Code:
      stack=3, locals=5, args_size=3
        start local 0 // android.util.TimedRemoteCaller this
        start local 1 // java.lang.Object result
        start local 2 // int sequence
         0: .line 119
            aload 0 /* this */
            getfield android.util.TimedRemoteCaller.mLock:Ljava/lang/Object;
            dup
            astore 3
            monitorenter
         1: .line 121
            aload 0 /* this */
            getfield android.util.TimedRemoteCaller.mAwaitedCalls:Landroid/util/SparseIntArray;
            iload 2 /* sequence */
            invokevirtual android.util.SparseIntArray.get:(I)I
            ifeq 2
            iconst_1
            goto 3
      StackMap locals: java.lang.Object
      StackMap stack:
         2: iconst_0
      StackMap locals:
      StackMap stack: int
         3: istore 4 /* containedSequenceId */
        start local 4 // boolean containedSequenceId
         4: .line 122
            iload 4 /* containedSequenceId */
            ifeq 8
         5: .line 123
            aload 0 /* this */
            getfield android.util.TimedRemoteCaller.mAwaitedCalls:Landroid/util/SparseIntArray;
            iload 2 /* sequence */
            invokevirtual android.util.SparseIntArray.delete:(I)V
         6: .line 124
            aload 0 /* this */
            getfield android.util.TimedRemoteCaller.mReceivedCalls:Landroid/util/SparseArray;
            iload 2 /* sequence */
            aload 1 /* result */
            invokevirtual android.util.SparseArray.put:(ILjava/lang/Object;)V
         7: .line 125
            aload 0 /* this */
            getfield android.util.TimedRemoteCaller.mLock:Ljava/lang/Object;
            invokevirtual java.lang.Object.notifyAll:()V
        end local 4 // boolean containedSequenceId
         8: .line 119
      StackMap locals:
      StackMap stack:
            aload 3
            monitorexit
         9: goto 12
      StackMap locals:
      StackMap stack: java.lang.Throwable
        10: aload 3
            monitorexit
        11: athrow
        12: .line 128
      StackMap locals:
      StackMap stack:
            return
        end local 2 // int sequence
        end local 1 // java.lang.Object result
        end local 0 // android.util.TimedRemoteCaller this
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0   13     0                 this  Landroid/util/TimedRemoteCaller<TT;>;
            0   13     1               result  TT;
            0   13     2             sequence  I
            4    8     4  containedSequenceId  Z
      Exception table:
        from    to  target  type
           1     9      10  any
          10    11      10  any
    Signature: (TT;I)V
    MethodParameters:
          Name  Flags
      result    
      sequence  

  protected final T getResultTimed();
    descriptor: (I)Ljava/lang/Object;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL
    Code:
      stack=5, locals=9, args_size=2
        start local 0 // android.util.TimedRemoteCaller this
        start local 1 // int sequence
         0: .line 138
            invokestatic android.os.SystemClock.uptimeMillis:()J
            lstore 2 /* startMillis */
        start local 2 // long startMillis
         1: .line 141
      StackMap locals: long
      StackMap stack:
            aload 0 /* this */
            getfield android.util.TimedRemoteCaller.mLock:Ljava/lang/Object;
            dup
            astore 4
            monitorenter
         2: .line 142
            aload 0 /* this */
            getfield android.util.TimedRemoteCaller.mReceivedCalls:Landroid/util/SparseArray;
            iload 1 /* sequence */
            invokevirtual android.util.SparseArray.indexOfKey:(I)I
            iflt 5
         3: .line 143
            aload 0 /* this */
            getfield android.util.TimedRemoteCaller.mReceivedCalls:Landroid/util/SparseArray;
            iload 1 /* sequence */
            invokevirtual android.util.SparseArray.removeReturnOld:(I)Ljava/lang/Object;
            aload 4
            monitorexit
         4: areturn
         5: .line 145
      StackMap locals: java.lang.Object
      StackMap stack:
            invokestatic android.os.SystemClock.uptimeMillis:()J
            lload 2 /* startMillis */
            lsub
            lstore 5 /* elapsedMillis */
        start local 5 // long elapsedMillis
         6: .line 146
            aload 0 /* this */
            getfield android.util.TimedRemoteCaller.mCallTimeoutMillis:J
            lload 5 /* elapsedMillis */
            lsub
            lstore 7 /* waitMillis */
        start local 7 // long waitMillis
         7: .line 147
            lload 7 /* waitMillis */
            lconst_0
            lcmp
            ifgt 10
         8: .line 148
            aload 0 /* this */
            getfield android.util.TimedRemoteCaller.mAwaitedCalls:Landroid/util/SparseIntArray;
            iload 1 /* sequence */
            invokevirtual android.util.SparseIntArray.delete:(I)V
         9: .line 149
            new java.util.concurrent.TimeoutException
            dup
            new java.lang.StringBuilder
            dup
            ldc "No response for sequence: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 1 /* sequence */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.util.concurrent.TimeoutException.<init>:(Ljava/lang/String;)V
            athrow
        10: .line 151
      StackMap locals: long long
      StackMap stack:
            aload 0 /* this */
            getfield android.util.TimedRemoteCaller.mLock:Ljava/lang/Object;
            lload 7 /* waitMillis */
            invokevirtual java.lang.Object.wait:(J)V
        end local 7 // long waitMillis
        end local 5 // long elapsedMillis
        11: .line 141
            aload 4
            monitorexit
        12: goto 1
      StackMap locals: android.util.TimedRemoteCaller int long java.lang.Object
      StackMap stack: java.lang.Throwable
        13: aload 4
            monitorexit
        14: athrow
        15: .line 153
      StackMap locals: android.util.TimedRemoteCaller int long
      StackMap stack: java.lang.InterruptedException
            pop
        16: .line 139
            goto 1
        end local 2 // long startMillis
        end local 1 // int sequence
        end local 0 // android.util.TimedRemoteCaller this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   17     0           this  Landroid/util/TimedRemoteCaller<TT;>;
            0   17     1       sequence  I
            1   17     2    startMillis  J
            6   11     5  elapsedMillis  J
            7   11     7     waitMillis  J
      Exception table:
        from    to  target  type
           2     4      13  any
           5    12      13  any
          13    14      13  any
           1     4      15  Class java.lang.InterruptedException
           5    15      15  Class java.lang.InterruptedException
    Exceptions:
      throws java.util.concurrent.TimeoutException
    Signature: (I)TT;
    MethodParameters:
          Name  Flags
      sequence  
}
Signature: <T:Ljava/lang/Object;>Ljava/lang/Object;
SourceFile: "TimedRemoteCaller.java"