diff --git a/src/main/java/com/google/api/generator/gapic/composer/BUILD.bazel b/src/main/java/com/google/api/generator/gapic/composer/BUILD.bazel index f90d35bd99..a4500c029d 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/BUILD.bazel +++ b/src/main/java/com/google/api/generator/gapic/composer/BUILD.bazel @@ -15,8 +15,10 @@ java_library( deps = [ "//:service_config_java_proto", "//src/main/java/com/google/api/generator/engine/ast", + "//src/main/java/com/google/api/generator/engine/writer", "//src/main/java/com/google/api/generator/gapic:status_java_proto", "//src/main/java/com/google/api/generator/gapic/model", + "//src/main/java/com/google/api/generator/gapic/composer/samplecode", "//src/main/java/com/google/api/generator/gapic/utils", "@com_google_api_api_common//jar", "@com_google_api_gax_java//gax", diff --git a/src/main/java/com/google/api/generator/gapic/composer/ServiceClientClassComposer.java b/src/main/java/com/google/api/generator/gapic/composer/ServiceClientClassComposer.java index 02ff960025..8ed7331724 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/ServiceClientClassComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/ServiceClientClassComposer.java @@ -119,7 +119,7 @@ public GapicClass generate(Service service, Map messageTypes) { ClassDefinition classDef = ClassDefinition.builder() .setHeaderCommentStatements( - ServiceClientCommentComposer.createClassHeaderComments(service)) + ServiceClientCommentComposer.createClassHeaderComments(service, types)) .setPackageString(pakkage) .setAnnotations(createClassAnnotations(types)) .setScope(ScopeNode.PUBLIC) diff --git a/src/main/java/com/google/api/generator/gapic/composer/ServiceClientCommentComposer.java b/src/main/java/com/google/api/generator/gapic/composer/ServiceClientCommentComposer.java index 1a0f8f2b0f..ba21de8824 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/ServiceClientCommentComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/ServiceClientCommentComposer.java @@ -17,6 +17,7 @@ import com.google.api.generator.engine.ast.CommentStatement; import com.google.api.generator.engine.ast.JavaDocComment; import com.google.api.generator.engine.ast.TypeNode; +import com.google.api.generator.gapic.composer.samplecode.ServiceClientCommentSampleCodeComposer; import com.google.api.generator.gapic.model.Method; import com.google.api.generator.gapic.model.MethodArgument; import com.google.api.generator.gapic.model.Service; @@ -25,6 +26,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -103,7 +105,8 @@ class ServiceClientCommentComposer { "Returns the OperationsClient that can be used to query the status of a long-running" + " operation returned by another API method call."); - static List createClassHeaderComments(Service service) { + static List createClassHeaderComments( + Service service, Map types) { JavaDocComment.Builder classHeaderJavadocBuilder = JavaDocComment.builder(); if (service.hasDescription()) { classHeaderJavadocBuilder = @@ -134,9 +137,13 @@ static List createClassHeaderComments(Service service) { SERVICE_DESCRIPTION_CUSTOMIZE_SUMMARY_PATTERN, String.format("%sSettings", JavaStyle.toUpperCamelCase(service.name())))); classHeaderJavadocBuilder.addParagraph(SERVICE_DESCRIPTION_CREDENTIALS_SUMMARY_STRING); - // TODO(summerji): Add credentials' customization sample code here. + classHeaderJavadocBuilder.addSampleCode( + ServiceClientCommentSampleCodeComposer.composeClassHeaderCredentialsSampleCode( + service, types)); classHeaderJavadocBuilder.addParagraph(SERVICE_DESCRIPTION_ENDPOINT_SUMMARY_STRING); - // TODO(summerji): Add endpoint customization sample code here. + classHeaderJavadocBuilder.addSampleCode( + ServiceClientCommentSampleCodeComposer.composeClassHeaderEndpointSampleCode(service, types) + ); return Arrays.asList( CommentComposer.AUTO_GENERATED_CLASS_COMMENT, diff --git a/src/main/java/com/google/api/generator/gapic/composer/ServiceSettingsClassComposer.java b/src/main/java/com/google/api/generator/gapic/composer/ServiceSettingsClassComposer.java index 45f625f32f..2c458df5f7 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/ServiceSettingsClassComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/ServiceSettingsClassComposer.java @@ -54,6 +54,7 @@ import com.google.api.generator.gapic.model.GapicClass.Kind; import com.google.api.generator.gapic.model.Message; import com.google.api.generator.gapic.model.Method; +import com.google.api.generator.gapic.model.Method.Stream; import com.google.api.generator.gapic.model.Service; import com.google.api.generator.gapic.utils.JavaStyle; import com.google.common.base.Preconditions; @@ -101,7 +102,7 @@ public GapicClass generate(Service service, Map ignore) { ClassDefinition classDef = ClassDefinition.builder() .setPackageString(pakkage) - .setHeaderCommentStatements(createClassHeaderComments(service)) + .setHeaderCommentStatements(createClassHeaderComments(service, types.get(className))) .setAnnotations(createClassAnnotations()) .setScope(ScopeNode.PUBLIC) .setName(className) @@ -119,11 +120,21 @@ public GapicClass generate(Service service, Map ignore) { return GapicClass.create(kind, classDef); } - private static List createClassHeaderComments(Service service) { + private static List createClassHeaderComments( + Service service, TypeNode classType) { + // Pick the first pure unary rpc method, if no such method exist, then pick the first in the + // list. Optional methodOpt = - service.methods().isEmpty() ? Optional.empty() : Optional.of(service.methods().get(0)); + service.methods().isEmpty() + ? Optional.empty() + : Optional.of( + service.methods().stream() + .reduce( + (m1, m2) -> + (m1.stream() == Stream.NONE && !m1.hasLro() && !m1.isPaged()) ? m1 : m2) + .get()); return SettingsCommentComposer.createClassHeaderComments( - getClientClassName(service.name()), service.defaultHost(), methodOpt); + getClientClassName(service.name()), service.defaultHost(), methodOpt, classType); } private static List createClassAnnotations() { 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 c31bec5317..fe65400f8b 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 @@ -78,6 +78,7 @@ import com.google.api.generator.gapic.model.GapicServiceConfig; import com.google.api.generator.gapic.model.Message; import com.google.api.generator.gapic.model.Method; +import com.google.api.generator.gapic.model.Method.Stream; import com.google.api.generator.gapic.model.Service; import com.google.api.generator.gapic.utils.JavaStyle; import com.google.common.base.Preconditions; @@ -163,7 +164,7 @@ public GapicClass generate( ClassDefinition classDef = ClassDefinition.builder() .setPackageString(pakkage) - .setHeaderCommentStatements(createClassHeaderComments(service)) + .setHeaderCommentStatements(createClassHeaderComments(service, types.get(className))) .setAnnotations(createClassAnnotations()) .setScope(ScopeNode.PUBLIC) .setName(className) @@ -187,11 +188,21 @@ private static List createClassAnnotations() { .build()); } - private static List createClassHeaderComments(Service service) { + private static List createClassHeaderComments( + Service service, TypeNode classType) { + // Pick the first pure unary rpc method, if no such method exist, then pick the first in the + // list. Optional methodOpt = - service.methods().isEmpty() ? Optional.empty() : Optional.of(service.methods().get(0)); + service.methods().isEmpty() + ? Optional.empty() + : Optional.of( + service.methods().stream() + .reduce( + (m1, m2) -> + (m1.stream() == Stream.NONE && !m1.hasLro() && !m1.isPaged()) ? m1 : m2) + .get()); return SettingsCommentComposer.createClassHeaderComments( - String.format(STUB_PATTERN, service.name()), service.defaultHost(), methodOpt); + String.format(STUB_PATTERN, service.name()), service.defaultHost(), methodOpt, classType); } private static TypeNode createExtendsType(Service service, Map types) { diff --git a/src/main/java/com/google/api/generator/gapic/composer/SettingsCommentComposer.java b/src/main/java/com/google/api/generator/gapic/composer/SettingsCommentComposer.java index e47822c870..6c637e129f 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/SettingsCommentComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/SettingsCommentComposer.java @@ -17,6 +17,8 @@ import com.google.api.generator.engine.ast.CommentStatement; import com.google.api.generator.engine.ast.JavaDocComment; import com.google.api.generator.engine.ast.LineComment; +import com.google.api.generator.engine.ast.TypeNode; +import com.google.api.generator.gapic.composer.samplecode.SettingsCommentSampleCodeComposer; import com.google.api.generator.gapic.model.Method; import com.google.api.generator.gapic.utils.JavaStyle; import com.google.common.base.Preconditions; @@ -28,6 +30,8 @@ class SettingsCommentComposer { private static final String COLON = ":"; + private static final String CLIENT_CLASS_NAME_PATTERN = "%sClient"; + private static final String STUB_PATTERN = "%sStub"; private static final String BUILDER_CLASS_DOC_PATTERN = "Builder for %s."; private static final String CALL_SETTINGS_METHOD_DOC_PATTERN = "Returns the object with the settings used for calls to %s."; @@ -102,7 +106,10 @@ static CommentStatement createCallSettingsBuilderGetterComment(String javaMethod } static List createClassHeaderComments( - String configuredClassName, String defaultHost, Optional methodOpt) { + String configuredClassName, + String defaultHost, + Optional methodOpt, + TypeNode classType) { // Split default address and port. int colonIndex = defaultHost.indexOf(COLON); Preconditions.checkState( @@ -127,12 +134,16 @@ static List createClassHeaderComments( .addParagraph(CLASS_HEADER_BUILDER_DESCRIPTION); if (methodOpt.isPresent()) { + String sampleCode = + SettingsCommentSampleCodeComposer.composeSettingClassHeaderSampleCode( + methodOpt.get(), classType); javaDocCommentBuilder = - javaDocCommentBuilder.addParagraph( - String.format( - CLASS_HEADER_SAMPLE_CODE_PATTERN, - JavaStyle.toLowerCamelCase(methodOpt.get().name()))); - // TODO(summerji): Add sample code here. + javaDocCommentBuilder + .addParagraph( + String.format( + CLASS_HEADER_SAMPLE_CODE_PATTERN, + JavaStyle.toLowerCamelCase(methodOpt.get().name()))) + .addSampleCode(sampleCode); } return Arrays.asList( diff --git a/src/main/java/com/google/api/generator/gapic/composer/samplecode/BUILD.bazel b/src/main/java/com/google/api/generator/gapic/composer/samplecode/BUILD.bazel index bd0cb6f812..9dcaf7ab63 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/samplecode/BUILD.bazel +++ b/src/main/java/com/google/api/generator/gapic/composer/samplecode/BUILD.bazel @@ -13,6 +13,11 @@ java_library( ":samplecode_files", ], deps = [ + "//src/main/java/com/google/api/generator/engine/ast", + "//src/main/java/com/google/api/generator/engine/writer", + "//src/main/java/com/google/api/generator/gapic/model", + "//src/main/java/com/google/api/generator/gapic/utils", "@google_java_format_all_deps//jar", + "@com_google_api_gax_java//gax", ], ) diff --git a/src/main/java/com/google/api/generator/gapic/composer/samplecode/ServiceClientCommentSampleCodeComposer.java b/src/main/java/com/google/api/generator/gapic/composer/samplecode/ServiceClientCommentSampleCodeComposer.java new file mode 100644 index 0000000000..2b63814c0f --- /dev/null +++ b/src/main/java/com/google/api/generator/gapic/composer/samplecode/ServiceClientCommentSampleCodeComposer.java @@ -0,0 +1,161 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.api.generator.gapic.composer.samplecode; + +import com.google.api.gax.core.FixedCredentialsProvider; +import com.google.api.generator.engine.ast.AssignmentExpr; +import com.google.api.generator.engine.ast.ConcreteReference; +import com.google.api.generator.engine.ast.Expr; +import com.google.api.generator.engine.ast.ExprStatement; +import com.google.api.generator.engine.ast.MethodInvocationExpr; +import com.google.api.generator.engine.ast.Statement; +import com.google.api.generator.engine.ast.StringObjectValue; +import com.google.api.generator.engine.ast.TypeNode; +import com.google.api.generator.engine.ast.ValueExpr; +import com.google.api.generator.engine.ast.Variable; +import com.google.api.generator.engine.ast.VariableExpr; +import com.google.api.generator.engine.writer.JavaWriterVisitor; +import com.google.api.generator.gapic.model.Service; +import com.google.api.generator.gapic.utils.JavaStyle; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import java.util.Map; + +public class ServiceClientCommentSampleCodeComposer { + + private static final String SETTINGS_NAME_PATTERN = "%sSettings"; + private static final String CLASS_NAME_PATTERN = "%sClient"; + + public static String composeClassHeaderCredentialsSampleCode(Service service, Map types) { + String settingsVarName = JavaStyle.toLowerCamelCase(getSettingsName(service.name())); + TypeNode settingsVarType = types.get(getSettingsName(service.name())); + VariableExpr settingsVarExpr = VariableExpr.withVariable( + Variable.builder() + .setName(settingsVarName) + .setType(settingsVarType) + .build()); + MethodInvocationExpr newBuilderMethodExpr = + MethodInvocationExpr.builder() + .setStaticReferenceType(settingsVarType) + .setMethodName("newBuilder") + .build(); + TypeNode fixedCredentialProvideType = TypeNode.withReference( + ConcreteReference.withClazz(FixedCredentialsProvider.class) + ); + MethodInvocationExpr credentialArgExpr = + MethodInvocationExpr.builder() + .setStaticReferenceType(fixedCredentialProvideType) + .setArguments(ValueExpr.withValue(StringObjectValue.withValue("myCredentials"))) + .setMethodName("create") + .build(); + MethodInvocationExpr credentialsMethodExpr = + MethodInvocationExpr.builder() + .setExprReferenceExpr(newBuilderMethodExpr) + .setArguments(credentialArgExpr) + .setMethodName("setCredentialsProvider") + .build(); + MethodInvocationExpr buildMethodExpr = + MethodInvocationExpr.builder() + .setExprReferenceExpr(credentialsMethodExpr) + .setReturnType(settingsVarType) + .setMethodName("build") + .build(); + + Expr initSettingsVarExpr = + AssignmentExpr.builder() + .setVariableExpr(settingsVarExpr.toBuilder().setIsDecl(true).build()) + .setValueExpr(buildMethodExpr) + .build(); + + String className = JavaStyle.toLowerCamelCase(getClientClassName(service.name())); + TypeNode classType = types.get(getClientClassName(service.name())); + VariableExpr clientVarExpr = VariableExpr.withVariable(Variable.builder().setName(className).setType(classType).build()); + MethodInvocationExpr createMethodExpr = MethodInvocationExpr.builder().setStaticReferenceType(classType).setArguments(settingsVarExpr).setMethodName("create").setReturnType(classType).build(); + Expr initClientVarExpr = AssignmentExpr.builder() + .setVariableExpr(clientVarExpr.toBuilder().setIsDecl(true).build()) + .setValueExpr(createMethodExpr) + .build(); + + return writeSampleCode(Arrays.asList(initSettingsVarExpr, initClientVarExpr)); + } + + public static String composeClassHeaderEndpointSampleCode(Service service, Map types) { + String settingsVarName = JavaStyle.toLowerCamelCase(getSettingsName(service.name())); + TypeNode settingsVarType = types.get(getSettingsName(service.name())); + VariableExpr settingsVarExpr = VariableExpr.withVariable( + Variable.builder() + .setName(settingsVarName) + .setType(settingsVarType) + .build()); + MethodInvocationExpr newBuilderMethodExpr = + MethodInvocationExpr.builder() + .setStaticReferenceType(settingsVarType) + .setMethodName("newBuilder") + .build(); + MethodInvocationExpr credentialsMethodExpr = + MethodInvocationExpr.builder() + .setExprReferenceExpr(newBuilderMethodExpr) + .setArguments(ValueExpr.withValue(StringObjectValue.withValue("myEndpoint"))) + .setMethodName("setEndpoint") + .build(); + MethodInvocationExpr buildMethodExpr = + MethodInvocationExpr.builder() + .setExprReferenceExpr(credentialsMethodExpr) + .setReturnType(settingsVarType) + .setMethodName("build") + .build(); + + Expr initSettingsVarExpr = + AssignmentExpr.builder() + .setVariableExpr(settingsVarExpr.toBuilder().setIsDecl(true).build()) + .setValueExpr(buildMethodExpr) + .build(); + + String className = JavaStyle.toLowerCamelCase(getClientClassName(service.name())); + TypeNode classType = types.get(getClientClassName(service.name())); + VariableExpr clientVarExpr = VariableExpr.withVariable(Variable.builder().setName(className).setType(classType).build()); + MethodInvocationExpr createMethodExpr = MethodInvocationExpr.builder().setStaticReferenceType(classType).setArguments(settingsVarExpr).setMethodName("create").setReturnType(classType).build(); + Expr initClientVarExpr = AssignmentExpr.builder() + .setVariableExpr(clientVarExpr.toBuilder().setIsDecl(true).build()) + .setValueExpr(createMethodExpr) + .build(); + + return writeSampleCode(Arrays.asList( + initSettingsVarExpr, initClientVarExpr + )); + } + + private static String getClientClassName(String serviceName) { + return String.format(CLASS_NAME_PATTERN, serviceName); + } + + private static String getSettingsName(String serviceName) { + return String.format(SETTINGS_NAME_PATTERN, serviceName); + } + + private static String writeSampleCode(List exprs) { + List statements = + exprs + .stream() + .map(e -> ExprStatement.withExpr(e)) + .collect(Collectors.toList()); + JavaWriterVisitor visitor = new JavaWriterVisitor(); + for (Statement statement : statements) { + statement.accept(visitor); + } + return SampleCodeJavaFormatter.format(visitor.write()); + } +} diff --git a/src/main/java/com/google/api/generator/gapic/composer/samplecode/SettingsCommentSampleCodeComposer.java b/src/main/java/com/google/api/generator/gapic/composer/samplecode/SettingsCommentSampleCodeComposer.java new file mode 100644 index 0000000000..f8fdc4b787 --- /dev/null +++ b/src/main/java/com/google/api/generator/gapic/composer/samplecode/SettingsCommentSampleCodeComposer.java @@ -0,0 +1,161 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.api.generator.gapic.composer.samplecode; + +import com.google.api.generator.engine.ast.AssignmentExpr; +import com.google.api.generator.engine.ast.ConcreteReference; +import com.google.api.generator.engine.ast.Expr; +import com.google.api.generator.engine.ast.ExprStatement; +import com.google.api.generator.engine.ast.MethodInvocationExpr; +import com.google.api.generator.engine.ast.PrimitiveValue; +import com.google.api.generator.engine.ast.Statement; +import com.google.api.generator.engine.ast.TypeNode; +import com.google.api.generator.engine.ast.ValueExpr; +import com.google.api.generator.engine.ast.VaporReference; +import com.google.api.generator.engine.ast.Variable; +import com.google.api.generator.engine.ast.VariableExpr; +import com.google.api.generator.engine.writer.JavaWriterVisitor; +import com.google.api.generator.gapic.model.Method; +import com.google.api.generator.gapic.utils.JavaStyle; +import java.time.Duration; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class SettingsCommentSampleCodeComposer { + + private static final String BUILDER_NAME_PATTERN = "%sBuilder"; + private static final String STUB = "Stub"; + private static final String EMPTY_STRING = ""; + + public static String composeSettingClassHeaderSampleCode(Method method, TypeNode classType) { + String className = classType.reference().name(); + TypeNode builderType = + TypeNode.withReference( + VaporReference.builder() + .setEnclosingClassNames(classType.reference().name()) + .setName("Builder") + .setPakkage(classType.reference().pakkage()) + .build()); + Variable builderVar = + Variable.builder() + .setName(getClassSettingsBuilderName(className)) + .setType(builderType) + .build(); + + VariableExpr localSettingsVarExpr = VariableExpr.withVariable(builderVar); + + Expr settingsBuilderExpr = + MethodInvocationExpr.builder() + .setStaticReferenceType(classType) + .setMethodName("newBuilder") + .setReturnType(builderType) + .build(); + + Expr initLocalSettingsExpr = + AssignmentExpr.builder() + .setVariableExpr(localSettingsVarExpr.toBuilder().setIsDecl(true).build()) + .setValueExpr(settingsBuilderExpr) + .build(); + + MethodInvocationExpr retrySettingsMethodExpr = + MethodInvocationExpr.builder() + .setExprReferenceExpr(localSettingsVarExpr) + .setMethodName(JavaStyle.toLowerCamelCase(String.format("%sSettings", method.name()))) + .setReturnType(method.outputType()) + .build(); + + MethodInvocationExpr timeoutArExpr = + MethodInvocationExpr.builder() + .setStaticReferenceType( + TypeNode.withReference(ConcreteReference.withClazz(Duration.class))) + .setMethodName("ofSeconds") + .setArguments( + ValueExpr.withValue( + PrimitiveValue.builder().setType(TypeNode.INT).setValue("30").build())) + .build(); + + MethodInvocationExpr timeoutBuilderMethodExpr = + MethodInvocationExpr.builder() + .setExprReferenceExpr( + MethodInvocationExpr.builder() + .setExprReferenceExpr( + MethodInvocationExpr.builder() + .setExprReferenceExpr(retrySettingsMethodExpr) + .setMethodName("getRetrySettings") + .build()) + .setMethodName("toBuilder") + .build()) + .setMethodName("setTotalTimeout") + .setArguments(Arrays.asList(timeoutArExpr)) + .build(); + + MethodInvocationExpr retrySettingsArgExpr = + MethodInvocationExpr.builder() + .setExprReferenceExpr(timeoutBuilderMethodExpr) + .setMethodName("build") + .build(); + + MethodInvocationExpr settingBuilderMethodExpr = + MethodInvocationExpr.builder() + .setExprReferenceExpr(retrySettingsMethodExpr) + .setMethodName("setRetrySettings") + .setArguments(Arrays.asList(retrySettingsArgExpr)) + .build(); + + VariableExpr settingsVarExpr = + VariableExpr.withVariable( + Variable.builder() + .setType(classType) + .setName(getServiceSettingsName(className)) + .build()); + + AssignmentExpr settingBuildAssignmentExpr = + AssignmentExpr.builder() + .setVariableExpr(settingsVarExpr.toBuilder().setIsDecl(true).build()) + .setValueExpr( + MethodInvocationExpr.builder() + .setExprReferenceExpr(localSettingsVarExpr) + .setMethodName("build") + .setReturnType(classType) + .build()) + .build(); + + List statements = + Arrays.asList(initLocalSettingsExpr, settingBuilderMethodExpr, settingBuildAssignmentExpr) + .stream() + .map(e -> ExprStatement.withExpr(e)) + .collect(Collectors.toList()); + return SampleCodeJavaFormatter.format(writeStatements(statements)); + } + + private static String getServiceSettingsName(String className) { + return JavaStyle.toLowerCamelCase(className).replace(STUB, EMPTY_STRING); + } + + private static String getClassSettingsBuilderName(String className) { + return JavaStyle.toLowerCamelCase( + String.format(BUILDER_NAME_PATTERN, JavaStyle.toLowerCamelCase(className))) + .replace(STUB, EMPTY_STRING); + } + + private static String writeStatements(List statements) { + JavaWriterVisitor visitor = new JavaWriterVisitor(); + for (Statement statement : statements) { + statement.accept(visitor); + } + return visitor.write(); + } +} diff --git a/src/test/java/com/google/api/generator/gapic/composer/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/composer/BUILD.bazel index 939cc4819d..f17da442d9 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/composer/BUILD.bazel @@ -31,6 +31,7 @@ TEST_DEPS = [ "//src/main/java/com/google/api/generator/gapic/composer", "//src/test/java/com/google/api/generator/test/framework:asserts", "//src/test/java/com/google/api/generator/test/framework:utils", + "//src/main/java/com/google/api/generator/gapic/composer/samplecode", "//src/main/java/com/google/api/generator/gapic/model", "//src/main/java/com/google/api/generator/gapic/protoparser", "//src/test/java/com/google/api/generator/gapic/testdata:showcase_java_proto", diff --git a/src/test/java/com/google/api/generator/gapic/composer/goldens/EchoClient.golden b/src/test/java/com/google/api/generator/gapic/composer/goldens/EchoClient.golden index 20a193853e..c2b7448351 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/goldens/EchoClient.golden +++ b/src/test/java/com/google/api/generator/gapic/composer/goldens/EchoClient.golden @@ -63,7 +63,20 @@ import javax.annotation.Generated; * *

To customize credentials: * + *


+ * EchoSettings echoSettings =
+ *     EchoSettings.newBuilder()
+ *         .setCredentialsProvider(FixedCredentialsProvider.create("myCredentials"))
+ *         .build();
+ * EchoClient echoClient = EchoClient.create(echoSettings);
+ * 
+ * *

To customize the endpoint: + * + *


+ * EchoSettings echoSettings = EchoSettings.newBuilder().setEndpoint("myEndpoint").build();
+ * EchoClient echoClient = EchoClient.create(echoSettings);
+ * 
*/ @BetaApi @Generated("by gapic-generator") diff --git a/src/test/java/com/google/api/generator/gapic/composer/goldens/EchoSettings.golden b/src/test/java/com/google/api/generator/gapic/composer/goldens/EchoSettings.golden index 076e0d772b..1ce00dbf4b 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/goldens/EchoSettings.golden +++ b/src/test/java/com/google/api/generator/gapic/composer/goldens/EchoSettings.golden @@ -39,6 +39,20 @@ import javax.annotation.Generated; * build() is called, the tree of builders is called to create the complete settings object. * *

For example, to set the total timeout of echo to 30 seconds: + * + *


+ * EchoSettings.Builder echoSettingsBuilder = EchoSettings.newBuilder();
+ * echoSettingsBuilder
+ *     .echoSettings()
+ *     .setRetrySettings(
+ *         echoSettingsBuilder
+ *             .echoSettings()
+ *             .getRetrySettings()
+ *             .toBuilder()
+ *             .setTotalTimeout(Duration.ofSeconds(30))
+ *             .build());
+ * EchoSettings echoSettings = echoSettingsBuilder.build();
+ * 
*/ @Generated("by gapic-generator-java") public class EchoSettings extends ClientSettings { diff --git a/src/test/java/com/google/api/generator/gapic/composer/goldens/EchoStubSettings.golden b/src/test/java/com/google/api/generator/gapic/composer/goldens/EchoStubSettings.golden index 9bb853eee2..3dc9f78b3d 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/goldens/EchoStubSettings.golden +++ b/src/test/java/com/google/api/generator/gapic/composer/goldens/EchoStubSettings.golden @@ -67,6 +67,20 @@ import org.threeten.bp.Duration; * build() is called, the tree of builders is called to create the complete settings object. * *

For example, to set the total timeout of echo to 30 seconds: + * + *


+ * EchoStubSettings.Builder echoSettingsBuilder = EchoStubSettings.newBuilder();
+ * echoSettingsBuilder
+ *     .echoSettings()
+ *     .setRetrySettings(
+ *         echoSettingsBuilder
+ *             .echoSettings()
+ *             .getRetrySettings()
+ *             .toBuilder()
+ *             .setTotalTimeout(Duration.ofSeconds(30))
+ *             .build());
+ * EchoStubSettings echoSettings = echoSettingsBuilder.build();
+ * 
*/ @BetaApi @Generated("by gapic-generator-java") diff --git a/src/test/java/com/google/api/generator/gapic/composer/goldens/IdentityClient.golden b/src/test/java/com/google/api/generator/gapic/composer/goldens/IdentityClient.golden index 0f48757f2b..f6f5d38a05 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/goldens/IdentityClient.golden +++ b/src/test/java/com/google/api/generator/gapic/composer/goldens/IdentityClient.golden @@ -53,7 +53,21 @@ import javax.annotation.Generated; * *

To customize credentials: * + *


+ * IdentitySettings identitySettings =
+ *     IdentitySettings.newBuilder()
+ *         .setCredentialsProvider(FixedCredentialsProvider.create("myCredentials"))
+ *         .build();
+ * IdentityClient identityClient = IdentityClient.create(identitySettings);
+ * 
+ * *

To customize the endpoint: + * + *


+ * IdentitySettings identitySettings =
+ *     IdentitySettings.newBuilder().setEndpoint("myEndpoint").build();
+ * IdentityClient identityClient = IdentityClient.create(identitySettings);
+ * 
*/ @BetaApi @Generated("by gapic-generator") diff --git a/src/test/java/com/google/api/generator/gapic/composer/goldens/LoggingServiceV2StubSettings.golden b/src/test/java/com/google/api/generator/gapic/composer/goldens/LoggingServiceV2StubSettings.golden index fe7cd63332..029da331be 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/goldens/LoggingServiceV2StubSettings.golden +++ b/src/test/java/com/google/api/generator/gapic/composer/goldens/LoggingServiceV2StubSettings.golden @@ -64,6 +64,21 @@ import org.threeten.bp.Duration; * build() is called, the tree of builders is called to create the complete settings object. * *

For example, to set the total timeout of deleteLog to 30 seconds: + * + *


+ * LoggingServiceV2StubSettings.Builder loggingServiceV2SettingsBuilder =
+ *     LoggingServiceV2StubSettings.newBuilder();
+ * loggingServiceV2SettingsBuilder
+ *     .deleteLogSettings()
+ *     .setRetrySettings(
+ *         loggingServiceV2SettingsBuilder
+ *             .deleteLogSettings()
+ *             .getRetrySettings()
+ *             .toBuilder()
+ *             .setTotalTimeout(Duration.ofSeconds(30))
+ *             .build());
+ * LoggingServiceV2StubSettings loggingServiceV2Settings = loggingServiceV2SettingsBuilder.build();
+ * 
*/ @BetaApi @Generated("by gapic-generator-java") diff --git a/src/test/java/com/google/api/generator/gapic/composer/goldens/PublisherStubSettings.golden b/src/test/java/com/google/api/generator/gapic/composer/goldens/PublisherStubSettings.golden index fe73523fcd..7be4a3739a 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/goldens/PublisherStubSettings.golden +++ b/src/test/java/com/google/api/generator/gapic/composer/goldens/PublisherStubSettings.golden @@ -67,6 +67,20 @@ import org.threeten.bp.Duration; * build() is called, the tree of builders is called to create the complete settings object. * *

For example, to set the total timeout of createTopic to 30 seconds: + * + *


+ * PublisherStubSettings.Builder publisherSettingsBuilder = PublisherStubSettings.newBuilder();
+ * publisherSettingsBuilder
+ *     .createTopicSettings()
+ *     .setRetrySettings(
+ *         publisherSettingsBuilder
+ *             .createTopicSettings()
+ *             .getRetrySettings()
+ *             .toBuilder()
+ *             .setTotalTimeout(Duration.ofSeconds(30))
+ *             .build());
+ * PublisherStubSettings publisherSettings = publisherSettingsBuilder.build();
+ * 
*/ @BetaApi @Generated("by gapic-generator-java") diff --git a/test/integration/goldens/asset/AssetServiceClient.java b/test/integration/goldens/asset/AssetServiceClient.java index 103843b065..8bcfb59fa8 100644 --- a/test/integration/goldens/asset/AssetServiceClient.java +++ b/test/integration/goldens/asset/AssetServiceClient.java @@ -75,7 +75,21 @@ * *

To customize credentials: * + *


+ * AssetServiceSettings assetServiceSettings =
+ *     AssetServiceSettings.newBuilder()
+ *         .setCredentialsProvider(FixedCredentialsProvider.create("myCredentials"))
+ *         .build();
+ * AssetServiceClient assetServiceClient = AssetServiceClient.create(assetServiceSettings);
+ * 
+ * *

To customize the endpoint: + * + *


+ * AssetServiceSettings assetServiceSettings =
+ *     AssetServiceSettings.newBuilder().setEndpoint("myEndpoint").build();
+ * AssetServiceClient assetServiceClient = AssetServiceClient.create(assetServiceSettings);
+ * 
*/ @BetaApi @Generated("by gapic-generator") diff --git a/test/integration/goldens/asset/AssetServiceSettings.java b/test/integration/goldens/asset/AssetServiceSettings.java index 304d71696c..3ab6082f1f 100644 --- a/test/integration/goldens/asset/AssetServiceSettings.java +++ b/test/integration/goldens/asset/AssetServiceSettings.java @@ -54,7 +54,21 @@ *

The builder of this class is recursive, so contained classes are themselves builders. When * build() is called, the tree of builders is called to create the complete settings object. * - *

For example, to set the total timeout of exportAssets to 30 seconds: + *

For example, to set the total timeout of batchGetAssetsHistory to 30 seconds: + * + *


+ * AssetServiceSettings.Builder assetServiceSettingsBuilder = AssetServiceSettings.newBuilder();
+ * assetServiceSettingsBuilder
+ *     .batchGetAssetsHistorySettings()
+ *     .setRetrySettings(
+ *         assetServiceSettingsBuilder
+ *             .batchGetAssetsHistorySettings()
+ *             .getRetrySettings()
+ *             .toBuilder()
+ *             .setTotalTimeout(Duration.ofSeconds(30))
+ *             .build());
+ * AssetServiceSettings assetServiceSettings = assetServiceSettingsBuilder.build();
+ * 
*/ @Generated("by gapic-generator-java") public class AssetServiceSettings extends ClientSettings { diff --git a/test/integration/goldens/asset/AssetServiceStubSettings.java b/test/integration/goldens/asset/AssetServiceStubSettings.java index c535fa3857..757a028b25 100644 --- a/test/integration/goldens/asset/AssetServiceStubSettings.java +++ b/test/integration/goldens/asset/AssetServiceStubSettings.java @@ -89,7 +89,22 @@ *

The builder of this class is recursive, so contained classes are themselves builders. When * build() is called, the tree of builders is called to create the complete settings object. * - *

For example, to set the total timeout of exportAssets to 30 seconds: + *

For example, to set the total timeout of batchGetAssetsHistory to 30 seconds: + * + *


+ * AssetServiceStubSettings.Builder assetServiceSettingsBuilder =
+ *     AssetServiceStubSettings.newBuilder();
+ * assetServiceSettingsBuilder
+ *     .batchGetAssetsHistorySettings()
+ *     .setRetrySettings(
+ *         assetServiceSettingsBuilder
+ *             .batchGetAssetsHistorySettings()
+ *             .getRetrySettings()
+ *             .toBuilder()
+ *             .setTotalTimeout(Duration.ofSeconds(30))
+ *             .build());
+ * AssetServiceStubSettings assetServiceSettings = assetServiceSettingsBuilder.build();
+ * 
*/ @BetaApi @Generated("by gapic-generator-java") diff --git a/test/integration/goldens/logging/ConfigServiceV2Client.java b/test/integration/goldens/logging/ConfigServiceV2Client.java index b6516172fc..5684e2b645 100644 --- a/test/integration/goldens/logging/ConfigServiceV2Client.java +++ b/test/integration/goldens/logging/ConfigServiceV2Client.java @@ -73,7 +73,23 @@ * *

To customize credentials: * + *


+ * ConfigServiceV2Settings configServiceV2Settings =
+ *     ConfigServiceV2Settings.newBuilder()
+ *         .setCredentialsProvider(FixedCredentialsProvider.create("myCredentials"))
+ *         .build();
+ * ConfigServiceV2Client configServiceV2Client =
+ *     ConfigServiceV2Client.create(configServiceV2Settings);
+ * 
+ * *

To customize the endpoint: + * + *


+ * ConfigServiceV2Settings configServiceV2Settings =
+ *     ConfigServiceV2Settings.newBuilder().setEndpoint("myEndpoint").build();
+ * ConfigServiceV2Client configServiceV2Client =
+ *     ConfigServiceV2Client.create(configServiceV2Settings);
+ * 
*/ @BetaApi @Generated("by gapic-generator") diff --git a/test/integration/goldens/logging/ConfigServiceV2Settings.java b/test/integration/goldens/logging/ConfigServiceV2Settings.java index 1ae26f5c78..5d28b9c480 100644 --- a/test/integration/goldens/logging/ConfigServiceV2Settings.java +++ b/test/integration/goldens/logging/ConfigServiceV2Settings.java @@ -53,7 +53,22 @@ *

The builder of this class is recursive, so contained classes are themselves builders. When * build() is called, the tree of builders is called to create the complete settings object. * - *

For example, to set the total timeout of listBuckets to 30 seconds: + *

For example, to set the total timeout of getBucket to 30 seconds: + * + *


+ * ConfigServiceV2Settings.Builder configServiceV2SettingsBuilder =
+ *     ConfigServiceV2Settings.newBuilder();
+ * configServiceV2SettingsBuilder
+ *     .getBucketSettings()
+ *     .setRetrySettings(
+ *         configServiceV2SettingsBuilder
+ *             .getBucketSettings()
+ *             .getRetrySettings()
+ *             .toBuilder()
+ *             .setTotalTimeout(Duration.ofSeconds(30))
+ *             .build());
+ * ConfigServiceV2Settings configServiceV2Settings = configServiceV2SettingsBuilder.build();
+ * 
*/ @Generated("by gapic-generator-java") public class ConfigServiceV2Settings extends ClientSettings { diff --git a/test/integration/goldens/logging/ConfigServiceV2StubSettings.java b/test/integration/goldens/logging/ConfigServiceV2StubSettings.java index c51140e8fc..e1403479fd 100644 --- a/test/integration/goldens/logging/ConfigServiceV2StubSettings.java +++ b/test/integration/goldens/logging/ConfigServiceV2StubSettings.java @@ -90,7 +90,22 @@ *

The builder of this class is recursive, so contained classes are themselves builders. When * build() is called, the tree of builders is called to create the complete settings object. * - *

For example, to set the total timeout of listBuckets to 30 seconds: + *

For example, to set the total timeout of getBucket to 30 seconds: + * + *


+ * ConfigServiceV2StubSettings.Builder configServiceV2SettingsBuilder =
+ *     ConfigServiceV2StubSettings.newBuilder();
+ * configServiceV2SettingsBuilder
+ *     .getBucketSettings()
+ *     .setRetrySettings(
+ *         configServiceV2SettingsBuilder
+ *             .getBucketSettings()
+ *             .getRetrySettings()
+ *             .toBuilder()
+ *             .setTotalTimeout(Duration.ofSeconds(30))
+ *             .build());
+ * ConfigServiceV2StubSettings configServiceV2Settings = configServiceV2SettingsBuilder.build();
+ * 
*/ @BetaApi @Generated("by gapic-generator-java") diff --git a/test/integration/goldens/logging/LoggingServiceV2Client.java b/test/integration/goldens/logging/LoggingServiceV2Client.java index d90cbfadf6..a9b033e8d0 100644 --- a/test/integration/goldens/logging/LoggingServiceV2Client.java +++ b/test/integration/goldens/logging/LoggingServiceV2Client.java @@ -75,7 +75,23 @@ * *

To customize credentials: * + *


+ * LoggingServiceV2Settings loggingServiceV2Settings =
+ *     LoggingServiceV2Settings.newBuilder()
+ *         .setCredentialsProvider(FixedCredentialsProvider.create("myCredentials"))
+ *         .build();
+ * LoggingServiceV2Client loggingServiceV2Client =
+ *     LoggingServiceV2Client.create(loggingServiceV2Settings);
+ * 
+ * *

To customize the endpoint: + * + *


+ * LoggingServiceV2Settings loggingServiceV2Settings =
+ *     LoggingServiceV2Settings.newBuilder().setEndpoint("myEndpoint").build();
+ * LoggingServiceV2Client loggingServiceV2Client =
+ *     LoggingServiceV2Client.create(loggingServiceV2Settings);
+ * 
*/ @BetaApi @Generated("by gapic-generator") diff --git a/test/integration/goldens/logging/LoggingServiceV2Settings.java b/test/integration/goldens/logging/LoggingServiceV2Settings.java index 83dc356803..74ceaf797e 100644 --- a/test/integration/goldens/logging/LoggingServiceV2Settings.java +++ b/test/integration/goldens/logging/LoggingServiceV2Settings.java @@ -54,6 +54,21 @@ * build() is called, the tree of builders is called to create the complete settings object. * *

For example, to set the total timeout of deleteLog to 30 seconds: + * + *


+ * LoggingServiceV2Settings.Builder loggingServiceV2SettingsBuilder =
+ *     LoggingServiceV2Settings.newBuilder();
+ * loggingServiceV2SettingsBuilder
+ *     .deleteLogSettings()
+ *     .setRetrySettings(
+ *         loggingServiceV2SettingsBuilder
+ *             .deleteLogSettings()
+ *             .getRetrySettings()
+ *             .toBuilder()
+ *             .setTotalTimeout(Duration.ofSeconds(30))
+ *             .build());
+ * LoggingServiceV2Settings loggingServiceV2Settings = loggingServiceV2SettingsBuilder.build();
+ * 
*/ @Generated("by gapic-generator-java") public class LoggingServiceV2Settings extends ClientSettings { diff --git a/test/integration/goldens/logging/LoggingServiceV2StubSettings.java b/test/integration/goldens/logging/LoggingServiceV2StubSettings.java index 7e6456b3d4..870cd0cf9b 100644 --- a/test/integration/goldens/logging/LoggingServiceV2StubSettings.java +++ b/test/integration/goldens/logging/LoggingServiceV2StubSettings.java @@ -80,6 +80,21 @@ * build() is called, the tree of builders is called to create the complete settings object. * *

For example, to set the total timeout of deleteLog to 30 seconds: + * + *


+ * LoggingServiceV2StubSettings.Builder loggingServiceV2SettingsBuilder =
+ *     LoggingServiceV2StubSettings.newBuilder();
+ * loggingServiceV2SettingsBuilder
+ *     .deleteLogSettings()
+ *     .setRetrySettings(
+ *         loggingServiceV2SettingsBuilder
+ *             .deleteLogSettings()
+ *             .getRetrySettings()
+ *             .toBuilder()
+ *             .setTotalTimeout(Duration.ofSeconds(30))
+ *             .build());
+ * LoggingServiceV2StubSettings loggingServiceV2Settings = loggingServiceV2SettingsBuilder.build();
+ * 
*/ @BetaApi @Generated("by gapic-generator-java") diff --git a/test/integration/goldens/logging/MetricsServiceV2Client.java b/test/integration/goldens/logging/MetricsServiceV2Client.java index 19f6aef98d..8dda7cd6ee 100644 --- a/test/integration/goldens/logging/MetricsServiceV2Client.java +++ b/test/integration/goldens/logging/MetricsServiceV2Client.java @@ -72,7 +72,23 @@ * *

To customize credentials: * + *


+ * MetricsServiceV2Settings metricsServiceV2Settings =
+ *     MetricsServiceV2Settings.newBuilder()
+ *         .setCredentialsProvider(FixedCredentialsProvider.create("myCredentials"))
+ *         .build();
+ * MetricsServiceV2Client metricsServiceV2Client =
+ *     MetricsServiceV2Client.create(metricsServiceV2Settings);
+ * 
+ * *

To customize the endpoint: + * + *


+ * MetricsServiceV2Settings metricsServiceV2Settings =
+ *     MetricsServiceV2Settings.newBuilder().setEndpoint("myEndpoint").build();
+ * MetricsServiceV2Client metricsServiceV2Client =
+ *     MetricsServiceV2Client.create(metricsServiceV2Settings);
+ * 
*/ @BetaApi @Generated("by gapic-generator") diff --git a/test/integration/goldens/logging/MetricsServiceV2Settings.java b/test/integration/goldens/logging/MetricsServiceV2Settings.java index e9c0451fcb..db130809c7 100644 --- a/test/integration/goldens/logging/MetricsServiceV2Settings.java +++ b/test/integration/goldens/logging/MetricsServiceV2Settings.java @@ -51,7 +51,22 @@ *

The builder of this class is recursive, so contained classes are themselves builders. When * build() is called, the tree of builders is called to create the complete settings object. * - *

For example, to set the total timeout of listLogMetrics to 30 seconds: + *

For example, to set the total timeout of getLogMetric to 30 seconds: + * + *


+ * MetricsServiceV2Settings.Builder metricsServiceV2SettingsBuilder =
+ *     MetricsServiceV2Settings.newBuilder();
+ * metricsServiceV2SettingsBuilder
+ *     .getLogMetricSettings()
+ *     .setRetrySettings(
+ *         metricsServiceV2SettingsBuilder
+ *             .getLogMetricSettings()
+ *             .getRetrySettings()
+ *             .toBuilder()
+ *             .setTotalTimeout(Duration.ofSeconds(30))
+ *             .build());
+ * MetricsServiceV2Settings metricsServiceV2Settings = metricsServiceV2SettingsBuilder.build();
+ * 
*/ @Generated("by gapic-generator-java") public class MetricsServiceV2Settings extends ClientSettings { diff --git a/test/integration/goldens/logging/MetricsServiceV2StubSettings.java b/test/integration/goldens/logging/MetricsServiceV2StubSettings.java index 2d0a8aedbc..a6909c88f4 100644 --- a/test/integration/goldens/logging/MetricsServiceV2StubSettings.java +++ b/test/integration/goldens/logging/MetricsServiceV2StubSettings.java @@ -73,7 +73,22 @@ *

The builder of this class is recursive, so contained classes are themselves builders. When * build() is called, the tree of builders is called to create the complete settings object. * - *

For example, to set the total timeout of listLogMetrics to 30 seconds: + *

For example, to set the total timeout of getLogMetric to 30 seconds: + * + *


+ * MetricsServiceV2StubSettings.Builder metricsServiceV2SettingsBuilder =
+ *     MetricsServiceV2StubSettings.newBuilder();
+ * metricsServiceV2SettingsBuilder
+ *     .getLogMetricSettings()
+ *     .setRetrySettings(
+ *         metricsServiceV2SettingsBuilder
+ *             .getLogMetricSettings()
+ *             .getRetrySettings()
+ *             .toBuilder()
+ *             .setTotalTimeout(Duration.ofSeconds(30))
+ *             .build());
+ * MetricsServiceV2StubSettings metricsServiceV2Settings = metricsServiceV2SettingsBuilder.build();
+ * 
*/ @BetaApi @Generated("by gapic-generator-java") diff --git a/test/integration/goldens/redis/CloudRedisClient.java b/test/integration/goldens/redis/CloudRedisClient.java index c807b6dd8a..26b277058c 100644 --- a/test/integration/goldens/redis/CloudRedisClient.java +++ b/test/integration/goldens/redis/CloudRedisClient.java @@ -95,7 +95,21 @@ * *

To customize credentials: * + *


+ * CloudRedisSettings cloudRedisSettings =
+ *     CloudRedisSettings.newBuilder()
+ *         .setCredentialsProvider(FixedCredentialsProvider.create("myCredentials"))
+ *         .build();
+ * CloudRedisClient cloudRedisClient = CloudRedisClient.create(cloudRedisSettings);
+ * 
+ * *

To customize the endpoint: + * + *


+ * CloudRedisSettings cloudRedisSettings =
+ *     CloudRedisSettings.newBuilder().setEndpoint("myEndpoint").build();
+ * CloudRedisClient cloudRedisClient = CloudRedisClient.create(cloudRedisSettings);
+ * 
*/ @BetaApi @Generated("by gapic-generator") diff --git a/test/integration/goldens/redis/CloudRedisSettings.java b/test/integration/goldens/redis/CloudRedisSettings.java index 4a33403427..6cd3bb5974 100644 --- a/test/integration/goldens/redis/CloudRedisSettings.java +++ b/test/integration/goldens/redis/CloudRedisSettings.java @@ -53,7 +53,21 @@ *

The builder of this class is recursive, so contained classes are themselves builders. When * build() is called, the tree of builders is called to create the complete settings object. * - *

For example, to set the total timeout of listInstances to 30 seconds: + *

For example, to set the total timeout of getInstance to 30 seconds: + * + *


+ * CloudRedisSettings.Builder cloudRedisSettingsBuilder = CloudRedisSettings.newBuilder();
+ * cloudRedisSettingsBuilder
+ *     .getInstanceSettings()
+ *     .setRetrySettings(
+ *         cloudRedisSettingsBuilder
+ *             .getInstanceSettings()
+ *             .getRetrySettings()
+ *             .toBuilder()
+ *             .setTotalTimeout(Duration.ofSeconds(30))
+ *             .build());
+ * CloudRedisSettings cloudRedisSettings = cloudRedisSettingsBuilder.build();
+ * 
*/ @Generated("by gapic-generator-java") public class CloudRedisSettings extends ClientSettings { diff --git a/test/integration/goldens/redis/CloudRedisStubSettings.java b/test/integration/goldens/redis/CloudRedisStubSettings.java index 0ab9d31bae..ed8c262e4c 100644 --- a/test/integration/goldens/redis/CloudRedisStubSettings.java +++ b/test/integration/goldens/redis/CloudRedisStubSettings.java @@ -83,7 +83,21 @@ *

The builder of this class is recursive, so contained classes are themselves builders. When * build() is called, the tree of builders is called to create the complete settings object. * - *

For example, to set the total timeout of listInstances to 30 seconds: + *

For example, to set the total timeout of getInstance to 30 seconds: + * + *


+ * CloudRedisStubSettings.Builder cloudRedisSettingsBuilder = CloudRedisStubSettings.newBuilder();
+ * cloudRedisSettingsBuilder
+ *     .getInstanceSettings()
+ *     .setRetrySettings(
+ *         cloudRedisSettingsBuilder
+ *             .getInstanceSettings()
+ *             .getRetrySettings()
+ *             .toBuilder()
+ *             .setTotalTimeout(Duration.ofSeconds(30))
+ *             .build());
+ * CloudRedisStubSettings cloudRedisSettings = cloudRedisSettingsBuilder.build();
+ * 
*/ @BetaApi @Generated("by gapic-generator-java")