Source:
public BigtableDataGrpcClient( Channel channel, ScheduledExecutorService retryExecutorService, BigtableOptions bigtableOptions) { this.clientDefaultAppProfileId = bigtableOptions.getAppProfileId(); this.retryExecutorService = retryExecutorService; this.retryOptions = bigtableOptions.getRetryOptions(); ServerServiceDefinition definition = new BigtableGrpc.BigtableImplBase() {}.bindService(); BigtableAsyncUtilities asyncUtilities = new BigtableAsyncUtilities.Default(channel); this.sampleRowKeysAsync = asyncUtilities.createAsyncRpc( this.<SampleRowKeysRequest, SampleRowKeysResponse> getMethod(definition, "SampleRowKeys"), Predicates.<SampleRowKeysRequest> alwaysTrue()); this.readRowsAsync = asyncUtilities.createAsyncRpc( this.<ReadRowsRequest, ReadRowsResponse> getMethod(definition, "ReadRows"), Predicates.<ReadRowsRequest> alwaysTrue()); this.mutateRowRpc = asyncUtilities.createAsyncRpc( this.<MutateRowRequest, MutateRowResponse> getMethod(definition, "MutateRow"), getMutationRetryableFunction(IS_RETRYABLE_MUTATION)); this.mutateRowsRpc = asyncUtilities.createAsyncRpc( this.<MutateRowsRequest, MutateRowsResponse> getMethod(definition, "MutateRows"), getMutationRetryableFunction(ARE_RETRYABLE_MUTATIONS)); this.checkAndMutateRpc = asyncUtilities.createAsyncRpc( this.<CheckAndMutateRowRequest, CheckAndMutateRowResponse> getMethod(definition, "CheckAndMutateRow"), getMutationRetryableFunction(Predicates.<CheckAndMutateRowRequest> alwaysFalse())); this.readWriteModifyRpc = asyncUtilities.createAsyncRpc( this.<ReadModifyWriteRowRequest, ReadModifyWriteRowResponse> getMethod(definition, "ReadModifyWriteRow"), Predicates.<ReadModifyWriteRowRequest> alwaysFalse()); }

Target:
public BigtableDataGrpcClient( Channel channel, ScheduledExecutorService retryExecutorService, BigtableOptions bigtableOptions) { try { BigtableGrpc.getReadRowsMethod(); } catch(NoSuchMethodError e) { throw new RuntimeException("Please make sure that you are using " + "grpc-google-cloud-bigtable-v2 > 0.11.0 and bigtable-protos is not on your classpath"); } this.clientDefaultAppProfileId = bigtableOptions.getAppProfileId(); this.retryExecutorService = retryExecutorService; this.retryOptions = bigtableOptions.getRetryOptions(); BigtableAsyncUtilities asyncUtilities = new BigtableAsyncUtilities.Default(channel); this.sampleRowKeysAsync = asyncUtilities.createAsyncRpc( BigtableGrpc.getSampleRowKeysMethod(), Predicates.<SampleRowKeysRequest> alwaysTrue()); this.readRowsAsync = asyncUtilities.createAsyncRpc( BigtableGrpc.getReadRowsMethod(), Predicates.<ReadRowsRequest> alwaysTrue()); this.mutateRowRpc = asyncUtilities.createAsyncRpc( BigtableGrpc.getMutateRowMethod(), getMutationRetryableFunction(IS_RETRYABLE_MUTATION)); this.mutateRowsRpc = asyncUtilities.createAsyncRpc( BigtableGrpc.getMutateRowsMethod(), getMutationRetryableFunction(ARE_RETRYABLE_MUTATIONS)); this.checkAndMutateRpc = asyncUtilities.createAsyncRpc( BigtableGrpc.getCheckAndMutateRowMethod(), getMutationRetryableFunction(Predicates.<CheckAndMutateRowRequest> alwaysFalse())); this.readWriteModifyRpc = asyncUtilities.createAsyncRpc( BigtableGrpc.getReadModifyWriteRowMethod(), Predicates.<ReadModifyWriteRowRequest> alwaysFalse()); }