Skip to content
This repository was archived by the owner on May 14, 2026. It is now read-only.

Commit 7a22323

Browse files
Merge Sample Code into Master (#645)
Merge Sample Code feature with sub commits in `samplecode-master`.
1 parent aa3befc commit 7a22323

32 files changed

Lines changed: 7910 additions & 136 deletions

src/main/java/com/google/api/generator/gapic/composer/ClientLibraryPackageInfoComposer.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import com.google.api.generator.engine.ast.JavaDocComment;
2121
import com.google.api.generator.engine.ast.PackageInfoDefinition;
2222
import com.google.api.generator.engine.ast.TypeNode;
23+
import com.google.api.generator.engine.ast.VaporReference;
24+
import com.google.api.generator.gapic.composer.samplecode.ServiceClientSampleCodeComposer;
2325
import com.google.api.generator.gapic.composer.utils.ClassNames;
2426
import com.google.api.generator.gapic.model.GapicContext;
2527
import com.google.api.generator.gapic.model.GapicPackageInfo;
@@ -111,7 +113,16 @@ private static CommentStatement createPackageInfoJavadoc(GapicContext context) {
111113
javaDocCommentBuilder =
112114
javaDocCommentBuilder.addParagraph(
113115
String.format(SAMPLE_CODE_HEADER_PATTERN, javaClientName));
114-
// TODO(summerji): Add package-info.java sample code here.
116+
TypeNode clientType =
117+
TypeNode.withReference(
118+
VaporReference.builder()
119+
.setPakkage(service.pakkage())
120+
.setName(ClassNames.getServiceClientClassName(service))
121+
.build());
122+
String packageInfoSampleCode =
123+
ServiceClientSampleCodeComposer.composeClassHeaderMethodSampleCode(
124+
service, clientType, context.resourceNames(), context.messages());
125+
javaDocCommentBuilder.addSampleCode(packageInfoSampleCode);
115126
}
116127

117128
return CommentStatement.withComment(javaDocCommentBuilder.build());

src/main/java/com/google/api/generator/gapic/composer/Composer.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ public static List<GapicClass> generateServiceClasses(
6262
@Nonnull Map<String, ResourceName> resourceNames,
6363
@Nonnull Map<String, Message> messageTypes) {
6464
List<GapicClass> clazzes = new ArrayList<>();
65-
clazzes.addAll(generateStubClasses(service, serviceConfig, messageTypes));
66-
clazzes.addAll(generateClientSettingsClasses(service, messageTypes));
65+
clazzes.addAll(generateStubClasses(service, serviceConfig, messageTypes, resourceNames));
66+
clazzes.addAll(generateClientSettingsClasses(service, messageTypes, resourceNames));
6767
clazzes.addAll(generateMocksAndTestClasses(service, resourceNames, messageTypes));
6868
// TODO(miraleung): Generate test classes.
6969
return clazzes;
@@ -78,7 +78,10 @@ public static List<GapicClass> generateResourceNameHelperClasses(
7878
}
7979

8080
public static List<GapicClass> generateStubClasses(
81-
Service service, GapicServiceConfig serviceConfig, Map<String, Message> messageTypes) {
81+
Service service,
82+
GapicServiceConfig serviceConfig,
83+
Map<String, Message> messageTypes,
84+
Map<String, ResourceName> resourceNames) {
8285
List<GapicClass> clazzes = new ArrayList<>();
8386
clazzes.add(ServiceStubClassComposer.instance().generate(service, messageTypes));
8487
clazzes.add(
@@ -89,9 +92,10 @@ public static List<GapicClass> generateStubClasses(
8992
}
9093

9194
public static List<GapicClass> generateClientSettingsClasses(
92-
Service service, Map<String, Message> messageTypes) {
95+
Service service, Map<String, Message> messageTypes, Map<String, ResourceName> resourceNames) {
9396
List<GapicClass> clazzes = new ArrayList<>();
94-
clazzes.add(ServiceClientClassComposer.instance().generate(service, messageTypes));
97+
clazzes.add(
98+
ServiceClientClassComposer.instance().generate(service, messageTypes, resourceNames));
9599
clazzes.add(ServiceSettingsClassComposer.instance().generate(service, messageTypes));
96100
return clazzes;
97101
}

src/main/java/com/google/api/generator/gapic/composer/ServiceClientClassComposer.java

Lines changed: 133 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
import com.google.api.generator.gapic.model.Method;
6868
import com.google.api.generator.gapic.model.Method.Stream;
6969
import com.google.api.generator.gapic.model.MethodArgument;
70+
import com.google.api.generator.gapic.model.ResourceName;
7071
import com.google.api.generator.gapic.model.Service;
7172
import com.google.api.generator.gapic.utils.JavaStyle;
7273
import com.google.api.generator.util.TriFunction;
@@ -86,13 +87,14 @@
8687
import java.util.List;
8788
import java.util.Map;
8889
import java.util.Objects;
90+
import java.util.Optional;
8991
import java.util.concurrent.TimeUnit;
9092
import java.util.function.BiFunction;
9193
import java.util.function.Function;
9294
import java.util.stream.Collectors;
9395
import javax.annotation.Generated;
9496

95-
public class ServiceClientClassComposer implements ClassComposer {
97+
public class ServiceClientClassComposer {
9698
private static final ServiceClientClassComposer INSTANCE = new ServiceClientClassComposer();
9799
private static final String PAGED_RESPONSE_TYPE_NAME_PATTERN = "%sPagedResponse";
98100
private static final String CALLABLE_NAME_PATTERN = "%sCallable";
@@ -117,8 +119,8 @@ public static ServiceClientClassComposer instance() {
117119
return INSTANCE;
118120
}
119121

120-
@Override
121-
public GapicClass generate(Service service, Map<String, Message> messageTypes) {
122+
public GapicClass generate(
123+
Service service, Map<String, Message> messageTypes, Map<String, ResourceName> resourceNames) {
122124
TypeStore typeStore = createTypes(service, messageTypes);
123125
String className = ClassNames.getServiceClientClassName(service);
124126
GapicClass.Kind kind = Kind.MAIN;
@@ -127,14 +129,16 @@ public GapicClass generate(Service service, Map<String, Message> messageTypes) {
127129

128130
ClassDefinition classDef =
129131
ClassDefinition.builder()
130-
.setHeaderCommentStatements(createClassHeaderComments(service, typeStore))
132+
.setHeaderCommentStatements(
133+
createClassHeaderComments(service, typeStore, resourceNames, messageTypes))
131134
.setPackageString(pakkage)
132135
.setAnnotations(createClassAnnotations(pakkage, typeStore))
133136
.setScope(ScopeNode.PUBLIC)
134137
.setName(className)
135138
.setImplementsTypes(createClassImplements(typeStore))
136139
.setStatements(createFieldDeclarations(service, typeStore, hasLroClient))
137-
.setMethods(createClassMethods(service, messageTypes, typeStore, hasLroClient))
140+
.setMethods(
141+
createClassMethods(service, messageTypes, typeStore, resourceNames, hasLroClient))
138142
.setNestedClasses(createNestedPagingClasses(service, messageTypes, typeStore))
139143
.build();
140144
return GapicClass.create(kind, classDef);
@@ -158,29 +162,36 @@ private static List<TypeNode> createClassImplements(TypeStore typeStore) {
158162
}
159163

160164
private static List<CommentStatement> createClassHeaderComments(
161-
Service service, TypeStore typeStore) {
165+
Service service,
166+
TypeStore typeStore,
167+
Map<String, ResourceName> resourceNames,
168+
Map<String, Message> messageTypes) {
162169
TypeNode clientType = typeStore.get(ClassNames.getServiceClientClassName(service));
163170
TypeNode settingsType = typeStore.get(ClassNames.getServiceSettingsClassName(service));
171+
String classMethodSampleCode =
172+
ServiceClientSampleCodeComposer.composeClassHeaderMethodSampleCode(
173+
service, clientType, resourceNames, messageTypes);
164174
String credentialsSampleCode =
165175
ServiceClientSampleCodeComposer.composeClassHeaderCredentialsSampleCode(
166176
clientType, settingsType);
167177
String endpointSampleCode =
168178
ServiceClientSampleCodeComposer.composeClassHeaderEndpointSampleCode(
169179
clientType, settingsType);
170180
return ServiceClientCommentComposer.createClassHeaderComments(
171-
service, credentialsSampleCode, endpointSampleCode);
181+
service, classMethodSampleCode, credentialsSampleCode, endpointSampleCode);
172182
}
173183

174184
private static List<MethodDefinition> createClassMethods(
175185
Service service,
176186
Map<String, Message> messageTypes,
177187
TypeStore typeStore,
188+
Map<String, ResourceName> resourceNames,
178189
boolean hasLroClient) {
179190
List<MethodDefinition> methods = new ArrayList<>();
180191
methods.addAll(createStaticCreatorMethods(service, typeStore));
181192
methods.addAll(createConstructorMethods(service, typeStore, hasLroClient));
182193
methods.addAll(createGetterMethods(service, typeStore, hasLroClient));
183-
methods.addAll(createServiceMethods(service, messageTypes, typeStore));
194+
methods.addAll(createServiceMethods(service, messageTypes, typeStore, resourceNames));
184195
methods.addAll(createBackgroundResourceMethods(service, typeStore));
185196
return methods;
186197
}
@@ -497,26 +508,48 @@ private static List<MethodDefinition> createGetterMethods(
497508
}
498509

499510
private static List<MethodDefinition> createServiceMethods(
500-
Service service, Map<String, Message> messageTypes, TypeStore typeStore) {
511+
Service service,
512+
Map<String, Message> messageTypes,
513+
TypeStore typeStore,
514+
Map<String, ResourceName> resourceNames) {
501515
List<MethodDefinition> javaMethods = new ArrayList<>();
502516
for (Method method : service.methods()) {
503517
if (method.stream().equals(Stream.NONE)) {
504-
javaMethods.addAll(createMethodVariants(method, messageTypes, typeStore));
505-
javaMethods.add(createMethodDefaultMethod(method, typeStore));
518+
javaMethods.addAll(
519+
createMethodVariants(
520+
method,
521+
ClassNames.getServiceClientClassName(service),
522+
messageTypes,
523+
typeStore,
524+
resourceNames));
525+
javaMethods.add(
526+
createMethodDefaultMethod(
527+
method,
528+
ClassNames.getServiceClientClassName(service),
529+
messageTypes,
530+
typeStore,
531+
resourceNames));
506532
}
507533
if (method.hasLro()) {
508-
javaMethods.add(createLroCallableMethod(service, method, typeStore));
534+
javaMethods.add(
535+
createLroCallableMethod(service, method, typeStore, messageTypes, resourceNames));
509536
}
510537
if (method.isPaged()) {
511-
javaMethods.add(createPagedCallableMethod(service, method, typeStore));
538+
javaMethods.add(
539+
createPagedCallableMethod(service, method, typeStore, messageTypes, resourceNames));
512540
}
513-
javaMethods.add(createCallableMethod(service, method, typeStore));
541+
javaMethods.add(
542+
createCallableMethod(service, method, typeStore, messageTypes, resourceNames));
514543
}
515544
return javaMethods;
516545
}
517546

518547
private static List<MethodDefinition> createMethodVariants(
519-
Method method, Map<String, Message> messageTypes, TypeStore typeStore) {
548+
Method method,
549+
String clientName,
550+
Map<String, Message> messageTypes,
551+
TypeStore typeStore,
552+
Map<String, ResourceName> resourceNames) {
520553
List<MethodDefinition> javaMethods = new ArrayList<>();
521554
String methodName = JavaStyle.toLowerCamelCase(method.name());
522555
TypeNode methodInputType = method.inputType();
@@ -578,10 +611,15 @@ private static List<MethodDefinition> createMethodVariants(
578611
.setReturnType(methodOutputType)
579612
.build();
580613

614+
Optional<String> methodSampleCode =
615+
Optional.of(
616+
ServiceClientSampleCodeComposer.composeRpcMethodHeaderSampleCode(
617+
method, typeStore.get(clientName), signature, resourceNames, messageTypes));
581618
MethodDefinition.Builder methodVariantBuilder =
582619
MethodDefinition.builder()
583620
.setHeaderCommentStatements(
584-
ServiceClientCommentComposer.createRpcMethodHeaderComment(method, signature))
621+
ServiceClientCommentComposer.createRpcMethodHeaderComment(
622+
method, signature, methodSampleCode))
585623
.setScope(ScopeNode.PUBLIC)
586624
.setIsFinal(true)
587625
.setName(String.format(method.hasLro() ? "%sAsync" : "%s", methodName))
@@ -601,7 +639,12 @@ private static List<MethodDefinition> createMethodVariants(
601639
return javaMethods;
602640
}
603641

604-
private static MethodDefinition createMethodDefaultMethod(Method method, TypeStore typeStore) {
642+
private static MethodDefinition createMethodDefaultMethod(
643+
Method method,
644+
String clientName,
645+
Map<String, Message> messageTypes,
646+
TypeStore typeStore,
647+
Map<String, ResourceName> resourceNames) {
605648
String methodName = JavaStyle.toLowerCamelCase(method.name());
606649
TypeNode methodInputType = method.inputType();
607650
TypeNode methodOutputType =
@@ -634,6 +677,11 @@ private static MethodDefinition createMethodDefaultMethod(Method method, TypeSto
634677
callableMethodName = String.format(OPERATION_CALLABLE_NAME_PATTERN, methodName);
635678
}
636679

680+
Optional<String> defaultMethodSampleCode =
681+
Optional.of(
682+
ServiceClientSampleCodeComposer.composeRpcDefaultMethodHeaderSampleCode(
683+
method, typeStore.get(clientName), resourceNames, messageTypes));
684+
637685
MethodInvocationExpr callableMethodExpr =
638686
MethodInvocationExpr.builder().setMethodName(callableMethodName).build();
639687
callableMethodExpr =
@@ -646,7 +694,8 @@ private static MethodDefinition createMethodDefaultMethod(Method method, TypeSto
646694
MethodDefinition.Builder methodBuilder =
647695
MethodDefinition.builder()
648696
.setHeaderCommentStatements(
649-
ServiceClientCommentComposer.createRpcMethodHeaderComment(method))
697+
ServiceClientCommentComposer.createRpcMethodHeaderComment(
698+
method, defaultMethodSampleCode))
650699
.setScope(ScopeNode.PUBLIC)
651700
.setIsFinal(true)
652701
.setName(String.format(method.hasLro() ? "%sAsync" : "%s", methodName))
@@ -665,22 +714,42 @@ private static MethodDefinition createMethodDefaultMethod(Method method, TypeSto
665714
}
666715

667716
private static MethodDefinition createLroCallableMethod(
668-
Service service, Method method, TypeStore typeStore) {
669-
return createCallableMethod(service, method, typeStore, CallableMethodKind.LRO);
717+
Service service,
718+
Method method,
719+
TypeStore typeStore,
720+
Map<String, Message> messageTypes,
721+
Map<String, ResourceName> resourceNames) {
722+
return createCallableMethod(
723+
service, method, CallableMethodKind.LRO, typeStore, messageTypes, resourceNames);
670724
}
671725

672726
private static MethodDefinition createCallableMethod(
673-
Service service, Method method, TypeStore typeStore) {
674-
return createCallableMethod(service, method, typeStore, CallableMethodKind.REGULAR);
727+
Service service,
728+
Method method,
729+
TypeStore typeStore,
730+
Map<String, Message> messageTypes,
731+
Map<String, ResourceName> resourceNames) {
732+
return createCallableMethod(
733+
service, method, CallableMethodKind.REGULAR, typeStore, messageTypes, resourceNames);
675734
}
676735

677736
private static MethodDefinition createPagedCallableMethod(
678-
Service service, Method method, TypeStore typeStore) {
679-
return createCallableMethod(service, method, typeStore, CallableMethodKind.PAGED);
737+
Service service,
738+
Method method,
739+
TypeStore typeStore,
740+
Map<String, Message> messageTypes,
741+
Map<String, ResourceName> resourceNames) {
742+
return createCallableMethod(
743+
service, method, CallableMethodKind.PAGED, typeStore, messageTypes, resourceNames);
680744
}
681745

682746
private static MethodDefinition createCallableMethod(
683-
Service service, Method method, TypeStore typeStore, CallableMethodKind callableMethodKind) {
747+
Service service,
748+
Method method,
749+
CallableMethodKind callableMethodKind,
750+
TypeStore typeStore,
751+
Map<String, Message> messageTypes,
752+
Map<String, ResourceName> resourceNames) {
684753
TypeNode rawCallableReturnType = null;
685754
if (callableMethodKind.equals(CallableMethodKind.LRO)) {
686755
rawCallableReturnType = typeStore.get("OperationCallable");
@@ -722,9 +791,47 @@ private static MethodDefinition createCallableMethod(
722791
.setReturnType(returnType)
723792
.build();
724793

794+
Optional<String> sampleCodeOpt = Optional.empty();
795+
if (callableMethodKind.equals(CallableMethodKind.LRO)) {
796+
sampleCodeOpt =
797+
Optional.of(
798+
ServiceClientSampleCodeComposer.composeLroCallableMethodHeaderSampleCode(
799+
method,
800+
typeStore.get(ClassNames.getServiceClientClassName(service)),
801+
resourceNames,
802+
messageTypes));
803+
} else if (callableMethodKind.equals(CallableMethodKind.PAGED)) {
804+
sampleCodeOpt =
805+
Optional.of(
806+
ServiceClientSampleCodeComposer.composePagedCallableMethodHeaderSampleCode(
807+
method,
808+
typeStore.get(ClassNames.getServiceClientClassName(service)),
809+
resourceNames,
810+
messageTypes));
811+
} else if (callableMethodKind.equals(CallableMethodKind.REGULAR)) {
812+
if (method.stream().equals(Stream.NONE)) {
813+
sampleCodeOpt =
814+
Optional.of(
815+
ServiceClientSampleCodeComposer.composeRegularCallableMethodHeaderSampleCode(
816+
method,
817+
typeStore.get(ClassNames.getServiceClientClassName(service)),
818+
resourceNames,
819+
messageTypes));
820+
} else {
821+
sampleCodeOpt =
822+
Optional.of(
823+
ServiceClientSampleCodeComposer.composeStreamCallableMethodHeaderSampleCode(
824+
method,
825+
typeStore.get(ClassNames.getServiceClientClassName(service)),
826+
resourceNames,
827+
messageTypes));
828+
}
829+
}
830+
725831
return MethodDefinition.builder()
726832
.setHeaderCommentStatements(
727-
ServiceClientCommentComposer.createRpcCallableMethodHeaderComment(method))
833+
ServiceClientCommentComposer.createRpcCallableMethodHeaderComment(
834+
method, sampleCodeOpt))
728835
.setScope(ScopeNode.PUBLIC)
729836
.setIsFinal(true)
730837
.setName(methodName)

src/main/java/com/google/api/generator/gapic/composer/ServiceSettingsClassComposer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,8 @@ private static List<CommentStatement> createClassHeaderComments(
139139
Optional<String> methodNameOpt =
140140
methodOpt.isPresent() ? Optional.of(methodOpt.get().name()) : Optional.empty();
141141
Optional<String> sampleCodeOpt =
142-
SettingsSampleCodeComposer.composeSampleCode(methodOpt, classType);
142+
SettingsSampleCodeComposer.composeSampleCode(
143+
methodNameOpt, ClassNames.getServiceSettingsClassName(service), classType);
143144
return SettingsCommentComposer.createClassHeaderComments(
144145
ClassNames.getServiceClientClassName(service),
145146
service.defaultHost(),

src/main/java/com/google/api/generator/gapic/composer/ServiceStubSettingsClassComposer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,8 @@ private static List<CommentStatement> createClassHeaderComments(
218218
Optional<String> methodNameOpt =
219219
methodOpt.isPresent() ? Optional.of(methodOpt.get().name()) : Optional.empty();
220220
Optional<String> sampleCodeOpt =
221-
SettingsSampleCodeComposer.composeSampleCode(methodOpt, classType);
221+
SettingsSampleCodeComposer.composeSampleCode(
222+
methodNameOpt, ClassNames.getServiceSettingsClassName(service), classType);
222223

223224
return SettingsCommentComposer.createClassHeaderComments(
224225
ClassNames.getServiceStubClassName(service),

0 commit comments

Comments
 (0)