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 0a511f1f11..33c0845e6d 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 @@ -108,6 +108,7 @@ // TODO(miraleung): Refactor ClassComposer's interface. public class ServiceStubSettingsClassComposer { + private static final String BATCHING_DESC_PATTERN = "%s_BATCHING_DESC"; private static final String CLASS_NAME_PATTERN = "%sStubSettings"; private static final String GRPC_SERVICE_STUB_PATTERN = "Grpc%sStub"; private static final String PAGE_STR_DESC_PATTERN = "%s_PAGE_STR_DESC"; @@ -1172,7 +1173,8 @@ private static List createNestedClassMethods( Map types) { List nestedClassMethods = new ArrayList<>(); nestedClassMethods.addAll( - createNestedClassConstructorMethods(service, nestedMethodSettingsMemberVarExprs, types)); + createNestedClassConstructorMethods( + service, serviceConfig, nestedMethodSettingsMemberVarExprs, types)); nestedClassMethods.add(createNestedClassCreateDefaultMethod(types)); nestedClassMethods.add(createNestedClassInitDefaultsMethod(service, serviceConfig, types)); nestedClassMethods.add(createNestedClassApplyToAllUnaryMethodsMethod(superType, types)); @@ -1234,6 +1236,7 @@ private static MethodDefinition createNestedClassInitDefaultsMethod( private static List createNestedClassConstructorMethods( Service service, + GapicServiceConfig serviceConfig, Map nestedMethodSettingsMemberVarExprs, Map types) { TypeNode builderType = types.get(NESTED_BUILDER_CLASS_NAME); @@ -1298,38 +1301,80 @@ private static List createNestedClassConstructorMethods( nestedMethodSettingsMemberVarExprs.entrySet().stream() .map( e -> { + // TODO(miraleung): Extract this into another method. // Name is fooBarSettings. VariableExpr varExpr = e.getValue(); TypeNode varType = varExpr.type(); + String methodName = e.getKey(); + Preconditions.checkState( + methodName.endsWith(SETTINGS_LITERAL), + String.format("%s expected to end with \"Settings\"", methodName)); + methodName = + methodName.substring(0, methodName.length() - SETTINGS_LITERAL.length()); + if (!isPagedCallSettingsBuilderFn.apply(varType)) { - boolean isUnaryCallSettings = isUnaryCallSettingsBuilderFn.apply(varType); + if (!isBatchingCallSettingsBuilderFn.apply(varType)) { + boolean isUnaryCallSettings = isUnaryCallSettingsBuilderFn.apply(varType); + return AssignmentExpr.builder() + .setVariableExpr(varExpr) + .setValueExpr( + MethodInvocationExpr.builder() + .setStaticReferenceType( + builderToCallSettingsFn.apply(varExpr.type())) + .setMethodName( + isUnaryCallSettings + ? "newUnaryCallSettingsBuilder" + : "newBuilder") + .setReturnType(varExpr.type()) + .build()) + .build(); + } + Expr newBatchingSettingsExpr = + MethodInvocationExpr.builder() + .setStaticReferenceType(STATIC_TYPES.get("BatchingSettings")) + .setMethodName("newBuilder") + .build(); + newBatchingSettingsExpr = + MethodInvocationExpr.builder() + .setExprReferenceExpr(newBatchingSettingsExpr) + .setMethodName("build") + .build(); + + String batchingDescVarName = + String.format( + BATCHING_DESC_PATTERN, JavaStyle.toUpperSnakeCase(methodName)); + Expr batchingSettingsBuilderExpr = + MethodInvocationExpr.builder() + .setStaticReferenceType(builderToCallSettingsFn.apply(varType)) + .setMethodName("newBuilder") + .setArguments( + VariableExpr.withVariable( + Variable.builder() + .setType(STATIC_TYPES.get("BatchingDescriptor")) + .setName(batchingDescVarName) + .build())) + .build(); + batchingSettingsBuilderExpr = + MethodInvocationExpr.builder() + .setExprReferenceExpr(batchingSettingsBuilderExpr) + .setMethodName("setBatchingSettings") + .setArguments(newBatchingSettingsExpr) + .setReturnType(varType) + .build(); + return AssignmentExpr.builder() .setVariableExpr(varExpr) - .setValueExpr( - MethodInvocationExpr.builder() - .setStaticReferenceType( - builderToCallSettingsFn.apply(varExpr.type())) - .setMethodName( - isUnaryCallSettings - ? "newUnaryCallSettingsBuilder" - : "newBuilder") - .setReturnType(varExpr.type()) - .build()) + .setValueExpr(batchingSettingsBuilderExpr) .build(); } - String varName = e.getKey(); - Preconditions.checkState( - varName.endsWith(SETTINGS_LITERAL), - String.format("%s expected to end with \"Settings\"", varName)); - varName = varName.substring(0, varName.length() - SETTINGS_LITERAL.length()); - varName = + String memberVarName = String.format( - PAGED_RESPONSE_FACTORY_PATTERN, JavaStyle.toUpperSnakeCase(varName)); + PAGED_RESPONSE_FACTORY_PATTERN, JavaStyle.toUpperSnakeCase(methodName)); VariableExpr argVar = VariableExpr.withVariable( Variable.builder() .setType(STATIC_TYPES.get("PagedListResponseFactory")) - .setName(varName) + .setName(memberVarName) .build()); return AssignmentExpr.builder() .setVariableExpr(varExpr) 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 21dd809cc4..37fb1cfb19 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 @@ -681,6 +681,7 @@ private static List parseServices( + "import com.google.api.core.ApiFunction;\n" + "import com.google.api.core.ApiFuture;\n" + "import com.google.api.core.BetaApi;\n" + + "import com.google.api.gax.batching.BatchingSettings;\n" + "import com.google.api.gax.core.GaxProperties;\n" + "import com.google.api.gax.core.GoogleCredentialsProvider;\n" + "import com.google.api.gax.core.InstantiatingExecutorProvider;\n" @@ -691,6 +692,7 @@ private static List parseServices( + "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.BatchingDescriptor;\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" @@ -1131,7 +1133,9 @@ private static List parseServices( + " protected Builder(ClientContext clientContext) {\n" + " super(clientContext);\n" + " deleteLogSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();\n" - + " writeLogEntriesSettings = BatchingCallSettings.newBuilder();\n" + + " writeLogEntriesSettings =\n" + + " BatchingCallSettings.newBuilder(WRITE_LOG_ENTRIES_BATCHING_DESC)\n" + + " .setBatchingSettings(BatchingSettings.newBuilder().build());\n" + " listLogEntriesSettings =" + " PagedCallSettings.newBuilder(LIST_LOG_ENTRIES_PAGE_STR_FACT);\n" + " listMonitoredResourceDescriptorsSettings =\n" @@ -1270,6 +1274,7 @@ private static List parseServices( + "import com.google.api.core.ApiFunction;\n" + "import com.google.api.core.ApiFuture;\n" + "import com.google.api.core.BetaApi;\n" + + "import com.google.api.gax.batching.BatchingSettings;\n" + "import com.google.api.gax.core.GaxProperties;\n" + "import com.google.api.gax.core.GoogleCredentialsProvider;\n" + "import com.google.api.gax.core.InstantiatingExecutorProvider;\n" @@ -1280,6 +1285,7 @@ private static List parseServices( + "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.BatchingDescriptor;\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" @@ -1783,7 +1789,9 @@ private static List parseServices( + " super(clientContext);\n" + " createTopicSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();\n" + " updateTopicSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();\n" - + " publishSettings = BatchingCallSettings.newBuilder();\n" + + " publishSettings =\n" + + " BatchingCallSettings.newBuilder(PUBLISH_BATCHING_DESC)\n" + + " .setBatchingSettings(BatchingSettings.newBuilder().build());\n" + " getTopicSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();\n" + " listTopicsSettings = PagedCallSettings.newBuilder(LIST_TOPICS_PAGE_STR_FACT);\n" + " listTopicSubscriptionsSettings =\n"