final class com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler extends com.mongodb.internal.connection.AsynchronousChannelStream$BaseCompletionHandler<org.bson.ByteBuf, java.lang.Integer, java.lang.Void>
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler
  super_class: com.mongodb.internal.connection.AsynchronousChannelStream$BaseCompletionHandler
{
  private final java.util.concurrent.atomic.AtomicReference<org.bson.ByteBuf> byteBufReference;
    descriptor: Ljava/util/concurrent/atomic/AtomicReference;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/concurrent/atomic/AtomicReference<Lorg/bson/ByteBuf;>;

  final com.mongodb.internal.connection.AsynchronousChannelStream this$0;
    descriptor: Lcom/mongodb/internal/connection/AsynchronousChannelStream;
    flags: (0x1010) ACC_FINAL, ACC_SYNTHETIC

  private void <init>(org.bson.ByteBuf, com.mongodb.connection.AsyncCompletionHandler<org.bson.ByteBuf>);
    descriptor: (Lcom/mongodb/internal/connection/AsynchronousChannelStream;Lorg/bson/ByteBuf;Lcom/mongodb/connection/AsyncCompletionHandler;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler this
        start local 2 // org.bson.ByteBuf dst
        start local 3 // com.mongodb.connection.AsyncCompletionHandler handler
         0: .line 216
            aload 0 /* this */
            aload 1
            putfield com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler.this$0:Lcom/mongodb/internal/connection/AsynchronousChannelStream;
         1: .line 217
            aload 0 /* this */
            aload 3 /* handler */
            invokespecial com.mongodb.internal.connection.AsynchronousChannelStream$BaseCompletionHandler.<init>:(Lcom/mongodb/connection/AsyncCompletionHandler;)V
         2: .line 218
            aload 0 /* this */
            new java.util.concurrent.atomic.AtomicReference
            dup
            aload 2 /* dst */
            invokespecial java.util.concurrent.atomic.AtomicReference.<init>:(Ljava/lang/Object;)V
            putfield com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler.byteBufReference:Ljava/util/concurrent/atomic/AtomicReference;
         3: .line 219
            return
        end local 3 // com.mongodb.connection.AsyncCompletionHandler handler
        end local 2 // org.bson.ByteBuf dst
        end local 0 // com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    4     0     this  Lcom/mongodb/internal/connection/AsynchronousChannelStream$BasicCompletionHandler;
            0    4     2      dst  Lorg/bson/ByteBuf;
            0    4     3  handler  Lcom/mongodb/connection/AsyncCompletionHandler<Lorg/bson/ByteBuf;>;
    Signature: (Lorg/bson/ByteBuf;Lcom/mongodb/connection/AsyncCompletionHandler<Lorg/bson/ByteBuf;>;)V
    MethodParameters:
         Name  Flags
      this$0   final
      dst      final
      handler  final

  public void completed(java.lang.Integer, java.lang.Void);
    descriptor: (Ljava/lang/Integer;Ljava/lang/Void;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=11, locals=5, args_size=3
        start local 0 // com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler this
        start local 1 // java.lang.Integer result
        start local 2 // java.lang.Void attachment
         0: .line 223
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler.getHandlerAndClear:()Lcom/mongodb/connection/AsyncCompletionHandler;
            astore 3 /* localHandler */
        start local 3 // com.mongodb.connection.AsyncCompletionHandler localHandler
         1: .line 224
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler.byteBufReference:Ljava/util/concurrent/atomic/AtomicReference;
            aconst_null
            invokevirtual java.util.concurrent.atomic.AtomicReference.getAndSet:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.bson.ByteBuf
            astore 4 /* localByteBuf */
        start local 4 // org.bson.ByteBuf localByteBuf
         2: .line 225
            aload 1 /* result */
            invokevirtual java.lang.Integer.intValue:()I
            iconst_m1
            if_icmpne 6
         3: .line 226
            aload 4 /* localByteBuf */
            invokeinterface org.bson.ByteBuf.release:()V
         4: .line 227
            aload 3 /* localHandler */
            new com.mongodb.MongoSocketReadException
            dup
            ldc "Prematurely reached end of stream"
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler.this$0:Lcom/mongodb/internal/connection/AsynchronousChannelStream;
            getfield com.mongodb.internal.connection.AsynchronousChannelStream.serverAddress:Lcom/mongodb/ServerAddress;
            invokespecial com.mongodb.MongoSocketReadException.<init>:(Ljava/lang/String;Lcom/mongodb/ServerAddress;)V
            invokeinterface com.mongodb.connection.AsyncCompletionHandler.failed:(Ljava/lang/Throwable;)V
         5: .line 228
            goto 13
      StackMap locals: com.mongodb.connection.AsyncCompletionHandler org.bson.ByteBuf
      StackMap stack:
         6: aload 4 /* localByteBuf */
            invokeinterface org.bson.ByteBuf.hasRemaining:()Z
            ifne 10
         7: .line 229
            aload 4 /* localByteBuf */
            invokeinterface org.bson.ByteBuf.flip:()Lorg/bson/ByteBuf;
            pop
         8: .line 230
            aload 3 /* localHandler */
            aload 4 /* localByteBuf */
            invokeinterface com.mongodb.connection.AsyncCompletionHandler.completed:(Ljava/lang/Object;)V
         9: .line 231
            goto 13
        10: .line 232
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler.this$0:Lcom/mongodb/internal/connection/AsynchronousChannelStream;
            getfield com.mongodb.internal.connection.AsynchronousChannelStream.channel:Lcom/mongodb/internal/connection/ExtendedAsynchronousByteChannel;
            aload 4 /* localByteBuf */
            invokeinterface org.bson.ByteBuf.asNIO:()Ljava/nio/ByteBuffer;
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler.this$0:Lcom/mongodb/internal/connection/AsynchronousChannelStream;
            getfield com.mongodb.internal.connection.AsynchronousChannelStream.settings:Lcom/mongodb/connection/SocketSettings;
            getstatic java.util.concurrent.TimeUnit.MILLISECONDS:Ljava/util/concurrent/TimeUnit;
            invokevirtual com.mongodb.connection.SocketSettings.getReadTimeout:(Ljava/util/concurrent/TimeUnit;)I
            i2l
            getstatic java.util.concurrent.TimeUnit.MILLISECONDS:Ljava/util/concurrent/TimeUnit;
            aconst_null
        11: .line 233
            new com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler
            dup
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler.this$0:Lcom/mongodb/internal/connection/AsynchronousChannelStream;
            aload 4 /* localByteBuf */
            aload 3 /* localHandler */
            invokespecial com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler.<init>:(Lcom/mongodb/internal/connection/AsynchronousChannelStream;Lorg/bson/ByteBuf;Lcom/mongodb/connection/AsyncCompletionHandler;)V
        12: .line 232
            invokeinterface com.mongodb.internal.connection.ExtendedAsynchronousByteChannel.read:(Ljava/nio/ByteBuffer;JLjava/util/concurrent/TimeUnit;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V
        13: .line 235
      StackMap locals:
      StackMap stack:
            return
        end local 4 // org.bson.ByteBuf localByteBuf
        end local 3 // com.mongodb.connection.AsyncCompletionHandler localHandler
        end local 2 // java.lang.Void attachment
        end local 1 // java.lang.Integer result
        end local 0 // com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   14     0          this  Lcom/mongodb/internal/connection/AsynchronousChannelStream$BasicCompletionHandler;
            0   14     1        result  Ljava/lang/Integer;
            0   14     2    attachment  Ljava/lang/Void;
            1   14     3  localHandler  Lcom/mongodb/connection/AsyncCompletionHandler<Lorg/bson/ByteBuf;>;
            2   14     4  localByteBuf  Lorg/bson/ByteBuf;
    MethodParameters:
            Name  Flags
      result      final
      attachment  final

  public void failed(java.lang.Throwable, java.lang.Void);
    descriptor: (Ljava/lang/Throwable;Ljava/lang/Void;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=5, args_size=3
        start local 0 // com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler this
        start local 1 // java.lang.Throwable t
        start local 2 // java.lang.Void attachment
         0: .line 239
            aload 0 /* this */
            invokevirtual com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler.getHandlerAndClear:()Lcom/mongodb/connection/AsyncCompletionHandler;
            astore 3 /* localHandler */
        start local 3 // com.mongodb.connection.AsyncCompletionHandler localHandler
         1: .line 240
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler.byteBufReference:Ljava/util/concurrent/atomic/AtomicReference;
            aconst_null
            invokevirtual java.util.concurrent.atomic.AtomicReference.getAndSet:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.bson.ByteBuf
            astore 4 /* localByteBuf */
        start local 4 // org.bson.ByteBuf localByteBuf
         2: .line 241
            aload 4 /* localByteBuf */
            invokeinterface org.bson.ByteBuf.release:()V
         3: .line 242
            aload 1 /* t */
            instanceof java.nio.channels.InterruptedByTimeoutException
            ifeq 6
         4: .line 243
            aload 3 /* localHandler */
            new com.mongodb.MongoSocketReadTimeoutException
            dup
            ldc "Timeout while receiving message"
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler.this$0:Lcom/mongodb/internal/connection/AsynchronousChannelStream;
            getfield com.mongodb.internal.connection.AsynchronousChannelStream.serverAddress:Lcom/mongodb/ServerAddress;
            aload 1 /* t */
            invokespecial com.mongodb.MongoSocketReadTimeoutException.<init>:(Ljava/lang/String;Lcom/mongodb/ServerAddress;Ljava/lang/Throwable;)V
            invokeinterface com.mongodb.connection.AsyncCompletionHandler.failed:(Ljava/lang/Throwable;)V
         5: .line 244
            goto 7
         6: .line 245
      StackMap locals: com.mongodb.connection.AsyncCompletionHandler org.bson.ByteBuf
      StackMap stack:
            aload 3 /* localHandler */
            aload 1 /* t */
            invokeinterface com.mongodb.connection.AsyncCompletionHandler.failed:(Ljava/lang/Throwable;)V
         7: .line 247
      StackMap locals:
      StackMap stack:
            return
        end local 4 // org.bson.ByteBuf localByteBuf
        end local 3 // com.mongodb.connection.AsyncCompletionHandler localHandler
        end local 2 // java.lang.Void attachment
        end local 1 // java.lang.Throwable t
        end local 0 // com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    8     0          this  Lcom/mongodb/internal/connection/AsynchronousChannelStream$BasicCompletionHandler;
            0    8     1             t  Ljava/lang/Throwable;
            0    8     2    attachment  Ljava/lang/Void;
            1    8     3  localHandler  Lcom/mongodb/connection/AsyncCompletionHandler<Lorg/bson/ByteBuf;>;
            2    8     4  localByteBuf  Lorg/bson/ByteBuf;
    MethodParameters:
            Name  Flags
      t           final
      attachment  final

  public void failed(java.lang.Throwable, java.lang.Object);
    descriptor: (Ljava/lang/Throwable;Ljava/lang/Object;)V
    flags: (0x1041) ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC
    Code:
      stack=3, locals=3, args_size=3
         0: .line 1
            aload 0
            aload 1
            aload 2
            checkcast java.lang.Void
            invokevirtual com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler.failed:(Ljava/lang/Throwable;Ljava/lang/Void;)V
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void completed(java.lang.Object, java.lang.Object);
    descriptor: (Ljava/lang/Object;Ljava/lang/Object;)V
    flags: (0x1041) ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC
    Code:
      stack=3, locals=3, args_size=3
         0: .line 1
            aload 0
            aload 1
            checkcast java.lang.Integer
            aload 2
            checkcast java.lang.Void
            invokevirtual com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler.completed:(Ljava/lang/Integer;Ljava/lang/Void;)V
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature
}
Signature: Lcom/mongodb/internal/connection/AsynchronousChannelStream$BaseCompletionHandler<Lorg/bson/ByteBuf;Ljava/lang/Integer;Ljava/lang/Void;>;
SourceFile: "AsynchronousChannelStream.java"
NestHost: com.mongodb.internal.connection.AsynchronousChannelStream
InnerClasses:
  private abstract BaseCompletionHandler = com.mongodb.internal.connection.AsynchronousChannelStream$BaseCompletionHandler of com.mongodb.internal.connection.AsynchronousChannelStream
  private final BasicCompletionHandler = com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler of com.mongodb.internal.connection.AsynchronousChannelStream