diff --git a/src/main/java/com/google/api/generator/gapic/composer/ServiceStubSettingsClassComposer.java b/src/main/java/com/google/api/generator/gapic/composer/ServiceStubSettingsClassComposer.java index 3aaa35301d..0a511f1f11 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/ServiceStubSettingsClassComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/ServiceStubSettingsClassComposer.java @@ -150,7 +150,8 @@ public GapicClass generate( String pakkage = String.format("%s.stub", service.pakkage()); Map types = createDynamicTypes(service, pakkage); Map methodSettingsMemberVarExprs = - createMethodSettingsClassMemberVarExprs(service, types, /* isNestedClass= */ false); + createMethodSettingsClassMemberVarExprs( + service, serviceConfig, types, /* isNestedClass= */ false); String className = getThisClassName(service.name()); ClassDefinition classDef = @@ -189,14 +190,19 @@ private static TypeNode createExtendsType(Service service, Map } private static Map createMethodSettingsClassMemberVarExprs( - Service service, Map types, boolean isNestedClass) { + Service service, + GapicServiceConfig serviceConfig, + Map types, + boolean isNestedClass) { // Maintain insertion order. Map varExprs = new LinkedHashMap<>(); // Creates class variables Settings, e.g. echoSettings. // TODO(miraleung): Handle batching here. for (Method method : service.methods()) { - TypeNode settingsType = getCallSettingsType(method, types, isNestedClass); + boolean hasBatchingSettings = serviceConfig.hasBatchingSetting(service, method); + TypeNode settingsType = + getCallSettingsType(method, types, hasBatchingSettings, isNestedClass); String varName = JavaStyle.toLowerCamelCase(String.format("%sSettings", method.name())); varExprs.put( varName, @@ -1090,7 +1096,8 @@ private static ClassDefinition createNestedBuilderClass( .build()); Map nestedMethodSettingsMemberVarExprs = - createMethodSettingsClassMemberVarExprs(service, types, /* isNestedClass= */ true); + createMethodSettingsClassMemberVarExprs( + service, serviceConfig, types, /* isNestedClass= */ true); // TODO(miraleung): Fill this out. return ClassDefinition.builder() @@ -1260,6 +1267,8 @@ private static List createNestedClassConstructorMethods( .build()); Reference pagedSettingsBuilderRef = ConcreteReference.withClazz(PagedCallSettings.Builder.class); + Reference batchingSettingsBuilderRef = + ConcreteReference.withClazz(BatchingCallSettings.Builder.class); Reference unaryCallSettingsBuilderRef = ConcreteReference.withClazz(UnaryCallSettings.Builder.class); Function isUnaryCallSettingsBuilderFn = @@ -1269,6 +1278,9 @@ private static List createNestedClassConstructorMethods( .equals(unaryCallSettingsBuilderRef); Function isPagedCallSettingsBuilderFn = t -> t.reference().copyAndSetGenerics(ImmutableList.of()).equals(pagedSettingsBuilderRef); + Function isBatchingCallSettingsBuilderFn = + t -> + t.reference().copyAndSetGenerics(ImmutableList.of()).equals(batchingSettingsBuilderRef); Function builderToCallSettingsFn = t -> TypeNode.withReference( @@ -1349,7 +1361,8 @@ private static List createNestedClassConstructorMethods( .filter( v -> isUnaryCallSettingsBuilderFn.apply(v.type()) - || isPagedCallSettingsBuilderFn.apply(v.type())) + || isPagedCallSettingsBuilderFn.apply(v.type()) + || isBatchingCallSettingsBuilderFn.apply(v.type())) .collect(Collectors.toList())) .setReturnType(NESTED_UNARY_METHOD_SETTINGS_BUILDERS_VAR_EXPR.type()) .build()) @@ -1809,7 +1822,10 @@ private static String getGrpcServiceStubTypeName(String serviceName) { } private static TypeNode getCallSettingsType( - Method method, Map types, final boolean isSettingsBuilder) { + Method method, + Map types, + boolean isBatchingSettings, + final boolean isSettingsBuilder) { Function typeMakerFn = clz -> TypeNode.withReference(ConcreteReference.withClazz(clz)); // Default: No streaming. @@ -1819,6 +1835,11 @@ private static TypeNode getCallSettingsType( isSettingsBuilder ? PagedCallSettings.Builder.class : PagedCallSettings.class) : typeMakerFn.apply( isSettingsBuilder ? UnaryCallSettings.Builder.class : UnaryCallSettings.class); + if (isBatchingSettings) { + callSettingsType = + typeMakerFn.apply( + isSettingsBuilder ? BatchingCallSettings.Builder.class : BatchingCallSettings.class); + } // Streaming takes precendence over paging, as per the monolith's existing behavior. switch (method.stream()) { diff --git a/src/test/java/com/google/api/generator/gapic/composer/ServiceStubSettingsClassComposerTest.java b/src/test/java/com/google/api/generator/gapic/composer/ServiceStubSettingsClassComposerTest.java index e54e0102cd..21dd809cc4 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/ServiceStubSettingsClassComposerTest.java +++ b/src/test/java/com/google/api/generator/gapic/composer/ServiceStubSettingsClassComposerTest.java @@ -690,6 +690,7 @@ private static List parseServices( + "import com.google.api.gax.retrying.RetrySettings;\n" + "import com.google.api.gax.rpc.ApiCallContext;\n" + "import com.google.api.gax.rpc.ApiClientHeaderProvider;\n" + + "import com.google.api.gax.rpc.BatchingCallSettings;\n" + "import com.google.api.gax.rpc.ClientContext;\n" + "import com.google.api.gax.rpc.PageContext;\n" + "import com.google.api.gax.rpc.PagedCallSettings;\n" @@ -734,7 +735,8 @@ private static List parseServices( + " .add(\"https://www.googleapis.com/auth/logging.write\")\n" + " .build();\n" + " private final UnaryCallSettings deleteLogSettings;\n" - + " private final UnaryCallSettings\n" + + " private final BatchingCallSettings\n" + " writeLogEntriesSettings;\n" + " private final PagedCallSettings<\n" + " ListLogEntriesRequest, ListLogEntriesResponse," @@ -959,7 +961,7 @@ private static List parseServices( + " return deleteLogSettings;\n" + " }\n" + "\n" - + " public UnaryCallSettings\n" + + " public BatchingCallSettings\n" + " writeLogEntriesSettings() {\n" + " return writeLogEntriesSettings;\n" + " }\n" @@ -1070,7 +1072,7 @@ private static List parseServices( + " unaryMethodSettingsBuilders;\n" + " private final UnaryCallSettings.Builder" + " deleteLogSettings;\n" - + " private final UnaryCallSettings.Builder\n" + " writeLogEntriesSettings;\n" + " private final PagedCallSettings.Builder<\n" @@ -1129,7 +1131,7 @@ private static List parseServices( + " protected Builder(ClientContext clientContext) {\n" + " super(clientContext);\n" + " deleteLogSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();\n" - + " writeLogEntriesSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();\n" + + " writeLogEntriesSettings = BatchingCallSettings.newBuilder();\n" + " listLogEntriesSettings =" + " PagedCallSettings.newBuilder(LIST_LOG_ENTRIES_PAGE_STR_FACT);\n" + " listMonitoredResourceDescriptorsSettings =\n" @@ -1223,7 +1225,7 @@ private static List parseServices( + " return deleteLogSettings;\n" + " }\n" + "\n" - + " public UnaryCallSettings.Builder\n" + " writeLogEntriesSettings() {\n" + " return writeLogEntriesSettings;\n" @@ -1277,6 +1279,7 @@ private static List parseServices( + "import com.google.api.gax.retrying.RetrySettings;\n" + "import com.google.api.gax.rpc.ApiCallContext;\n" + "import com.google.api.gax.rpc.ApiClientHeaderProvider;\n" + + "import com.google.api.gax.rpc.BatchingCallSettings;\n" + "import com.google.api.gax.rpc.ClientContext;\n" + "import com.google.api.gax.rpc.PageContext;\n" + "import com.google.api.gax.rpc.PagedCallSettings;\n" @@ -1322,7 +1325,8 @@ private static List parseServices( + " .build();\n" + " private final UnaryCallSettings createTopicSettings;\n" + " private final UnaryCallSettings updateTopicSettings;\n" - + " private final UnaryCallSettings publishSettings;\n" + + " private final BatchingCallSettings" + + " publishSettings;\n" + " private final UnaryCallSettings getTopicSettings;\n" + " private final PagedCallSettings\n" @@ -1549,7 +1553,7 @@ private static List parseServices( + " return updateTopicSettings;\n" + " }\n" + "\n" - + " public UnaryCallSettings publishSettings() {\n" + + " public BatchingCallSettings publishSettings() {\n" + " return publishSettings;\n" + " }\n" + "\n" @@ -1677,7 +1681,7 @@ private static List parseServices( + " private final UnaryCallSettings.Builder createTopicSettings;\n" + " private final UnaryCallSettings.Builder" + " updateTopicSettings;\n" - + " private final UnaryCallSettings.Builder" + + " private final BatchingCallSettings.Builder" + " publishSettings;\n" + " private final UnaryCallSettings.Builder" + " getTopicSettings;\n" @@ -1779,7 +1783,7 @@ private static List parseServices( + " super(clientContext);\n" + " createTopicSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();\n" + " updateTopicSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();\n" - + " publishSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();\n" + + " publishSettings = BatchingCallSettings.newBuilder();\n" + " getTopicSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();\n" + " listTopicsSettings = PagedCallSettings.newBuilder(LIST_TOPICS_PAGE_STR_FACT);\n" + " listTopicSubscriptionsSettings =\n" @@ -1916,7 +1920,7 @@ private static List parseServices( + " return updateTopicSettings;\n" + " }\n" + "\n" - + " public UnaryCallSettings.Builder" + + " public BatchingCallSettings.Builder" + " publishSettings() {\n" + " return publishSettings;\n" + " }\n"