diff --git a/src/main/java/com/google/api/generator/spring/composer/SpringAutoConfigClassComposer.java b/src/main/java/com/google/api/generator/spring/composer/SpringAutoConfigClassComposer.java index 3d32292145..6f89728788 100644 --- a/src/main/java/com/google/api/generator/spring/composer/SpringAutoConfigClassComposer.java +++ b/src/main/java/com/google/api/generator/spring/composer/SpringAutoConfigClassComposer.java @@ -107,6 +107,8 @@ public GapicClass generate(GapicContext context, Service service) { Expr thisExpr = ValueExpr.withValue(ThisObjectValue.withType(dynamicTypes.get(className))); Transport transport = context.transport(); boolean hasRestOption = transport.equals(Transport.GRPC_REST); + String serviceSettingsMethodName = + CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, service.name()) + "Settings"; ClassDefinition classDef = ClassDefinition.builder() @@ -125,16 +127,16 @@ public GapicClass generate(GapicContext context, Service service) { service, className, credentialsProviderName, dynamicTypes, thisExpr), createTransportChannelProviderBeanMethod( transportChannelProviderName, dynamicTypes), - createClientBeanMethod( + createSettingsBeanMethod( service, - className, credentialsProviderName, transportChannelProviderName, - clientName, dynamicTypes, gapicServiceConfig, thisExpr, - hasRestOption), + hasRestOption, + serviceSettingsMethodName), + createClientBeanMethod(dynamicTypes, service, serviceSettingsMethodName), createUserAgentHeaderProviderMethod( serviceNameLowerHyphen, className, dynamicTypes, thisExpr))) .build(); @@ -530,16 +532,15 @@ private static Statement setRetrySettingsForMethod( return ExprStatement.withExpr(clientSettingBuilderChain); } - private static MethodDefinition createClientBeanMethod( + private static MethodDefinition createSettingsBeanMethod( Service service, - String className, String credentialsProviderName, String transportChannelProviderName, - String clientName, Map types, GapicServiceConfig gapicServiceConfig, Expr thisExpr, - boolean hasRestOption) { + boolean hasRestOption, + String serviceSettingsMethodName) { // argument variables: VariableExpr credentialsProviderVariableExpr = VariableExpr.withVariable( @@ -849,21 +850,12 @@ private static MethodDefinition createClientBeanMethod( bodyStatements.addAll(retrySettings); // return expressions - MethodInvocationExpr serviceSettingsBuilt = + MethodInvocationExpr returnExpr = MethodInvocationExpr.builder() .setMethodName("build") .setExprReferenceExpr(settingsVarExpr.toBuilder().setIsDecl(false).build()) .setReturnType(types.get("ServiceSettings")) .build(); - MethodInvocationExpr returnExpr = - MethodInvocationExpr.builder() - // read more in client composer: - // src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceClientClassComposer.java#L277-L292 - .setMethodName("create") - .setStaticReferenceType(types.get("ServiceClient")) - .setReturnType(types.get("ServiceClient")) - .setArguments(serviceSettingsBuilt) - .build(); List argumentsVariableExprs = Arrays.asList( credentialsProviderVariableExpr @@ -887,15 +879,46 @@ private static MethodDefinition createClientBeanMethod( .build())) .build()); - String methodName = - CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, service.name()) + "Client"; - return MethodDefinition.builder() .setHeaderCommentStatements( SpringAutoconfigCommentComposer.createClientBeanComment( service.name(), Utils.getServicePropertiesClassName(service), transportChannelProviderName)) + .setName(serviceSettingsMethodName) + .setScope(ScopeNode.PUBLIC) + .setReturnType(types.get("ServiceSettings")) + .setArguments(argumentsVariableExprs) + .setAnnotations( + Arrays.asList( + AnnotationNode.withType(STATIC_TYPES.get("Bean")), + AnnotationNode.withType(STATIC_TYPES.get("ConditionalOnMissingBean")))) + .setThrowsExceptions(Arrays.asList(TypeNode.withExceptionClazz(IOException.class))) + .setReturnExpr(returnExpr) + .setBody(bodyStatements) + .build(); + } + + private static MethodDefinition createClientBeanMethod( + Map types, Service service, String serviceSettingsMethodName) { + VariableExpr clientSettingsVariableExpr = + VariableExpr.withVariable( + Variable.builder() + .setName(serviceSettingsMethodName) + .setType(types.get("ServiceSettings")) + .build()); + MethodInvocationExpr returnExpr = + MethodInvocationExpr.builder() + .setMethodName("create") + .setStaticReferenceType(types.get("ServiceClient")) + .setReturnType(types.get("ServiceClient")) + .setArguments(clientSettingsVariableExpr) + .build(); + List argumentsVariableExprs = + Arrays.asList(clientSettingsVariableExpr.toBuilder().setIsDecl(true).build()); + String methodName = + CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, service.name()) + "Client"; + return MethodDefinition.builder() .setName(methodName) .setScope(ScopeNode.PUBLIC) .setReturnType(types.get("ServiceClient")) @@ -906,7 +929,6 @@ private static MethodDefinition createClientBeanMethod( AnnotationNode.withType(STATIC_TYPES.get("ConditionalOnMissingBean")))) .setThrowsExceptions(Arrays.asList(TypeNode.withExceptionClazz(IOException.class))) .setReturnExpr(returnExpr) - .setBody(bodyStatements) .build(); } diff --git a/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationFull.golden b/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationFull.golden index ff75f66afb..5f0dc4e559 100644 --- a/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationFull.golden +++ b/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationFull.golden @@ -115,7 +115,7 @@ public class EchoSpringAutoConfiguration { */ @Bean @ConditionalOnMissingBean - public EchoClient echoClient( + public EchoSettings echoSettings( @Qualifier("echoCredentials") CredentialsProvider credentialsProvider, @Qualifier("defaultEchoTransportChannelProvider") TransportChannelProvider defaultTransportChannelProvider) @@ -576,7 +576,13 @@ public class EchoSpringAutoConfiguration { clientSettingsBuilder .collideNameSettings() .setRetrySettings(collideNameRetrySettingBuilder.build()); - return EchoClient.create(clientSettingsBuilder.build()); + return clientSettingsBuilder.build(); + } + + @Bean + @ConditionalOnMissingBean + public EchoClient echoClient(EchoSettings echoSettings) throws IOException { + return EchoClient.create(echoSettings); } private HeaderProvider userAgentHeaderProvider() { diff --git a/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationGrpc.golden b/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationGrpc.golden index 1c34352e5a..5b0a54395b 100644 --- a/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationGrpc.golden +++ b/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationGrpc.golden @@ -95,7 +95,7 @@ public class EchoSpringAutoConfiguration { */ @Bean @ConditionalOnMissingBean - public EchoClient echoClient( + public EchoSettings echoSettings( @Qualifier("echoCredentials") CredentialsProvider credentialsProvider, @Qualifier("defaultEchoTransportChannelProvider") TransportChannelProvider defaultTransportChannelProvider) @@ -556,7 +556,13 @@ public class EchoSpringAutoConfiguration { clientSettingsBuilder .collideNameSettings() .setRetrySettings(collideNameRetrySettingBuilder.build()); - return EchoClient.create(clientSettingsBuilder.build()); + return clientSettingsBuilder.build(); + } + + @Bean + @ConditionalOnMissingBean + public EchoClient echoClient(EchoSettings echoSettings) throws IOException { + return EchoClient.create(echoSettings); } private HeaderProvider userAgentHeaderProvider() { diff --git a/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationGrpcRest.golden b/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationGrpcRest.golden index 00fccb6b39..e432d7220e 100644 --- a/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationGrpcRest.golden +++ b/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationGrpcRest.golden @@ -96,7 +96,7 @@ public class EchoSpringAutoConfiguration { */ @Bean @ConditionalOnMissingBean - public EchoClient echoClient( + public EchoSettings echoSettings( @Qualifier("echoCredentials") CredentialsProvider credentialsProvider, @Qualifier("defaultEchoTransportChannelProvider") TransportChannelProvider defaultTransportChannelProvider) @@ -564,7 +564,13 @@ public class EchoSpringAutoConfiguration { clientSettingsBuilder .collideNameSettings() .setRetrySettings(collideNameRetrySettingBuilder.build()); - return EchoClient.create(clientSettingsBuilder.build()); + return clientSettingsBuilder.build(); + } + + @Bean + @ConditionalOnMissingBean + public EchoClient echoClient(EchoSettings echoSettings) throws IOException { + return EchoClient.create(echoSettings); } private HeaderProvider userAgentHeaderProvider() {