Skip to content

Instantly share code, notes, and snippets.

@sergiitk
Last active January 21, 2021 23:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sergiitk/39583f20906df1813f5e170317a35dc4 to your computer and use it in GitHub Desktop.
Save sergiitk/39583f20906df1813f5e170317a35dc4 to your computer and use it in GitHub Desktop.
gRPC NettyChannelBuilder binary backwards-incompatibily demonstration

Main.java source code

Code example code using gRPC, as from users' perspective

package org.example;

import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import io.grpc.netty.NettyChannelBuilder;

public class Main {
  private final NettyChannelBuilder ncb;

  public Main() {
    ncb = NettyChannelBuilder
        .forTarget("localhost:100")
        .maxInboundMessageSize(100)     // Moved from AbstractManagedChannelImplBuilder to NettyChannelBuilder in 1.33.0
        .maxInboundMetadataSize(100)    // NettyChannelBuilder's own method, before and after
        .maxRetryAttempts(100);         // Moved from AbstractManagedChannelImplBuilder to ForwardingChannelBuilder in 1.33.0
  }

  public NettyChannelBuilder getBuilder() {
    return ncb;
  }

  public static void main(String[] args) {
    Main me = new Main();
    ManagedChannel c = me.getBuilder().build();
    System.out.println(c);
  }
}

Main.java decompiled

v1.32.2

abi-1.32.2.jar - Main.java compiled with gRPC 1.32.2

javap -cp ./abi-1.32.2.jar -c org.example.Main
Compiled from "Main.java"
public class org.example.Main {
  public org.example.Main();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: aload_0
       5: ldc           #2                  // String localhost:100
       7: invokestatic  #3                  // Method io/grpc/netty/NettyChannelBuilder.forTarget:(Ljava/lang/String;)Lio/grpc/netty/NettyChannelBuilder;
      10: bipush        100
      12: invokevirtual #4                  // Method io/grpc/netty/NettyChannelBuilder.maxInboundMessageSize:(I)Lio/grpc/internal/AbstractManagedChannelImplBuilder;
      15: checkcast     #5                  // class io/grpc/netty/NettyChannelBuilder
      18: bipush        100
      20: invokevirtual #6                  // Method io/grpc/netty/NettyChannelBuilder.maxInboundMetadataSize:(I)Lio/grpc/netty/NettyChannelBuilder;
      23: bipush        100
      25: invokevirtual #7                  // Method io/grpc/netty/NettyChannelBuilder.maxRetryAttempts:(I)Lio/grpc/internal/AbstractManagedChannelImplBuilder;
      28: checkcast     #5                  // class io/grpc/netty/NettyChannelBuilder
      31: putfield      #8                  // Field ncb:Lio/grpc/netty/NettyChannelBuilder;
      34: return

  public io.grpc.netty.NettyChannelBuilder getBuilder();
    Code:
       0: aload_0
       1: getfield      #8                  // Field ncb:Lio/grpc/netty/NettyChannelBuilder;
       4: areturn

  public static void main(java.lang.String[]);
    Code:
       0: new           #9                  // class org/example/Main
       3: dup
       4: invokespecial #10                 // Method "<init>":()V
       7: astore_1
       8: aload_1
       9: invokevirtual #11                 // Method getBuilder:()Lio/grpc/netty/NettyChannelBuilder;
      12: invokevirtual #12                 // Method io/grpc/netty/NettyChannelBuilder.build:()Lio/grpc/ManagedChannel;
      15: astore_2
      16: getstatic     #13                 // Field java/lang/System.out:Ljava/io/PrintStream;
      19: aload_2
      20: invokevirtual #14                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      23: return
}

v1.33.0: broke ABI backwards-compatibily

  • abi-1.33.0 - Main.java compiled with gRPC v1.33.0
  • Note the difference in the return types of maxInboundMessageSize and maxRetryAttempts with v1.32.2
  • PR removing changing NettyChannelBuilder class hierarchy: grpc/grpc-java#7359
  • User reported issue: grpc/grpc-java#7552
javap -cp ./abi-1.33.0.jar -c org.example.Main
Compiled from "Main.java"
public class org.example.Main {
  public org.example.Main();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: aload_0
       5: ldc           #2                  // String localhost:100
       7: invokestatic  #3                  // Method io/grpc/netty/NettyChannelBuilder.forTarget:(Ljava/lang/String;)Lio/grpc/netty/NettyChannelBuilder;
      10: bipush        100
      12: invokevirtual #4                  // Method io/grpc/netty/NettyChannelBuilder.maxInboundMessageSize:(I)Lio/grpc/netty/NettyChannelBuilder;
      15: bipush        100
      17: invokevirtual #5                  // Method io/grpc/netty/NettyChannelBuilder.maxInboundMetadataSize:(I)Lio/grpc/netty/NettyChannelBuilder;
      20: bipush        100
      22: invokevirtual #6                  // Method io/grpc/netty/NettyChannelBuilder.maxRetryAttempts:(I)Lio/grpc/ForwardingChannelBuilder;
      25: checkcast     #7                  // class io/grpc/netty/NettyChannelBuilder
      28: putfield      #8                  // Field ncb:Lio/grpc/netty/NettyChannelBuilder;
      31: return

  public io.grpc.netty.NettyChannelBuilder getBuilder();
    Code:
       0: aload_0
       1: getfield      #8                  // Field ncb:Lio/grpc/netty/NettyChannelBuilder;
       4: areturn

  public static void main(java.lang.String[]);
    Code:
       0: new           #9                  // class org/example/Main
       3: dup
       4: invokespecial #10                 // Method "<init>":()V
       7: astore_1
       8: aload_1
       9: invokevirtual #11                 // Method getBuilder:()Lio/grpc/netty/NettyChannelBuilder;
      12: invokevirtual #12                 // Method io/grpc/netty/NettyChannelBuilder.build:()Lio/grpc/ManagedChannel;
      15: astore_2
      16: getstatic     #13                 // Field java/lang/System.out:Ljava/io/PrintStream;
      19: aload_2
      20: invokevirtual #14                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      23: return
}

1.34.0-SNAPSHOT: ABI compatibily fix

  • ./abi-1.34.0-SNAPSHOT.jar - Main.java compiled with the fix below (at commit be7a628)
  • PR with the fix: grpc/grpc-java#7564
  • maxInboundMessageSize return type stayed NettyChannelBuilder, as in v1.33.0, but now it works because NettyChannelBuilder extends AbstractManagedChannelImplBuilder
  • maxRetryAttempts return type changed back to AbstractManagedChannelImplBuilder, as in v1.32.2
javap -cp ./abi-1.34.0-SNAPSHOT.jar -c org.example.Main
Compiled from "Main.java"
public class org.example.Main {
  public org.example.Main();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: aload_0
       5: ldc           #2                  // String localhost:100
       7: invokestatic  #3                  // Method io/grpc/netty/NettyChannelBuilder.forTarget:(Ljava/lang/String;)Lio/grpc/netty/NettyChannelBuilder;
      10: bipush        100
      12: invokevirtual #4                  // Method io/grpc/netty/NettyChannelBuilder.maxInboundMessageSize:(I)Lio/grpc/netty/NettyChannelBuilder;
      15: bipush        100
      17: invokevirtual #5                  // Method io/grpc/netty/NettyChannelBuilder.maxInboundMetadataSize:(I)Lio/grpc/netty/NettyChannelBuilder;
      20: bipush        100
      22: invokevirtual #6                  // Method io/grpc/netty/NettyChannelBuilder.maxRetryAttempts:(I)Lio/grpc/internal/AbstractManagedChannelImplBuilder;
      25: checkcast     #7                  // class io/grpc/netty/NettyChannelBuilder
      28: putfield      #8                  // Field ncb:Lio/grpc/netty/NettyChannelBuilder;
      31: return

  public io.grpc.netty.NettyChannelBuilder getBuilder();
    Code:
       0: aload_0
       1: getfield      #8                  // Field ncb:Lio/grpc/netty/NettyChannelBuilder;
       4: areturn

  public static void main(java.lang.String[]);
    Code:
       0: new           #9                  // class org/example/Main
       3: dup
       4: invokespecial #10                 // Method "<init>":()V
       7: astore_1
       8: aload_1
       9: invokevirtual #11                 // Method getBuilder:()Lio/grpc/netty/NettyChannelBuilder;
      12: invokevirtual #12                 // Method io/grpc/netty/NettyChannelBuilder.build:()Lio/grpc/ManagedChannel;
      15: astore_2
      16: getstatic     #13                 // Field java/lang/System.out:Ljava/io/PrintStream;
      19: aload_2
      20: invokevirtual #14                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      23: return
}

Reproducing ABI error

  • Using abi-1.32.2.jar - Main.java compiled with gRPC v1.32.2
  • deps-A.B.C - dependency libraries, including gRPC vA.B.C

gRPC 1.32.2

Works, as expected

❯ java -cp "./abi-1.32.2.jar:./deps-1.32.2/*" org.example.Main
ManagedChannelOrphanWrapper{delegate=ManagedChannelImpl{logId=1, target=localhost:100}}

gRPC 1.33.0: broken ABI

Error: maxInboundMessageSize with the return type AbstractManagedChannelImplBuilder is missing.

❯ java -cp "./abi-1.32.2.jar:./deps-1.33.0/*" org.example.Main
Exception in thread "main" java.lang.NoSuchMethodError: io.grpc.netty.NettyChannelBuilder.maxInboundMessageSize(I)Lio/grpc/internal/AbstractManagedChannelImplBuilder;
	at org.example.Main.<init>(Main.java:13)
	at org.example.Main.main(Main.java:23)

gRPC 1.34.0-SNAPSHOT: fixed ABI

Works again

❯ java -cp "./abi-1.32.2.jar:./deps-1.34-be7a6281c/*" org.example.Main
ManagedChannelOrphanWrapper{delegate=ManagedChannelImpl{logId=1, target=localhost:100}}

Decompiled NettyChannelBuilder.java

NettyChannelBuilder.java 1.32.2
Compiled from "NettyChannelBuilder.java"
public final class io.grpc.netty.NettyChannelBuilder extends io.grpc.internal.AbstractManagedChannelImplBuilder<io.grpc.netty.NettyChannelBuilder> {
  public static final int DEFAULT_FLOW_CONTROL_WINDOW;

  public static io.grpc.netty.NettyChannelBuilder forAddress(java.net.SocketAddress);
    Code:
       0: new           #2                  // class io/grpc/netty/NettyChannelBuilder
       3: dup
       4: aload_0
       5: invokespecial #3                  // Method "<init>":(Ljava/net/SocketAddress;)V
       8: areturn

  public static io.grpc.netty.NettyChannelBuilder forAddress(java.lang.String, int);
    Code:
       0: new           #2                  // class io/grpc/netty/NettyChannelBuilder
       3: dup
       4: aload_0
       5: iload_1
       6: invokespecial #4                  // Method "<init>":(Ljava/lang/String;I)V
       9: areturn

  public static io.grpc.netty.NettyChannelBuilder forTarget(java.lang.String);
    Code:
       0: new           #2                  // class io/grpc/netty/NettyChannelBuilder
       3: dup
       4: aload_0
       5: invokespecial #5                  // Method "<init>":(Ljava/lang/String;)V
       8: areturn

  io.grpc.netty.NettyChannelBuilder(java.lang.String, int);
    Code:
       0: aload_0
       1: aload_1
       2: iload_2
       3: invokestatic  #6                  // Method io/grpc/internal/GrpcUtil.authorityFromHostAndPort:(Ljava/lang/String;I)Ljava/lang/String;
       6: invokespecial #5                  // Method "<init>":(Ljava/lang/String;)V
       9: return

  io.grpc.netty.NettyChannelBuilder(java.lang.String);
    Code:
       0: aload_0
       1: aload_1
       2: invokespecial #7                  // Method io/grpc/internal/AbstractManagedChannelImplBuilder."<init>":(Ljava/lang/String;)V
       5: aload_0
       6: new           #8                  // class java/util/HashMap
       9: dup
      10: invokespecial #9                  // Method java/util/HashMap."<init>":()V
      13: putfield      #10                 // Field channelOptions:Ljava/util/Map;
      16: aload_0
      17: getstatic     #11                 // Field io/grpc/netty/NegotiationType.TLS:Lio/grpc/netty/NegotiationType;
      20: putfield      #12                 // Field negotiationType:Lio/grpc/netty/NegotiationType;
      23: aload_0
      24: getstatic     #13                 // Field DEFAULT_CHANNEL_FACTORY:Lio/netty/channel/ChannelFactory;
      27: putfield      #14                 // Field channelFactory:Lio/netty/channel/ChannelFactory;
      30: aload_0
      31: getstatic     #15                 // Field DEFAULT_EVENT_LOOP_GROUP_POOL:Lio/grpc/internal/ObjectPool;
      34: putfield      #16                 // Field eventLoopGroupPool:Lio/grpc/internal/ObjectPool;
      37: aload_0
      38: getstatic     #17                 // Field DEFAULT_AUTO_FLOW_CONTROL:Z
      41: putfield      #18                 // Field autoFlowControl:Z
      44: aload_0
      45: ldc           #19                 // int 1048576
      47: putfield      #20                 // Field flowControlWindow:I
      50: aload_0
      51: sipush        8192
      54: putfield      #21                 // Field maxHeaderListSize:I
      57: aload_0
      58: ldc2_w        #22                 // long 9223372036854775807l
      61: putfield      #24                 // Field keepAliveTimeNanos:J
      64: aload_0
      65: getstatic     #25                 // Field io/grpc/internal/GrpcUtil.DEFAULT_KEEPALIVE_TIMEOUT_NANOS:J
      68: putfield      #26                 // Field keepAliveTimeoutNanos:J
      71: aload_0
      72: iconst_0
      73: putfield      #27                 // Field useGetForSafeMethods:Z
      76: return

  io.grpc.netty.NettyChannelBuilder(java.net.SocketAddress);
    Code:
       0: aload_0
       1: aload_1
       2: aload_1
       3: invokestatic  #28                 // Method getAuthorityFromAddress:(Ljava/net/SocketAddress;)Ljava/lang/String;
       6: invokespecial #29                 // Method io/grpc/internal/AbstractManagedChannelImplBuilder."<init>":(Ljava/net/SocketAddress;Ljava/lang/String;)V
       9: aload_0
      10: new           #8                  // class java/util/HashMap
      13: dup
      14: invokespecial #9                  // Method java/util/HashMap."<init>":()V
      17: putfield      #10                 // Field channelOptions:Ljava/util/Map;
      20: aload_0
      21: getstatic     #11                 // Field io/grpc/netty/NegotiationType.TLS:Lio/grpc/netty/NegotiationType;
      24: putfield      #12                 // Field negotiationType:Lio/grpc/netty/NegotiationType;
      27: aload_0
      28: getstatic     #13                 // Field DEFAULT_CHANNEL_FACTORY:Lio/netty/channel/ChannelFactory;
      31: putfield      #14                 // Field channelFactory:Lio/netty/channel/ChannelFactory;
      34: aload_0
      35: getstatic     #15                 // Field DEFAULT_EVENT_LOOP_GROUP_POOL:Lio/grpc/internal/ObjectPool;
      38: putfield      #16                 // Field eventLoopGroupPool:Lio/grpc/internal/ObjectPool;
      41: aload_0
      42: getstatic     #17                 // Field DEFAULT_AUTO_FLOW_CONTROL:Z
      45: putfield      #18                 // Field autoFlowControl:Z
      48: aload_0
      49: ldc           #19                 // int 1048576
      51: putfield      #20                 // Field flowControlWindow:I
      54: aload_0
      55: sipush        8192
      58: putfield      #21                 // Field maxHeaderListSize:I
      61: aload_0
      62: ldc2_w        #22                 // long 9223372036854775807l
      65: putfield      #24                 // Field keepAliveTimeNanos:J
      68: aload_0
      69: getstatic     #25                 // Field io/grpc/internal/GrpcUtil.DEFAULT_KEEPALIVE_TIMEOUT_NANOS:J
      72: putfield      #26                 // Field keepAliveTimeoutNanos:J
      75: aload_0
      76: iconst_0
      77: putfield      #27                 // Field useGetForSafeMethods:Z
      80: return

  public io.grpc.netty.NettyChannelBuilder channelType(java.lang.Class<? extends io.netty.channel.Channel>);
    Code:
       0: aload_1
       1: ldc           #34                 // String channelType
       3: invokestatic  #35                 // Method com/google/common/base/Preconditions.checkNotNull:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
       6: pop
       7: aload_0
       8: new           #36                 // class io/netty/channel/ReflectiveChannelFactory
      11: dup
      12: aload_1
      13: invokespecial #37                 // Method io/netty/channel/ReflectiveChannelFactory."<init>":(Ljava/lang/Class;)V
      16: invokevirtual #38                 // Method channelFactory:(Lio/netty/channel/ChannelFactory;)Lio/grpc/netty/NettyChannelBuilder;
      19: areturn

  public io.grpc.netty.NettyChannelBuilder channelFactory(io.netty.channel.ChannelFactory<? extends io.netty.channel.Channel>);
    Code:
       0: aload_0
       1: aload_1
       2: ldc           #39                 // String channelFactory
       4: invokestatic  #35                 // Method com/google/common/base/Preconditions.checkNotNull:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
       7: checkcast     #40                 // class io/netty/channel/ChannelFactory
      10: putfield      #14                 // Field channelFactory:Lio/netty/channel/ChannelFactory;
      13: aload_0
      14: areturn

  public <T> io.grpc.netty.NettyChannelBuilder withOption(io.netty.channel.ChannelOption<T>, T);
    Code:
       0: aload_0
       1: getfield      #10                 // Field channelOptions:Ljava/util/Map;
       4: aload_1
       5: aload_2
       6: invokeinterface #41,  3           // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      11: pop
      12: aload_0
      13: areturn

  public io.grpc.netty.NettyChannelBuilder negotiationType(io.grpc.netty.NegotiationType);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #12                 // Field negotiationType:Lio/grpc/netty/NegotiationType;
       5: aload_0
       6: areturn

  public io.grpc.netty.NettyChannelBuilder eventLoopGroup(io.netty.channel.EventLoopGroup);
    Code:
       0: aload_1
       1: ifnull        17
       4: aload_0
       5: new           #42                 // class io/grpc/internal/FixedObjectPool
       8: dup
       9: aload_1
      10: invokespecial #43                 // Method io/grpc/internal/FixedObjectPool."<init>":(Ljava/lang/Object;)V
      13: invokevirtual #44                 // Method eventLoopGroupPool:(Lio/grpc/internal/ObjectPool;)Lio/grpc/netty/NettyChannelBuilder;
      16: areturn
      17: aload_0
      18: getstatic     #15                 // Field DEFAULT_EVENT_LOOP_GROUP_POOL:Lio/grpc/internal/ObjectPool;
      21: invokevirtual #44                 // Method eventLoopGroupPool:(Lio/grpc/internal/ObjectPool;)Lio/grpc/netty/NettyChannelBuilder;
      24: areturn

  io.grpc.netty.NettyChannelBuilder eventLoopGroupPool(io.grpc.internal.ObjectPool<? extends io.netty.channel.EventLoopGroup>);
    Code:
       0: aload_0
       1: aload_1
       2: ldc           #45                 // String eventLoopGroupPool
       4: invokestatic  #35                 // Method com/google/common/base/Preconditions.checkNotNull:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
       7: checkcast     #46                 // class io/grpc/internal/ObjectPool
      10: putfield      #16                 // Field eventLoopGroupPool:Lio/grpc/internal/ObjectPool;
      13: aload_0
      14: areturn

  public io.grpc.netty.NettyChannelBuilder sslContext(io.netty.handler.ssl.SslContext);
    Code:
       0: aload_1
       1: ifnull        20
       4: aload_1
       5: invokevirtual #47                 // Method io/netty/handler/ssl/SslContext.isClient:()Z
       8: ldc           #48                 // String Server SSL context can not be used for client channel
      10: invokestatic  #49                 // Method com/google/common/base/Preconditions.checkArgument:(ZLjava/lang/Object;)V
      13: aload_1
      14: invokevirtual #50                 // Method io/netty/handler/ssl/SslContext.applicationProtocolNegotiator:()Lio/netty/handler/ssl/ApplicationProtocolNegotiator;
      17: invokestatic  #51                 // Method io/grpc/netty/GrpcSslContexts.ensureAlpnAndH2Enabled:(Lio/netty/handler/ssl/ApplicationProtocolNegotiator;)V
      20: aload_0
      21: aload_1
      22: putfield      #52                 // Field sslContext:Lio/netty/handler/ssl/SslContext;
      25: aload_0
      26: areturn

  public io.grpc.netty.NettyChannelBuilder initialFlowControlWindow(int);
    Code:
       0: iload_1
       1: ifle          8
       4: iconst_1
       5: goto          9
       8: iconst_0
       9: ldc           #53                 // String initialFlowControlWindow must be positive
      11: invokestatic  #49                 // Method com/google/common/base/Preconditions.checkArgument:(ZLjava/lang/Object;)V
      14: aload_0
      15: iload_1
      16: putfield      #20                 // Field flowControlWindow:I
      19: aload_0
      20: iconst_1
      21: putfield      #18                 // Field autoFlowControl:Z
      24: aload_0
      25: areturn

  public io.grpc.netty.NettyChannelBuilder flowControlWindow(int);
    Code:
       0: iload_1
       1: ifle          8
       4: iconst_1
       5: goto          9
       8: iconst_0
       9: ldc           #54                 // String flowControlWindow must be positive
      11: invokestatic  #49                 // Method com/google/common/base/Preconditions.checkArgument:(ZLjava/lang/Object;)V
      14: aload_0
      15: iload_1
      16: putfield      #20                 // Field flowControlWindow:I
      19: aload_0
      20: iconst_0
      21: putfield      #18                 // Field autoFlowControl:Z
      24: aload_0
      25: areturn

  public io.grpc.netty.NettyChannelBuilder maxHeaderListSize(int);
    Code:
       0: aload_0
       1: iload_1
       2: invokevirtual #55                 // Method maxInboundMetadataSize:(I)Lio/grpc/netty/NettyChannelBuilder;
       5: areturn

  public io.grpc.netty.NettyChannelBuilder maxInboundMetadataSize(int);
    Code:
       0: iload_1
       1: ifle          8
       4: iconst_1
       5: goto          9
       8: iconst_0
       9: ldc           #56                 // String maxInboundMetadataSize must be > 0
      11: invokestatic  #49                 // Method com/google/common/base/Preconditions.checkArgument:(ZLjava/lang/Object;)V
      14: aload_0
      15: iload_1
      16: putfield      #21                 // Field maxHeaderListSize:I
      19: aload_0
      20: areturn

  public io.grpc.netty.NettyChannelBuilder usePlaintext();
    Code:
       0: aload_0
       1: getstatic     #57                 // Field io/grpc/netty/NegotiationType.PLAINTEXT:Lio/grpc/netty/NegotiationType;
       4: invokevirtual #58                 // Method negotiationType:(Lio/grpc/netty/NegotiationType;)Lio/grpc/netty/NettyChannelBuilder;
       7: pop
       8: aload_0
       9: areturn

  public io.grpc.netty.NettyChannelBuilder useTransportSecurity();
    Code:
       0: aload_0
       1: getstatic     #11                 // Field io/grpc/netty/NegotiationType.TLS:Lio/grpc/netty/NegotiationType;
       4: invokevirtual #58                 // Method negotiationType:(Lio/grpc/netty/NegotiationType;)Lio/grpc/netty/NettyChannelBuilder;
       7: pop
       8: aload_0
       9: areturn

  public io.grpc.netty.NettyChannelBuilder keepAliveTime(long, java.util.concurrent.TimeUnit);
    Code:
       0: lload_1
       1: lconst_0
       2: lcmp
       3: ifle          10
       6: iconst_1
       7: goto          11
      10: iconst_0
      11: ldc           #59                 // String keepalive time must be positive
      13: invokestatic  #49                 // Method com/google/common/base/Preconditions.checkArgument:(ZLjava/lang/Object;)V
      16: aload_0
      17: aload_3
      18: lload_1
      19: invokevirtual #60                 // Method java/util/concurrent/TimeUnit.toNanos:(J)J
      22: putfield      #24                 // Field keepAliveTimeNanos:J
      25: aload_0
      26: aload_0
      27: getfield      #24                 // Field keepAliveTimeNanos:J
      30: invokestatic  #61                 // Method io/grpc/internal/KeepAliveManager.clampKeepAliveTimeInNanos:(J)J
      33: putfield      #24                 // Field keepAliveTimeNanos:J
      36: aload_0
      37: getfield      #24                 // Field keepAliveTimeNanos:J
      40: getstatic     #62                 // Field AS_LARGE_AS_INFINITE:J
      43: lcmp
      44: iflt          54
      47: aload_0
      48: ldc2_w        #22                 // long 9223372036854775807l
      51: putfield      #24                 // Field keepAliveTimeNanos:J
      54: aload_0
      55: areturn

  public io.grpc.netty.NettyChannelBuilder keepAliveTimeout(long, java.util.concurrent.TimeUnit);
    Code:
       0: lload_1
       1: lconst_0
       2: lcmp
       3: ifle          10
       6: iconst_1
       7: goto          11
      10: iconst_0
      11: ldc           #63                 // String keepalive timeout must be positive
      13: invokestatic  #49                 // Method com/google/common/base/Preconditions.checkArgument:(ZLjava/lang/Object;)V
      16: aload_0
      17: aload_3
      18: lload_1
      19: invokevirtual #60                 // Method java/util/concurrent/TimeUnit.toNanos:(J)J
      22: putfield      #26                 // Field keepAliveTimeoutNanos:J
      25: aload_0
      26: aload_0
      27: getfield      #26                 // Field keepAliveTimeoutNanos:J
      30: invokestatic  #64                 // Method io/grpc/internal/KeepAliveManager.clampKeepAliveTimeoutInNanos:(J)J
      33: putfield      #26                 // Field keepAliveTimeoutNanos:J
      36: aload_0
      37: areturn

  public io.grpc.netty.NettyChannelBuilder keepAliveWithoutCalls(boolean);
    Code:
       0: aload_0
       1: iload_1
       2: putfield      #65                 // Field keepAliveWithoutCalls:Z
       5: aload_0
       6: areturn

  public io.grpc.netty.NettyChannelBuilder localSocketPicker(io.grpc.netty.NettyChannelBuilder$LocalSocketPicker);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #66                 // Field localSocketPicker:Lio/grpc/netty/NettyChannelBuilder$LocalSocketPicker;
       5: aload_0
       6: areturn

  protected io.grpc.internal.ClientTransportFactory buildTransportFactory();
    Code:
       0: aload_0
       1: invokevirtual #67                 // Method assertEventLoopAndChannelType:()V
       4: aload_0
       5: getfield      #68                 // Field protocolNegotiatorFactory:Lio/grpc/netty/NettyChannelBuilder$ProtocolNegotiatorFactory;
       8: ifnull        24
      11: aload_0
      12: getfield      #68                 // Field protocolNegotiatorFactory:Lio/grpc/netty/NettyChannelBuilder$ProtocolNegotiatorFactory;
      15: invokeinterface #69,  1           // InterfaceMethod io/grpc/netty/NettyChannelBuilder$ProtocolNegotiatorFactory.buildProtocolNegotiator:()Lio/grpc/netty/ProtocolNegotiator;
      20: astore_1
      21: goto          76
      24: aload_0
      25: getfield      #52                 // Field sslContext:Lio/netty/handler/ssl/SslContext;
      28: astore_2
      29: aload_0
      30: getfield      #12                 // Field negotiationType:Lio/grpc/netty/NegotiationType;
      33: getstatic     #11                 // Field io/grpc/netty/NegotiationType.TLS:Lio/grpc/netty/NegotiationType;
      36: if_acmpne     63
      39: aload_2
      40: ifnonnull     63
      43: invokestatic  #70                 // Method io/grpc/netty/GrpcSslContexts.forClient:()Lio/netty/handler/ssl/SslContextBuilder;
      46: invokevirtual #71                 // Method io/netty/handler/ssl/SslContextBuilder.build:()Lio/netty/handler/ssl/SslContext;
      49: astore_2
      50: goto          63
      53: astore_3
      54: new           #73                 // class java/lang/RuntimeException
      57: dup
      58: aload_3
      59: invokespecial #74                 // Method java/lang/RuntimeException."<init>":(Ljava/lang/Throwable;)V
      62: athrow
      63: aload_0
      64: getfield      #12                 // Field negotiationType:Lio/grpc/netty/NegotiationType;
      67: aload_2
      68: aload_0
      69: invokevirtual #75                 // Method getOffloadExecutorPool:()Lio/grpc/internal/ObjectPool;
      72: invokestatic  #76                 // Method createProtocolNegotiatorByType:(Lio/grpc/netty/NegotiationType;Lio/netty/handler/ssl/SslContext;Lio/grpc/internal/ObjectPool;)Lio/grpc/netty/ProtocolNegotiator;
      75: astore_1
      76: new           #77                 // class io/grpc/netty/NettyChannelBuilder$NettyTransportFactory
      79: dup
      80: aload_1
      81: aload_0
      82: getfield      #14                 // Field channelFactory:Lio/netty/channel/ChannelFactory;
      85: aload_0
      86: getfield      #10                 // Field channelOptions:Ljava/util/Map;
      89: aload_0
      90: getfield      #16                 // Field eventLoopGroupPool:Lio/grpc/internal/ObjectPool;
      93: aload_0
      94: getfield      #18                 // Field autoFlowControl:Z
      97: aload_0
      98: getfield      #20                 // Field flowControlWindow:I
     101: aload_0
     102: invokevirtual #78                 // Method maxInboundMessageSize:()I
     105: aload_0
     106: getfield      #21                 // Field maxHeaderListSize:I
     109: aload_0
     110: getfield      #24                 // Field keepAliveTimeNanos:J
     113: aload_0
     114: getfield      #26                 // Field keepAliveTimeoutNanos:J
     117: aload_0
     118: getfield      #65                 // Field keepAliveWithoutCalls:Z
     121: aload_0
     122: getfield      #79                 // Field transportTracerFactory:Lio/grpc/internal/TransportTracer$Factory;
     125: aload_0
     126: getfield      #66                 // Field localSocketPicker:Lio/grpc/netty/NettyChannelBuilder$LocalSocketPicker;
     129: iconst_0
     130: invokespecial #80                 // Method io/grpc/netty/NettyChannelBuilder$NettyTransportFactory."<init>":(Lio/grpc/netty/ProtocolNegotiator;Lio/netty/channel/ChannelFactory;Ljava/util/Map;Lio/grpc/internal/ObjectPool;ZIIIJJZLio/grpc/internal/TransportTracer$Factory;Lio/grpc/netty/NettyChannelBuilder$LocalSocketPicker;Z)V
     133: areturn
    Exception table:
       from    to  target type
          43    50    53   Class javax/net/ssl/SSLException

  void assertEventLoopAndChannelType();
    Code:
       0: aload_0
       1: getfield      #14                 // Field channelFactory:Lio/netty/channel/ChannelFactory;
       4: getstatic     #13                 // Field DEFAULT_CHANNEL_FACTORY:Lio/netty/channel/ChannelFactory;
       7: if_acmpeq     24
      10: aload_0
      11: getfield      #16                 // Field eventLoopGroupPool:Lio/grpc/internal/ObjectPool;
      14: getstatic     #15                 // Field DEFAULT_EVENT_LOOP_GROUP_POOL:Lio/grpc/internal/ObjectPool;
      17: if_acmpeq     24
      20: iconst_1
      21: goto          25
      24: iconst_0
      25: istore_1
      26: aload_0
      27: getfield      #14                 // Field channelFactory:Lio/netty/channel/ChannelFactory;
      30: getstatic     #13                 // Field DEFAULT_CHANNEL_FACTORY:Lio/netty/channel/ChannelFactory;
      33: if_acmpne     50
      36: aload_0
      37: getfield      #16                 // Field eventLoopGroupPool:Lio/grpc/internal/ObjectPool;
      40: getstatic     #15                 // Field DEFAULT_EVENT_LOOP_GROUP_POOL:Lio/grpc/internal/ObjectPool;
      43: if_acmpne     50
      46: iconst_1
      47: goto          51
      50: iconst_0
      51: istore_2
      52: iload_1
      53: ifne          60
      56: iload_2
      57: ifeq          64
      60: iconst_1
      61: goto          65
      64: iconst_0
      65: ldc           #81                 // String Both EventLoopGroup and ChannelType should be provided or neither should be
      67: invokestatic  #82                 // Method com/google/common/base/Preconditions.checkState:(ZLjava/lang/Object;)V
      70: return

  protected int getDefaultPort();
    Code:
       0: getstatic     #83                 // Field io/grpc/netty/NettyChannelBuilder$1.$SwitchMap$io$grpc$netty$NegotiationType:[I
       3: aload_0
       4: getfield      #12                 // Field negotiationType:Lio/grpc/netty/NegotiationType;
       7: invokevirtual #84                 // Method io/grpc/netty/NegotiationType.ordinal:()I
      10: iaload
      11: tableswitch   { // 1 to 3
                     1: 36
                     2: 36
                     3: 39
               default: 43
          }
      36: bipush        80
      38: ireturn
      39: sipush        443
      42: ireturn
      43: new           #85                 // class java/lang/AssertionError
      46: dup
      47: new           #86                 // class java/lang/StringBuilder
      50: dup
      51: invokespecial #87                 // Method java/lang/StringBuilder."<init>":()V
      54: aload_0
      55: getfield      #12                 // Field negotiationType:Lio/grpc/netty/NegotiationType;
      58: invokevirtual #88                 // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
      61: ldc           #89                 // String  not handled
      63: invokevirtual #90                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      66: invokevirtual #91                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      69: invokespecial #92                 // Method java/lang/AssertionError."<init>":(Ljava/lang/Object;)V
      72: athrow

  void overrideAuthorityChecker(io.grpc.netty.NettyChannelBuilder$OverrideAuthorityChecker);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #93                 // Field authorityChecker:Lio/grpc/netty/NettyChannelBuilder$OverrideAuthorityChecker;
       5: return

  static io.grpc.netty.ProtocolNegotiator createProtocolNegotiatorByType(io.grpc.netty.NegotiationType, io.netty.handler.ssl.SslContext, io.grpc.internal.ObjectPool<? extends java.util.concurrent.Executor>);
    Code:
       0: getstatic     #83                 // Field io/grpc/netty/NettyChannelBuilder$1.$SwitchMap$io$grpc$netty$NegotiationType:[I
       3: aload_0
       4: invokevirtual #84                 // Method io/grpc/netty/NegotiationType.ordinal:()I
       7: iaload
       8: tableswitch   { // 1 to 3
                     1: 36
                     2: 40
                     3: 44
               default: 50
          }
      36: invokestatic  #94                 // Method io/grpc/netty/ProtocolNegotiators.plaintext:()Lio/grpc/netty/ProtocolNegotiator;
      39: areturn
      40: invokestatic  #95                 // Method io/grpc/netty/ProtocolNegotiators.plaintextUpgrade:()Lio/grpc/netty/ProtocolNegotiator;
      43: areturn
      44: aload_1
      45: aload_2
      46: invokestatic  #96                 // Method io/grpc/netty/ProtocolNegotiators.tls:(Lio/netty/handler/ssl/SslContext;Lio/grpc/internal/ObjectPool;)Lio/grpc/netty/ProtocolNegotiator;
      49: areturn
      50: new           #97                 // class java/lang/IllegalArgumentException
      53: dup
      54: new           #86                 // class java/lang/StringBuilder
      57: dup
      58: invokespecial #87                 // Method java/lang/StringBuilder."<init>":()V
      61: ldc           #98                 // String Unsupported negotiationType:
      63: invokevirtual #90                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      66: aload_0
      67: invokevirtual #88                 // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
      70: invokevirtual #91                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      73: invokespecial #99                 // Method java/lang/IllegalArgumentException."<init>":(Ljava/lang/String;)V
      76: athrow

  protected java.lang.String checkAuthority(java.lang.String);
    Code:
       0: aload_0
       1: getfield      #93                 // Field authorityChecker:Lio/grpc/netty/NettyChannelBuilder$OverrideAuthorityChecker;
       4: ifnull        18
       7: aload_0
       8: getfield      #93                 // Field authorityChecker:Lio/grpc/netty/NettyChannelBuilder$OverrideAuthorityChecker;
      11: aload_1
      12: invokeinterface #100,  2          // InterfaceMethod io/grpc/netty/NettyChannelBuilder$OverrideAuthorityChecker.checkAuthority:(Ljava/lang/String;)Ljava/lang/String;
      17: areturn
      18: aload_0
      19: aload_1
      20: invokespecial #101                // Method io/grpc/internal/AbstractManagedChannelImplBuilder.checkAuthority:(Ljava/lang/String;)Ljava/lang/String;
      23: areturn

  void protocolNegotiatorFactory(io.grpc.netty.NettyChannelBuilder$ProtocolNegotiatorFactory);
    Code:
       0: aload_0
       1: aload_1
       2: ldc           #102                // String protocolNegotiatorFactory
       4: invokestatic  #35                 // Method com/google/common/base/Preconditions.checkNotNull:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
       7: checkcast     #103                // class io/grpc/netty/NettyChannelBuilder$ProtocolNegotiatorFactory
      10: putfield      #68                 // Field protocolNegotiatorFactory:Lio/grpc/netty/NettyChannelBuilder$ProtocolNegotiatorFactory;
      13: return

  protected void setTracingEnabled(boolean);
    Code:
       0: aload_0
       1: iload_1
       2: invokespecial #104                // Method io/grpc/internal/AbstractManagedChannelImplBuilder.setTracingEnabled:(Z)V
       5: return

  protected void setStatsEnabled(boolean);
    Code:
       0: aload_0
       1: iload_1
       2: invokespecial #105                // Method io/grpc/internal/AbstractManagedChannelImplBuilder.setStatsEnabled:(Z)V
       5: return

  protected void setStatsRecordStartedRpcs(boolean);
    Code:
       0: aload_0
       1: iload_1
       2: invokespecial #106                // Method io/grpc/internal/AbstractManagedChannelImplBuilder.setStatsRecordStartedRpcs:(Z)V
       5: return

  protected void setStatsRecordRealTimeMetrics(boolean);
    Code:
       0: aload_0
       1: iload_1
       2: invokespecial #107                // Method io/grpc/internal/AbstractManagedChannelImplBuilder.setStatsRecordRealTimeMetrics:(Z)V
       5: return

  io.grpc.netty.NettyChannelBuilder setTransportTracerFactory(io.grpc.internal.TransportTracer$Factory);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #79                 // Field transportTracerFactory:Lio/grpc/internal/TransportTracer$Factory;
       5: aload_0
       6: areturn

  public io.grpc.ManagedChannelBuilder keepAliveWithoutCalls(boolean);
    Code:
       0: aload_0
       1: iload_1
       2: invokevirtual #108                // Method keepAliveWithoutCalls:(Z)Lio/grpc/netty/NettyChannelBuilder;
       5: areturn

  public io.grpc.ManagedChannelBuilder keepAliveTimeout(long, java.util.concurrent.TimeUnit);
    Code:
       0: aload_0
       1: lload_1
       2: aload_3
       3: invokevirtual #109                // Method keepAliveTimeout:(JLjava/util/concurrent/TimeUnit;)Lio/grpc/netty/NettyChannelBuilder;
       6: areturn

  public io.grpc.ManagedChannelBuilder keepAliveTime(long, java.util.concurrent.TimeUnit);
    Code:
       0: aload_0
       1: lload_1
       2: aload_3
       3: invokevirtual #110                // Method keepAliveTime:(JLjava/util/concurrent/TimeUnit;)Lio/grpc/netty/NettyChannelBuilder;
       6: areturn

  public io.grpc.ManagedChannelBuilder maxInboundMetadataSize(int);
    Code:
       0: aload_0
       1: iload_1
       2: invokevirtual #55                 // Method maxInboundMetadataSize:(I)Lio/grpc/netty/NettyChannelBuilder;
       5: areturn

  public io.grpc.ManagedChannelBuilder useTransportSecurity();
    Code:
       0: aload_0
       1: invokevirtual #111                // Method useTransportSecurity:()Lio/grpc/netty/NettyChannelBuilder;
       4: areturn

  public io.grpc.ManagedChannelBuilder usePlaintext();
    Code:
       0: aload_0
       1: invokevirtual #112                // Method usePlaintext:()Lio/grpc/netty/NettyChannelBuilder;
       4: areturn

  static {};
    Code:
       0: getstatic     #113                // Field java/util/concurrent/TimeUnit.DAYS:Ljava/util/concurrent/TimeUnit;
       3: ldc2_w        #114                // long 1000l
       6: invokevirtual #60                 // Method java/util/concurrent/TimeUnit.toNanos:(J)J
       9: putstatic     #62                 // Field AS_LARGE_AS_INFINITE:J
      12: new           #36                 // class io/netty/channel/ReflectiveChannelFactory
      15: dup
      16: getstatic     #116                // Field io/grpc/netty/Utils.DEFAULT_CLIENT_CHANNEL_TYPE:Ljava/lang/Class;
      19: invokespecial #37                 // Method io/netty/channel/ReflectiveChannelFactory."<init>":(Ljava/lang/Class;)V
      22: putstatic     #13                 // Field DEFAULT_CHANNEL_FACTORY:Lio/netty/channel/ChannelFactory;
      25: getstatic     #117                // Field io/grpc/netty/Utils.DEFAULT_WORKER_EVENT_LOOP_GROUP:Lio/grpc/internal/SharedResourceHolder$Resource;
      28: invokestatic  #118                // Method io/grpc/internal/SharedResourcePool.forResource:(Lio/grpc/internal/SharedResourceHolder$Resource;)Lio/grpc/internal/SharedResourcePool;
      31: putstatic     #15                 // Field DEFAULT_EVENT_LOOP_GROUP_POOL:Lio/grpc/internal/ObjectPool;
      34: ldc           #119                // String GRPC_EXPERIMENTAL_AUTOFLOWCONTROL
      36: invokestatic  #120                // Method java/lang/System.getenv:(Ljava/lang/String;)Ljava/lang/String;
      39: astore_0
      40: aload_0
      41: ifnonnull     47
      44: ldc           #121                // String true
      46: astore_0
      47: aload_0
      48: invokestatic  #122                // Method java/lang/Boolean.parseBoolean:(Ljava/lang/String;)Z
      51: putstatic     #17                 // Field DEFAULT_AUTO_FLOW_CONTROL:Z
      54: return
}
NettyChannelBuilder.java 1.33.0
Compiled from "NettyChannelBuilder.java"
public final class io.grpc.netty.NettyChannelBuilder extends io.grpc.internal.AbstractManagedChannelImplBuilder<io.grpc.netty.NettyChannelBuilder> {
  public static final int DEFAULT_FLOW_CONTROL_WINDOW;

  public static io.grpc.netty.NettyChannelBuilder forAddress(java.net.SocketAddress);
    Code:
       0: new           #2                  // class io/grpc/netty/NettyChannelBuilder
       3: dup
       4: aload_0
       5: invokespecial #3                  // Method "<init>":(Ljava/net/SocketAddress;)V
       8: areturn

  public static io.grpc.netty.NettyChannelBuilder forAddress(java.lang.String, int);
    Code:
       0: new           #2                  // class io/grpc/netty/NettyChannelBuilder
       3: dup
       4: aload_0
       5: iload_1
       6: invokespecial #4                  // Method "<init>":(Ljava/lang/String;I)V
       9: areturn

  public static io.grpc.netty.NettyChannelBuilder forTarget(java.lang.String);
    Code:
       0: new           #2                  // class io/grpc/netty/NettyChannelBuilder
       3: dup
       4: aload_0
       5: invokespecial #5                  // Method "<init>":(Ljava/lang/String;)V
       8: areturn

  io.grpc.netty.NettyChannelBuilder(java.lang.String, int);
    Code:
       0: aload_0
       1: aload_1
       2: iload_2
       3: invokestatic  #6                  // Method io/grpc/internal/GrpcUtil.authorityFromHostAndPort:(Ljava/lang/String;I)Ljava/lang/String;
       6: invokespecial #5                  // Method "<init>":(Ljava/lang/String;)V
       9: return

  io.grpc.netty.NettyChannelBuilder(java.lang.String);
    Code:
       0: aload_0
       1: aload_1
       2: invokespecial #7                  // Method io/grpc/internal/AbstractManagedChannelImplBuilder."<init>":(Ljava/lang/String;)V
       5: aload_0
       6: new           #8                  // class java/util/HashMap
       9: dup
      10: invokespecial #9                  // Method java/util/HashMap."<init>":()V
      13: putfield      #10                 // Field channelOptions:Ljava/util/Map;
      16: aload_0
      17: getstatic     #11                 // Field io/grpc/netty/NegotiationType.TLS:Lio/grpc/netty/NegotiationType;
      20: putfield      #12                 // Field negotiationType:Lio/grpc/netty/NegotiationType;
      23: aload_0
      24: getstatic     #13                 // Field DEFAULT_CHANNEL_FACTORY:Lio/netty/channel/ChannelFactory;
      27: putfield      #14                 // Field channelFactory:Lio/netty/channel/ChannelFactory;
      30: aload_0
      31: getstatic     #15                 // Field DEFAULT_EVENT_LOOP_GROUP_POOL:Lio/grpc/internal/ObjectPool;
      34: putfield      #16                 // Field eventLoopGroupPool:Lio/grpc/internal/ObjectPool;
      37: aload_0
      38: getstatic     #17                 // Field DEFAULT_AUTO_FLOW_CONTROL:Z
      41: putfield      #18                 // Field autoFlowControl:Z
      44: aload_0
      45: ldc           #19                 // int 1048576
      47: putfield      #20                 // Field flowControlWindow:I
      50: aload_0
      51: sipush        8192
      54: putfield      #21                 // Field maxHeaderListSize:I
      57: aload_0
      58: ldc2_w        #22                 // long 9223372036854775807l
      61: putfield      #24                 // Field keepAliveTimeNanos:J
      64: aload_0
      65: getstatic     #25                 // Field io/grpc/internal/GrpcUtil.DEFAULT_KEEPALIVE_TIMEOUT_NANOS:J
      68: putfield      #26                 // Field keepAliveTimeoutNanos:J
      71: aload_0
      72: iconst_0
      73: putfield      #27                 // Field useGetForSafeMethods:Z
      76: return

  io.grpc.netty.NettyChannelBuilder(java.net.SocketAddress);
    Code:
       0: aload_0
       1: aload_1
       2: aload_1
       3: invokestatic  #28                 // Method getAuthorityFromAddress:(Ljava/net/SocketAddress;)Ljava/lang/String;
       6: invokespecial #29                 // Method io/grpc/internal/AbstractManagedChannelImplBuilder."<init>":(Ljava/net/SocketAddress;Ljava/lang/String;)V
       9: aload_0
      10: new           #8                  // class java/util/HashMap
      13: dup
      14: invokespecial #9                  // Method java/util/HashMap."<init>":()V
      17: putfield      #10                 // Field channelOptions:Ljava/util/Map;
      20: aload_0
      21: getstatic     #11                 // Field io/grpc/netty/NegotiationType.TLS:Lio/grpc/netty/NegotiationType;
      24: putfield      #12                 // Field negotiationType:Lio/grpc/netty/NegotiationType;
      27: aload_0
      28: getstatic     #13                 // Field DEFAULT_CHANNEL_FACTORY:Lio/netty/channel/ChannelFactory;
      31: putfield      #14                 // Field channelFactory:Lio/netty/channel/ChannelFactory;
      34: aload_0
      35: getstatic     #15                 // Field DEFAULT_EVENT_LOOP_GROUP_POOL:Lio/grpc/internal/ObjectPool;
      38: putfield      #16                 // Field eventLoopGroupPool:Lio/grpc/internal/ObjectPool;
      41: aload_0
      42: getstatic     #17                 // Field DEFAULT_AUTO_FLOW_CONTROL:Z
      45: putfield      #18                 // Field autoFlowControl:Z
      48: aload_0
      49: ldc           #19                 // int 1048576
      51: putfield      #20                 // Field flowControlWindow:I
      54: aload_0
      55: sipush        8192
      58: putfield      #21                 // Field maxHeaderListSize:I
      61: aload_0
      62: ldc2_w        #22                 // long 9223372036854775807l
      65: putfield      #24                 // Field keepAliveTimeNanos:J
      68: aload_0
      69: getstatic     #25                 // Field io/grpc/internal/GrpcUtil.DEFAULT_KEEPALIVE_TIMEOUT_NANOS:J
      72: putfield      #26                 // Field keepAliveTimeoutNanos:J
      75: aload_0
      76: iconst_0
      77: putfield      #27                 // Field useGetForSafeMethods:Z
      80: return

  public io.grpc.netty.NettyChannelBuilder channelType(java.lang.Class<? extends io.netty.channel.Channel>);
    Code:
       0: aload_1
       1: ldc           #34                 // String channelType
       3: invokestatic  #35                 // Method com/google/common/base/Preconditions.checkNotNull:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
       6: pop
       7: aload_0
       8: new           #36                 // class io/netty/channel/ReflectiveChannelFactory
      11: dup
      12: aload_1
      13: invokespecial #37                 // Method io/netty/channel/ReflectiveChannelFactory."<init>":(Ljava/lang/Class;)V
      16: invokevirtual #38                 // Method channelFactory:(Lio/netty/channel/ChannelFactory;)Lio/grpc/netty/NettyChannelBuilder;
      19: areturn

  public io.grpc.netty.NettyChannelBuilder channelFactory(io.netty.channel.ChannelFactory<? extends io.netty.channel.Channel>);
    Code:
       0: aload_0
       1: aload_1
       2: ldc           #39                 // String channelFactory
       4: invokestatic  #35                 // Method com/google/common/base/Preconditions.checkNotNull:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
       7: checkcast     #40                 // class io/netty/channel/ChannelFactory
      10: putfield      #14                 // Field channelFactory:Lio/netty/channel/ChannelFactory;
      13: aload_0
      14: areturn

  public <T> io.grpc.netty.NettyChannelBuilder withOption(io.netty.channel.ChannelOption<T>, T);
    Code:
       0: aload_0
       1: getfield      #10                 // Field channelOptions:Ljava/util/Map;
       4: aload_1
       5: aload_2
       6: invokeinterface #41,  3           // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      11: pop
      12: aload_0
      13: areturn

  public io.grpc.netty.NettyChannelBuilder negotiationType(io.grpc.netty.NegotiationType);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #12                 // Field negotiationType:Lio/grpc/netty/NegotiationType;
       5: aload_0
       6: areturn

  public io.grpc.netty.NettyChannelBuilder eventLoopGroup(io.netty.channel.EventLoopGroup);
    Code:
       0: aload_1
       1: ifnull        17
       4: aload_0
       5: new           #42                 // class io/grpc/internal/FixedObjectPool
       8: dup
       9: aload_1
      10: invokespecial #43                 // Method io/grpc/internal/FixedObjectPool."<init>":(Ljava/lang/Object;)V
      13: invokevirtual #44                 // Method eventLoopGroupPool:(Lio/grpc/internal/ObjectPool;)Lio/grpc/netty/NettyChannelBuilder;
      16: areturn
      17: aload_0
      18: getstatic     #15                 // Field DEFAULT_EVENT_LOOP_GROUP_POOL:Lio/grpc/internal/ObjectPool;
      21: invokevirtual #44                 // Method eventLoopGroupPool:(Lio/grpc/internal/ObjectPool;)Lio/grpc/netty/NettyChannelBuilder;
      24: areturn

  io.grpc.netty.NettyChannelBuilder eventLoopGroupPool(io.grpc.internal.ObjectPool<? extends io.netty.channel.EventLoopGroup>);
    Code:
       0: aload_0
       1: aload_1
       2: ldc           #45                 // String eventLoopGroupPool
       4: invokestatic  #35                 // Method com/google/common/base/Preconditions.checkNotNull:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
       7: checkcast     #46                 // class io/grpc/internal/ObjectPool
      10: putfield      #16                 // Field eventLoopGroupPool:Lio/grpc/internal/ObjectPool;
      13: aload_0
      14: areturn

  public io.grpc.netty.NettyChannelBuilder sslContext(io.netty.handler.ssl.SslContext);
    Code:
       0: aload_1
       1: ifnull        20
       4: aload_1
       5: invokevirtual #47                 // Method io/netty/handler/ssl/SslContext.isClient:()Z
       8: ldc           #48                 // String Server SSL context can not be used for client channel
      10: invokestatic  #49                 // Method com/google/common/base/Preconditions.checkArgument:(ZLjava/lang/Object;)V
      13: aload_1
      14: invokevirtual #50                 // Method io/netty/handler/ssl/SslContext.applicationProtocolNegotiator:()Lio/netty/handler/ssl/ApplicationProtocolNegotiator;
      17: invokestatic  #51                 // Method io/grpc/netty/GrpcSslContexts.ensureAlpnAndH2Enabled:(Lio/netty/handler/ssl/ApplicationProtocolNegotiator;)V
      20: aload_0
      21: aload_1
      22: putfield      #52                 // Field sslContext:Lio/netty/handler/ssl/SslContext;
      25: aload_0
      26: areturn

  public io.grpc.netty.NettyChannelBuilder initialFlowControlWindow(int);
    Code:
       0: iload_1
       1: ifle          8
       4: iconst_1
       5: goto          9
       8: iconst_0
       9: ldc           #53                 // String initialFlowControlWindow must be positive
      11: invokestatic  #49                 // Method com/google/common/base/Preconditions.checkArgument:(ZLjava/lang/Object;)V
      14: aload_0
      15: iload_1
      16: putfield      #20                 // Field flowControlWindow:I
      19: aload_0
      20: iconst_1
      21: putfield      #18                 // Field autoFlowControl:Z
      24: aload_0
      25: areturn

  public io.grpc.netty.NettyChannelBuilder flowControlWindow(int);
    Code:
       0: iload_1
       1: ifle          8
       4: iconst_1
       5: goto          9
       8: iconst_0
       9: ldc           #54                 // String flowControlWindow must be positive
      11: invokestatic  #49                 // Method com/google/common/base/Preconditions.checkArgument:(ZLjava/lang/Object;)V
      14: aload_0
      15: iload_1
      16: putfield      #20                 // Field flowControlWindow:I
      19: aload_0
      20: iconst_0
      21: putfield      #18                 // Field autoFlowControl:Z
      24: aload_0
      25: areturn

  public io.grpc.netty.NettyChannelBuilder maxHeaderListSize(int);
    Code:
       0: aload_0
       1: iload_1
       2: invokevirtual #55                 // Method maxInboundMetadataSize:(I)Lio/grpc/netty/NettyChannelBuilder;
       5: areturn

  public io.grpc.netty.NettyChannelBuilder maxInboundMetadataSize(int);
    Code:
       0: iload_1
       1: ifle          8
       4: iconst_1
       5: goto          9
       8: iconst_0
       9: ldc           #56                 // String maxInboundMetadataSize must be > 0
      11: invokestatic  #49                 // Method com/google/common/base/Preconditions.checkArgument:(ZLjava/lang/Object;)V
      14: aload_0
      15: iload_1
      16: putfield      #21                 // Field maxHeaderListSize:I
      19: aload_0
      20: areturn

  public io.grpc.netty.NettyChannelBuilder usePlaintext();
    Code:
       0: aload_0
       1: getstatic     #57                 // Field io/grpc/netty/NegotiationType.PLAINTEXT:Lio/grpc/netty/NegotiationType;
       4: invokevirtual #58                 // Method negotiationType:(Lio/grpc/netty/NegotiationType;)Lio/grpc/netty/NettyChannelBuilder;
       7: pop
       8: aload_0
       9: areturn

  public io.grpc.netty.NettyChannelBuilder useTransportSecurity();
    Code:
       0: aload_0
       1: getstatic     #11                 // Field io/grpc/netty/NegotiationType.TLS:Lio/grpc/netty/NegotiationType;
       4: invokevirtual #58                 // Method negotiationType:(Lio/grpc/netty/NegotiationType;)Lio/grpc/netty/NettyChannelBuilder;
       7: pop
       8: aload_0
       9: areturn

  public io.grpc.netty.NettyChannelBuilder keepAliveTime(long, java.util.concurrent.TimeUnit);
    Code:
       0: lload_1
       1: lconst_0
       2: lcmp
       3: ifle          10
       6: iconst_1
       7: goto          11
      10: iconst_0
      11: ldc           #59                 // String keepalive time must be positive
      13: invokestatic  #49                 // Method com/google/common/base/Preconditions.checkArgument:(ZLjava/lang/Object;)V
      16: aload_0
      17: aload_3
      18: lload_1
      19: invokevirtual #60                 // Method java/util/concurrent/TimeUnit.toNanos:(J)J
      22: putfield      #24                 // Field keepAliveTimeNanos:J
      25: aload_0
      26: aload_0
      27: getfield      #24                 // Field keepAliveTimeNanos:J
      30: invokestatic  #61                 // Method io/grpc/internal/KeepAliveManager.clampKeepAliveTimeInNanos:(J)J
      33: putfield      #24                 // Field keepAliveTimeNanos:J
      36: aload_0
      37: getfield      #24                 // Field keepAliveTimeNanos:J
      40: getstatic     #62                 // Field AS_LARGE_AS_INFINITE:J
      43: lcmp
      44: iflt          54
      47: aload_0
      48: ldc2_w        #22                 // long 9223372036854775807l
      51: putfield      #24                 // Field keepAliveTimeNanos:J
      54: aload_0
      55: areturn

  public io.grpc.netty.NettyChannelBuilder keepAliveTimeout(long, java.util.concurrent.TimeUnit);
    Code:
       0: lload_1
       1: lconst_0
       2: lcmp
       3: ifle          10
       6: iconst_1
       7: goto          11
      10: iconst_0
      11: ldc           #63                 // String keepalive timeout must be positive
      13: invokestatic  #49                 // Method com/google/common/base/Preconditions.checkArgument:(ZLjava/lang/Object;)V
      16: aload_0
      17: aload_3
      18: lload_1
      19: invokevirtual #60                 // Method java/util/concurrent/TimeUnit.toNanos:(J)J
      22: putfield      #26                 // Field keepAliveTimeoutNanos:J
      25: aload_0
      26: aload_0
      27: getfield      #26                 // Field keepAliveTimeoutNanos:J
      30: invokestatic  #64                 // Method io/grpc/internal/KeepAliveManager.clampKeepAliveTimeoutInNanos:(J)J
      33: putfield      #26                 // Field keepAliveTimeoutNanos:J
      36: aload_0
      37: areturn

  public io.grpc.netty.NettyChannelBuilder keepAliveWithoutCalls(boolean);
    Code:
       0: aload_0
       1: iload_1
       2: putfield      #65                 // Field keepAliveWithoutCalls:Z
       5: aload_0
       6: areturn

  public io.grpc.netty.NettyChannelBuilder localSocketPicker(io.grpc.netty.NettyChannelBuilder$LocalSocketPicker);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #66                 // Field localSocketPicker:Lio/grpc/netty/NettyChannelBuilder$LocalSocketPicker;
       5: aload_0
       6: areturn

  protected io.grpc.internal.ClientTransportFactory buildTransportFactory();
    Code:
       0: aload_0
       1: invokevirtual #67                 // Method assertEventLoopAndChannelType:()V
       4: aload_0
       5: getfield      #68                 // Field protocolNegotiatorFactory:Lio/grpc/netty/NettyChannelBuilder$ProtocolNegotiatorFactory;
       8: ifnull        24
      11: aload_0
      12: getfield      #68                 // Field protocolNegotiatorFactory:Lio/grpc/netty/NettyChannelBuilder$ProtocolNegotiatorFactory;
      15: invokeinterface #69,  1           // InterfaceMethod io/grpc/netty/NettyChannelBuilder$ProtocolNegotiatorFactory.buildProtocolNegotiator:()Lio/grpc/netty/ProtocolNegotiator;
      20: astore_1
      21: goto          76
      24: aload_0
      25: getfield      #52                 // Field sslContext:Lio/netty/handler/ssl/SslContext;
      28: astore_2
      29: aload_0
      30: getfield      #12                 // Field negotiationType:Lio/grpc/netty/NegotiationType;
      33: getstatic     #11                 // Field io/grpc/netty/NegotiationType.TLS:Lio/grpc/netty/NegotiationType;
      36: if_acmpne     63
      39: aload_2
      40: ifnonnull     63
      43: invokestatic  #70                 // Method io/grpc/netty/GrpcSslContexts.forClient:()Lio/netty/handler/ssl/SslContextBuilder;
      46: invokevirtual #71                 // Method io/netty/handler/ssl/SslContextBuilder.build:()Lio/netty/handler/ssl/SslContext;
      49: astore_2
      50: goto          63
      53: astore_3
      54: new           #73                 // class java/lang/RuntimeException
      57: dup
      58: aload_3
      59: invokespecial #74                 // Method java/lang/RuntimeException."<init>":(Ljava/lang/Throwable;)V
      62: athrow
      63: aload_0
      64: getfield      #12                 // Field negotiationType:Lio/grpc/netty/NegotiationType;
      67: aload_2
      68: aload_0
      69: invokevirtual #75                 // Method getOffloadExecutorPool:()Lio/grpc/internal/ObjectPool;
      72: invokestatic  #76                 // Method createProtocolNegotiatorByType:(Lio/grpc/netty/NegotiationType;Lio/netty/handler/ssl/SslContext;Lio/grpc/internal/ObjectPool;)Lio/grpc/netty/ProtocolNegotiator;
      75: astore_1
      76: new           #77                 // class io/grpc/netty/NettyChannelBuilder$NettyTransportFactory
      79: dup
      80: aload_1
      81: aload_0
      82: getfield      #14                 // Field channelFactory:Lio/netty/channel/ChannelFactory;
      85: aload_0
      86: getfield      #10                 // Field channelOptions:Ljava/util/Map;
      89: aload_0
      90: getfield      #16                 // Field eventLoopGroupPool:Lio/grpc/internal/ObjectPool;
      93: aload_0
      94: getfield      #18                 // Field autoFlowControl:Z
      97: aload_0
      98: getfield      #20                 // Field flowControlWindow:I
     101: aload_0
     102: invokevirtual #78                 // Method maxInboundMessageSize:()I
     105: aload_0
     106: getfield      #21                 // Field maxHeaderListSize:I
     109: aload_0
     110: getfield      #24                 // Field keepAliveTimeNanos:J
     113: aload_0
     114: getfield      #26                 // Field keepAliveTimeoutNanos:J
     117: aload_0
     118: getfield      #65                 // Field keepAliveWithoutCalls:Z
     121: aload_0
     122: getfield      #79                 // Field transportTracerFactory:Lio/grpc/internal/TransportTracer$Factory;
     125: aload_0
     126: getfield      #66                 // Field localSocketPicker:Lio/grpc/netty/NettyChannelBuilder$LocalSocketPicker;
     129: iconst_0
     130: invokespecial #80                 // Method io/grpc/netty/NettyChannelBuilder$NettyTransportFactory."<init>":(Lio/grpc/netty/ProtocolNegotiator;Lio/netty/channel/ChannelFactory;Ljava/util/Map;Lio/grpc/internal/ObjectPool;ZIIIJJZLio/grpc/internal/TransportTracer$Factory;Lio/grpc/netty/NettyChannelBuilder$LocalSocketPicker;Z)V
     133: areturn
    Exception table:
       from    to  target type
          43    50    53   Class javax/net/ssl/SSLException

  void assertEventLoopAndChannelType();
    Code:
       0: aload_0
       1: getfield      #14                 // Field channelFactory:Lio/netty/channel/ChannelFactory;
       4: getstatic     #13                 // Field DEFAULT_CHANNEL_FACTORY:Lio/netty/channel/ChannelFactory;
       7: if_acmpeq     24
      10: aload_0
      11: getfield      #16                 // Field eventLoopGroupPool:Lio/grpc/internal/ObjectPool;
      14: getstatic     #15                 // Field DEFAULT_EVENT_LOOP_GROUP_POOL:Lio/grpc/internal/ObjectPool;
      17: if_acmpeq     24
      20: iconst_1
      21: goto          25
      24: iconst_0
      25: istore_1
      26: aload_0
      27: getfield      #14                 // Field channelFactory:Lio/netty/channel/ChannelFactory;
      30: getstatic     #13                 // Field DEFAULT_CHANNEL_FACTORY:Lio/netty/channel/ChannelFactory;
      33: if_acmpne     50
      36: aload_0
      37: getfield      #16                 // Field eventLoopGroupPool:Lio/grpc/internal/ObjectPool;
      40: getstatic     #15                 // Field DEFAULT_EVENT_LOOP_GROUP_POOL:Lio/grpc/internal/ObjectPool;
      43: if_acmpne     50
      46: iconst_1
      47: goto          51
      50: iconst_0
      51: istore_2
      52: iload_1
      53: ifne          60
      56: iload_2
      57: ifeq          64
      60: iconst_1
      61: goto          65
      64: iconst_0
      65: ldc           #81                 // String Both EventLoopGroup and ChannelType should be provided or neither should be
      67: invokestatic  #82                 // Method com/google/common/base/Preconditions.checkState:(ZLjava/lang/Object;)V
      70: return

  protected int getDefaultPort();
    Code:
       0: getstatic     #83                 // Field io/grpc/netty/NettyChannelBuilder$1.$SwitchMap$io$grpc$netty$NegotiationType:[I
       3: aload_0
       4: getfield      #12                 // Field negotiationType:Lio/grpc/netty/NegotiationType;
       7: invokevirtual #84                 // Method io/grpc/netty/NegotiationType.ordinal:()I
      10: iaload
      11: tableswitch   { // 1 to 3
                     1: 36
                     2: 36
                     3: 39
               default: 43
          }
      36: bipush        80
      38: ireturn
      39: sipush        443
      42: ireturn
      43: new           #85                 // class java/lang/AssertionError
      46: dup
      47: new           #86                 // class java/lang/StringBuilder
      50: dup
      51: invokespecial #87                 // Method java/lang/StringBuilder."<init>":()V
      54: aload_0
      55: getfield      #12                 // Field negotiationType:Lio/grpc/netty/NegotiationType;
      58: invokevirtual #88                 // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
      61: ldc           #89                 // String  not handled
      63: invokevirtual #90                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      66: invokevirtual #91                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      69: invokespecial #92                 // Method java/lang/AssertionError."<init>":(Ljava/lang/Object;)V
      72: athrow

  void overrideAuthorityChecker(io.grpc.netty.NettyChannelBuilder$OverrideAuthorityChecker);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #93                 // Field authorityChecker:Lio/grpc/netty/NettyChannelBuilder$OverrideAuthorityChecker;
       5: return

  static io.grpc.netty.ProtocolNegotiator createProtocolNegotiatorByType(io.grpc.netty.NegotiationType, io.netty.handler.ssl.SslContext, io.grpc.internal.ObjectPool<? extends java.util.concurrent.Executor>);
    Code:
       0: getstatic     #83                 // Field io/grpc/netty/NettyChannelBuilder$1.$SwitchMap$io$grpc$netty$NegotiationType:[I
       3: aload_0
       4: invokevirtual #84                 // Method io/grpc/netty/NegotiationType.ordinal:()I
       7: iaload
       8: tableswitch   { // 1 to 3
                     1: 36
                     2: 40
                     3: 44
               default: 50
          }
      36: invokestatic  #94                 // Method io/grpc/netty/ProtocolNegotiators.plaintext:()Lio/grpc/netty/ProtocolNegotiator;
      39: areturn
      40: invokestatic  #95                 // Method io/grpc/netty/ProtocolNegotiators.plaintextUpgrade:()Lio/grpc/netty/ProtocolNegotiator;
      43: areturn
      44: aload_1
      45: aload_2
      46: invokestatic  #96                 // Method io/grpc/netty/ProtocolNegotiators.tls:(Lio/netty/handler/ssl/SslContext;Lio/grpc/internal/ObjectPool;)Lio/grpc/netty/ProtocolNegotiator;
      49: areturn
      50: new           #97                 // class java/lang/IllegalArgumentException
      53: dup
      54: new           #86                 // class java/lang/StringBuilder
      57: dup
      58: invokespecial #87                 // Method java/lang/StringBuilder."<init>":()V
      61: ldc           #98                 // String Unsupported negotiationType:
      63: invokevirtual #90                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      66: aload_0
      67: invokevirtual #88                 // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
      70: invokevirtual #91                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      73: invokespecial #99                 // Method java/lang/IllegalArgumentException."<init>":(Ljava/lang/String;)V
      76: athrow

  protected java.lang.String checkAuthority(java.lang.String);
    Code:
       0: aload_0
       1: getfield      #93                 // Field authorityChecker:Lio/grpc/netty/NettyChannelBuilder$OverrideAuthorityChecker;
       4: ifnull        18
       7: aload_0
       8: getfield      #93                 // Field authorityChecker:Lio/grpc/netty/NettyChannelBuilder$OverrideAuthorityChecker;
      11: aload_1
      12: invokeinterface #100,  2          // InterfaceMethod io/grpc/netty/NettyChannelBuilder$OverrideAuthorityChecker.checkAuthority:(Ljava/lang/String;)Ljava/lang/String;
      17: areturn
      18: aload_0
      19: aload_1
      20: invokespecial #101                // Method io/grpc/internal/AbstractManagedChannelImplBuilder.checkAuthority:(Ljava/lang/String;)Ljava/lang/String;
      23: areturn

  void protocolNegotiatorFactory(io.grpc.netty.NettyChannelBuilder$ProtocolNegotiatorFactory);
    Code:
       0: aload_0
       1: aload_1
       2: ldc           #102                // String protocolNegotiatorFactory
       4: invokestatic  #35                 // Method com/google/common/base/Preconditions.checkNotNull:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
       7: checkcast     #103                // class io/grpc/netty/NettyChannelBuilder$ProtocolNegotiatorFactory
      10: putfield      #68                 // Field protocolNegotiatorFactory:Lio/grpc/netty/NettyChannelBuilder$ProtocolNegotiatorFactory;
      13: return

  protected void setTracingEnabled(boolean);
    Code:
       0: aload_0
       1: iload_1
       2: invokespecial #104                // Method io/grpc/internal/AbstractManagedChannelImplBuilder.setTracingEnabled:(Z)V
       5: return

  protected void setStatsEnabled(boolean);
    Code:
       0: aload_0
       1: iload_1
       2: invokespecial #105                // Method io/grpc/internal/AbstractManagedChannelImplBuilder.setStatsEnabled:(Z)V
       5: return

  protected void setStatsRecordStartedRpcs(boolean);
    Code:
       0: aload_0
       1: iload_1
       2: invokespecial #106                // Method io/grpc/internal/AbstractManagedChannelImplBuilder.setStatsRecordStartedRpcs:(Z)V
       5: return

  protected void setStatsRecordRealTimeMetrics(boolean);
    Code:
       0: aload_0
       1: iload_1
       2: invokespecial #107                // Method io/grpc/internal/AbstractManagedChannelImplBuilder.setStatsRecordRealTimeMetrics:(Z)V
       5: return

  io.grpc.netty.NettyChannelBuilder setTransportTracerFactory(io.grpc.internal.TransportTracer$Factory);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #79                 // Field transportTracerFactory:Lio/grpc/internal/TransportTracer$Factory;
       5: aload_0
       6: areturn

  public io.grpc.ManagedChannelBuilder keepAliveWithoutCalls(boolean);
    Code:
       0: aload_0
       1: iload_1
       2: invokevirtual #108                // Method keepAliveWithoutCalls:(Z)Lio/grpc/netty/NettyChannelBuilder;
       5: areturn

  public io.grpc.ManagedChannelBuilder keepAliveTimeout(long, java.util.concurrent.TimeUnit);
    Code:
       0: aload_0
       1: lload_1
       2: aload_3
       3: invokevirtual #109                // Method keepAliveTimeout:(JLjava/util/concurrent/TimeUnit;)Lio/grpc/netty/NettyChannelBuilder;
       6: areturn

  public io.grpc.ManagedChannelBuilder keepAliveTime(long, java.util.concurrent.TimeUnit);
    Code:
       0: aload_0
       1: lload_1
       2: aload_3
       3: invokevirtual #110                // Method keepAliveTime:(JLjava/util/concurrent/TimeUnit;)Lio/grpc/netty/NettyChannelBuilder;
       6: areturn

  public io.grpc.ManagedChannelBuilder maxInboundMetadataSize(int);
    Code:
       0: aload_0
       1: iload_1
       2: invokevirtual #55                 // Method maxInboundMetadataSize:(I)Lio/grpc/netty/NettyChannelBuilder;
       5: areturn

  public io.grpc.ManagedChannelBuilder useTransportSecurity();
    Code:
       0: aload_0
       1: invokevirtual #111                // Method useTransportSecurity:()Lio/grpc/netty/NettyChannelBuilder;
       4: areturn

  public io.grpc.ManagedChannelBuilder usePlaintext();
    Code:
       0: aload_0
       1: invokevirtual #112                // Method usePlaintext:()Lio/grpc/netty/NettyChannelBuilder;
       4: areturn

  static {};
    Code:
       0: getstatic     #113                // Field java/util/concurrent/TimeUnit.DAYS:Ljava/util/concurrent/TimeUnit;
       3: ldc2_w        #114                // long 1000l
       6: invokevirtual #60                 // Method java/util/concurrent/TimeUnit.toNanos:(J)J
       9: putstatic     #62                 // Field AS_LARGE_AS_INFINITE:J
      12: new           #36                 // class io/netty/channel/ReflectiveChannelFactory
      15: dup
      16: getstatic     #116                // Field io/grpc/netty/Utils.DEFAULT_CLIENT_CHANNEL_TYPE:Ljava/lang/Class;
      19: invokespecial #37                 // Method io/netty/channel/ReflectiveChannelFactory."<init>":(Ljava/lang/Class;)V
      22: putstatic     #13                 // Field DEFAULT_CHANNEL_FACTORY:Lio/netty/channel/ChannelFactory;
      25: getstatic     #117                // Field io/grpc/netty/Utils.DEFAULT_WORKER_EVENT_LOOP_GROUP:Lio/grpc/internal/SharedResourceHolder$Resource;
      28: invokestatic  #118                // Method io/grpc/internal/SharedResourcePool.forResource:(Lio/grpc/internal/SharedResourceHolder$Resource;)Lio/grpc/internal/SharedResourcePool;
      31: putstatic     #15                 // Field DEFAULT_EVENT_LOOP_GROUP_POOL:Lio/grpc/internal/ObjectPool;
      34: ldc           #119                // String GRPC_EXPERIMENTAL_AUTOFLOWCONTROL
      36: invokestatic  #120                // Method java/lang/System.getenv:(Ljava/lang/String;)Ljava/lang/String;
      39: astore_0
      40: aload_0
      41: ifnonnull     47
      44: ldc           #121                // String true
      46: astore_0
      47: aload_0
      48: invokestatic  #122                // Method java/lang/Boolean.parseBoolean:(Ljava/lang/String;)Z
      51: putstatic     #17                 // Field DEFAULT_AUTO_FLOW_CONTROL:Z
      54: return
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment