Skip to content

Commit d22b966

Browse files
authored
fix: Fix BetaApi annotaiton usage for REST transport and clean BetaApi for default stubs in all transports (#987)
This PR essentially does the following: 1) Clean `@BetaApi("A restructuring of stub classes is planned, so this may break in the future")` annotaiton for Stub-related methods, because those methods and classes have been in "beta" state like that for several years already and are de-facto GA. 2) Make sure that all HttpJson (REST) related classes and methods on the surface of the client are marked as beta for `grpc+rest` (mixed transport) clients. This is necessary in the context of the upcoming REGAPIC rollout to indicate that soon to be released REST transport functionality is released at Beta quality level.
1 parent a5bfed2 commit d22b966

File tree

65 files changed

+493
-184
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+493
-184
lines changed

BUILD.bazel

+1
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ GOLDEN_UPDATING_UNIT_TESTS = [
200200
"com.google.api.generator.gapic.composer.grpcrest.ServiceClientClassComposerTest",
201201
"com.google.api.generator.gapic.composer.grpcrest.ServiceClientTestClassComposerTest",
202202
"com.google.api.generator.gapic.composer.grpcrest.ServiceSettingsClassComposerTest",
203+
"com.google.api.generator.gapic.composer.grpcrest.ServiceStubSettingsClassComposerTest",
203204
"com.google.api.generator.gapic.composer.resourcename.ResourceNameHelperClassComposerTest",
204205
"com.google.api.generator.gapic.composer.rest.HttpJsonServiceCallableFactoryClassComposerTest",
205206
"com.google.api.generator.gapic.composer.rest.HttpJsonServiceStubClassComposerTest",

src/main/java/com/google/api/generator/gapic/composer/comment/SettingsCommentComposer.java

+21
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,27 @@ public class SettingsCommentComposer {
8989
.map(c -> CommentStatement.withComment(c))
9090
.collect(Collectors.toList());
9191

92+
private final CommentStatement newTransportBuilderMethodComment;
93+
private final CommentStatement transportProviderBuilderMethodComment;
94+
95+
public SettingsCommentComposer(String transportPrefix) {
96+
this.newTransportBuilderMethodComment =
97+
toSimpleComment(String.format("Returns a new %s builder for this class.", transportPrefix));
98+
this.transportProviderBuilderMethodComment =
99+
toSimpleComment(
100+
String.format(
101+
"Returns a builder for the default %s ChannelProvider for this service.",
102+
transportPrefix));
103+
}
104+
105+
public CommentStatement getNewTransportBuilderMethodComment() {
106+
return newTransportBuilderMethodComment;
107+
}
108+
109+
public CommentStatement getTransportProviderBuilderMethodComment() {
110+
return transportProviderBuilderMethodComment;
111+
}
112+
92113
public static CommentStatement createCallSettingsGetterComment(
93114
String javaMethodName, boolean isMethodDeprecated) {
94115
String methodComment = String.format(CALL_SETTINGS_METHOD_DOC_PATTERN, javaMethodName);

src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceCallableFactoryClassComposer.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public GapicClass generate(GapicContext context, Service service) {
7070
String pakkage = String.format("%s.stub", service.pakkage());
7171

7272
StubCommentComposer commentComposer =
73-
new StubCommentComposer(getTransportContext().transportName());
73+
new StubCommentComposer(getTransportContext().transportNames().get(0));
7474
ClassDefinition classDef =
7575
ClassDefinition.builder()
7676
.setPackageString(pakkage)

src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceClientClassComposer.java

-24
Original file line numberDiff line numberDiff line change
@@ -340,18 +340,11 @@ private static List<MethodDefinition> createStaticCreatorMethods(
340340
.setType(typeStore.get(ClassNames.getServiceStubClassName(service)))
341341
.setName("stub")
342342
.build());
343-
AnnotationNode betaAnnotation =
344-
AnnotationNode.builder()
345-
.setType(typeStore.get("BetaApi"))
346-
.setDescription(
347-
"A restructuring of stub classes is planned, so this may break in the future")
348-
.build();
349343
methods.add(
350344
MethodDefinition.builder()
351345
.setHeaderCommentStatements(
352346
ServiceClientCommentComposer.createCreateMethodStubArgComment(
353347
ClassNames.getServiceClientClassName(service), settingsVarExpr.type()))
354-
.setAnnotations(Arrays.asList(betaAnnotation))
355348
.setScope(ScopeNode.PUBLIC)
356349
.setIsStatic(true)
357350
.setIsFinal(true)
@@ -448,15 +441,8 @@ private List<MethodDefinition> createConstructorMethods(
448441
if (hasLroClient) {
449442
ctorAssignmentExprs.addAll(operationsClientAssignExprs);
450443
}
451-
AnnotationNode betaAnnotation =
452-
AnnotationNode.builder()
453-
.setType(typeStore.get("BetaApi"))
454-
.setDescription(
455-
"A restructuring of stub classes is planned, so this may break in the future")
456-
.build();
457444
methods.add(
458445
MethodDefinition.constructorBuilder()
459-
.setAnnotations(Arrays.asList(betaAnnotation))
460446
.setScope(ScopeNode.PROTECTED)
461447
.setReturnType(thisClassType)
462448
.setArguments(stubVarExpr.toBuilder().setIsDecl(true).build())
@@ -534,12 +520,6 @@ private List<MethodDefinition> createGetterMethods(
534520
methodNameToTypes.put(opClientMethodName, opClientTypesIt.next());
535521
}
536522
}
537-
AnnotationNode betaStubAnnotation =
538-
AnnotationNode.builder()
539-
.setType(typeStore.get("BetaApi"))
540-
.setDescription(
541-
"A restructuring of stub classes is planned, so this may break in the future")
542-
.build();
543523

544524
return methodNameToTypes.entrySet().stream()
545525
.map(
@@ -554,10 +534,6 @@ private List<MethodDefinition> createGetterMethods(
554534
ServiceClientCommentComposer.GET_OPERATIONS_CLIENT_METHOD_COMMENT);
555535
}
556536
return methodBuilder
557-
.setAnnotations(
558-
methodName.equals("getStub")
559-
? Arrays.asList(betaStubAnnotation)
560-
: Collections.emptyList())
561537
.setScope(ScopeNode.PUBLIC)
562538
.setName(methodName)
563539
.setIsFinal(!methodName.equals("getStub"))

src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceSettingsClassComposer.java

+48-11
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public abstract class AbstractServiceSettingsClassComposer implements ClassCompo
8585

8686
private static final String OPERATION_SETTINGS_LITERAL = "OperationSettings";
8787
private static final String SETTINGS_LITERAL = "Settings";
88-
private static final TypeStore FIXED_TYPESTORE = createStaticTypes();
88+
protected static final TypeStore FIXED_TYPESTORE = createStaticTypes();
8989

9090
private final TransportContext transportContext;
9191

@@ -185,7 +185,14 @@ private List<MethodDefinition> createClassMethods(Service service, TypeStore typ
185185
javaMethods.addAll(createSettingsGetterMethods(service, typeStore));
186186
javaMethods.add(createCreatorMethod(service, typeStore));
187187
javaMethods.addAll(createDefaultGetterMethods(service, typeStore));
188-
javaMethods.addAll(createNewBuilderMethods(service, typeStore, "newBuilder", "createDefault"));
188+
javaMethods.addAll(
189+
createNewBuilderMethods(
190+
service,
191+
typeStore,
192+
"newBuilder",
193+
"createDefault",
194+
ImmutableList.of(),
195+
SettingsCommentComposer.NEW_BUILDER_METHOD_COMMENT));
189196
javaMethods.addAll(createBuilderHelperMethods(service, typeStore));
190197
javaMethods.add(createConstructorMethod(service, typeStore));
191198
return javaMethods;
@@ -370,13 +377,37 @@ private List<MethodDefinition> createDefaultGetterMethods(Service service, TypeS
370377
getTransportContext().defaultTransportProviderBuilderNames().iterator();
371378
Iterator<Class<?>> channelProviderClassesIt =
372379
getTransportContext().instantiatingChannelProviderBuilderClasses().iterator();
373-
while (providerBuilderNamesIt.hasNext() && channelProviderClassesIt.hasNext()) {
380+
Iterator<String> transportNamesIt = getTransportContext().transportNames().iterator();
381+
382+
boolean secondaryTransportProviderBuilder = false;
383+
while (providerBuilderNamesIt.hasNext()
384+
&& channelProviderClassesIt.hasNext()
385+
&& transportNamesIt.hasNext()) {
386+
List<AnnotationNode> annotations = ImmutableList.of();
387+
388+
// For clients supporting multiple transports (mainly grpc+rest case) make secondary transport
389+
// declared as @BetaApi for now.
390+
if (secondaryTransportProviderBuilder) {
391+
annotations =
392+
Arrays.asList(AnnotationNode.builder().setType(FIXED_TYPESTORE.get("BetaApi")).build());
393+
}
394+
CommentStatement commentStatement =
395+
SettingsCommentComposer.DEFAULT_TRANSPORT_PROVIDER_BUILDER_METHOD_COMMENT;
396+
if (getTransportContext().transportNames().size() > 1) {
397+
commentStatement =
398+
new SettingsCommentComposer(transportNamesIt.next())
399+
.getTransportProviderBuilderMethodComment();
400+
}
401+
374402
javaMethods.add(
375403
methodMakerFn.apply(
376-
methodStarterFn.apply(
377-
providerBuilderNamesIt.next(),
378-
typeMakerFn.apply(channelProviderClassesIt.next())),
379-
SettingsCommentComposer.DEFAULT_TRANSPORT_PROVIDER_BUILDER_METHOD_COMMENT));
404+
methodStarterFn
405+
.apply(
406+
providerBuilderNamesIt.next(),
407+
typeMakerFn.apply(channelProviderClassesIt.next()))
408+
.setAnnotations(annotations),
409+
commentStatement));
410+
secondaryTransportProviderBuilder = true;
380411
}
381412

382413
javaMethods.add(
@@ -408,11 +439,14 @@ protected List<MethodDefinition> createNewBuilderMethods(
408439
Service service,
409440
TypeStore typeStore,
410441
String newBuilderMethodName,
411-
String createDefaultMethodName) {
442+
String createDefaultMethodName,
443+
List<AnnotationNode> annotations,
444+
CommentStatement comment) {
412445
TypeNode builderType = typeStore.get(BUILDER_CLASS_NAME);
413446
return ImmutableList.of(
414447
MethodDefinition.builder()
415-
.setHeaderCommentStatements(SettingsCommentComposer.NEW_BUILDER_METHOD_COMMENT)
448+
.setHeaderCommentStatements(comment)
449+
.setAnnotations(annotations)
416450
.setScope(ScopeNode.PUBLIC)
417451
.setIsStatic(true)
418452
.setReturnType(builderType)
@@ -500,7 +534,8 @@ private List<MethodDefinition> createNestedBuilderClassMethods(
500534
List<MethodDefinition> javaMethods = new ArrayList<>();
501535
javaMethods.addAll(createNestedBuilderConstructorMethods(service, typeStore));
502536
javaMethods.addAll(
503-
createNestedBuilderCreatorMethods(service, typeStore, "newBuilder", "createDefault"));
537+
createNestedBuilderCreatorMethods(
538+
service, typeStore, "newBuilder", "createDefault", ImmutableList.of()));
504539
javaMethods.add(createNestedBuilderStubSettingsBuilderMethod(service, typeStore));
505540
javaMethods.add(createNestedBuilderApplyToAllUnaryMethod(service, typeStore));
506541
javaMethods.addAll(createNestedBuilderSettingsGetterMethods(service, typeStore));
@@ -591,7 +626,8 @@ protected List<MethodDefinition> createNestedBuilderCreatorMethods(
591626
Service service,
592627
TypeStore typeStore,
593628
String newBuilderMethodName,
594-
String createDefaultMethodName) {
629+
String createDefaultMethodName,
630+
List<AnnotationNode> annotations) {
595631
MethodInvocationExpr ctorArg =
596632
MethodInvocationExpr.builder()
597633
.setStaticReferenceType(
@@ -602,6 +638,7 @@ protected List<MethodDefinition> createNestedBuilderCreatorMethods(
602638
TypeNode builderType = typeStore.get(BUILDER_CLASS_NAME);
603639
return ImmutableList.of(
604640
MethodDefinition.builder()
641+
.setAnnotations(annotations)
605642
.setScope(ScopeNode.PRIVATE)
606643
.setIsStatic(true)
607644
.setReturnType(builderType)

src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceStubSettingsClassComposer.java

+28-13
Original file line numberDiff line numberDiff line change
@@ -249,12 +249,14 @@ protected List<MethodDefinition> createDefaultTransportTransportProviderBuilderM
249249
getTransportContext().instantiatingChannelProviderBuilderClasses().iterator();
250250
Iterator<String> builderNamesIt =
251251
getTransportContext().defaultTransportProviderBuilderNames().iterator();
252+
Iterator<String> transportNamesIt = getTransportContext().transportNames().iterator();
252253

253254
List<MethodDefinition> methods = new ArrayList<>();
254255

255256
while (providerClassIt.hasNext()
256257
&& providerBuilderClassIt.hasNext()
257-
&& builderNamesIt.hasNext()) {
258+
&& builderNamesIt.hasNext()
259+
&& transportNamesIt.hasNext()) {
258260
TypeNode returnType =
259261
TypeNode.withReference(ConcreteReference.withClazz(providerBuilderClassIt.next()));
260262
TypeNode channelProviderType =
@@ -269,16 +271,29 @@ protected List<MethodDefinition> createDefaultTransportTransportProviderBuilderM
269271
Expr returnExpr =
270272
initializeTransportProviderBuilder(transportChannelProviderBuilderExpr, returnType);
271273

274+
List<AnnotationNode> annotations = new ArrayList<>();
275+
if (!methods.isEmpty()) {
276+
annotations.add(AnnotationNode.builder().setType(FIXED_TYPESTORE.get("BetaApi")).build());
277+
}
278+
CommentStatement commentStatement =
279+
SettingsCommentComposer.DEFAULT_TRANSPORT_PROVIDER_BUILDER_METHOD_COMMENT;
280+
if (getTransportContext().transportNames().size() > 1) {
281+
commentStatement =
282+
new SettingsCommentComposer(transportNamesIt.next())
283+
.getTransportProviderBuilderMethodComment();
284+
}
285+
272286
MethodDefinition method =
273287
MethodDefinition.builder()
274-
.setHeaderCommentStatements(
275-
SettingsCommentComposer.DEFAULT_TRANSPORT_PROVIDER_BUILDER_METHOD_COMMENT)
288+
.setHeaderCommentStatements(commentStatement)
289+
.setAnnotations(annotations)
276290
.setScope(ScopeNode.PUBLIC)
277291
.setIsStatic(true)
278292
.setReturnType(returnType)
279293
.setName(builderNamesIt.next())
280294
.setReturnExpr(returnExpr)
281295
.build();
296+
282297
methods.add(method);
283298
}
284299

@@ -981,7 +996,13 @@ private List<MethodDefinition> createClassMethods(
981996
createMethodSettingsGetterMethods(methodSettingsMemberVarExprs, deprecatedSettingVarNames));
982997
javaMethods.add(createCreateStubMethod(service, typeStore));
983998
javaMethods.addAll(createDefaultHelperAndGetterMethods(service, typeStore));
984-
javaMethods.addAll(createNewBuilderMethods(service, typeStore, "newBuilder", "createDefault"));
999+
javaMethods.addAll(
1000+
createNewBuilderMethods(
1001+
service,
1002+
typeStore,
1003+
"newBuilder",
1004+
"createDefault",
1005+
SettingsCommentComposer.NEW_BUILDER_METHOD_COMMENT));
9851006
javaMethods.addAll(createBuilderHelperMethods(service, typeStore));
9861007
javaMethods.add(createClassConstructor(service, methodSettingsMemberVarExprs, typeStore));
9871008
return javaMethods;
@@ -1086,15 +1107,8 @@ private MethodDefinition createCreateStubMethod(Service service, TypeStore typeS
10861107

10871108
// Put the method together.
10881109
TypeNode returnType = typeStore.get(ClassNames.getServiceStubClassName(service));
1089-
AnnotationNode annotation =
1090-
AnnotationNode.builder()
1091-
.setType(FIXED_TYPESTORE.get("BetaApi"))
1092-
.setDescription(
1093-
"A restructuring of stub classes is planned, so this may break in the future")
1094-
.build();
10951110

10961111
return MethodDefinition.builder()
1097-
.setAnnotations(Arrays.asList(annotation))
10981112
.setScope(ScopeNode.PUBLIC)
10991113
.setReturnType(returnType)
11001114
.setName("createStub")
@@ -1186,12 +1200,13 @@ protected List<MethodDefinition> createNewBuilderMethods(
11861200
Service service,
11871201
TypeStore typeStore,
11881202
String newBuilderMethodName,
1189-
String createDefaultMethodName) {
1203+
String createDefaultMethodName,
1204+
CommentStatement methodComment) {
11901205
// Create the newBuilder() method.
11911206
final TypeNode builderReturnType = typeStore.get(NESTED_BUILDER_CLASS_NAME);
11921207
return ImmutableList.of(
11931208
MethodDefinition.builder()
1194-
.setHeaderCommentStatements(SettingsCommentComposer.NEW_BUILDER_METHOD_COMMENT)
1209+
.setHeaderCommentStatements(methodComment)
11951210
.setScope(ScopeNode.PUBLIC)
11961211
.setIsStatic(true)
11971212
.setReturnType(builderReturnType)

src/main/java/com/google/api/generator/gapic/composer/common/AbstractTransportServiceStubClassComposer.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ public GapicClass generate(GapicContext context, Service service) {
190190
messageTypes);
191191

192192
StubCommentComposer commentComposer =
193-
new StubCommentComposer(getTransportContext().transportName());
193+
new StubCommentComposer(getTransportContext().transportNames().get(0));
194194

195195
ClassDefinition classDef =
196196
ClassDefinition.builder()

src/main/java/com/google/api/generator/gapic/composer/common/TransportContext.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ public abstract class TransportContext {
3030
// For AbstractServiceStubClassComposer
3131
public abstract Transport transport();
3232

33-
@Nullable
34-
public abstract String transportName();
33+
public abstract List<String> transportNames();
3534

3635
@Nullable
3736
public abstract Class<?> callSettingsClass();
@@ -98,7 +97,7 @@ public abstract static class Builder {
9897

9998
public abstract Builder setTransport(Transport transport);
10099

101-
public abstract Builder setTransportName(String value);
100+
public abstract Builder setTransportNames(List<String> values);
102101

103102
public abstract Builder setCallSettingsClass(Class<?> callSettingsClass);
104103

src/main/java/com/google/api/generator/gapic/composer/grpc/GrpcContext.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public abstract class GrpcContext extends TransportContext {
3434
GrpcContext.builder()
3535
.setClassNames(new ClassNames("Grpc"))
3636
.setTransport(Transport.GRPC)
37-
.setTransportName("gRPC")
37+
.setTransportNames(ImmutableList.of("gRPC"))
3838
// For grpc.GrpcServiceStubClassComposer
3939
.setCallSettingsClass(GrpcCallSettings.class)
4040
.setStubCallableFactoryType(classToType(GrpcStubCallableFactory.class))

src/main/java/com/google/api/generator/gapic/composer/grpcrest/GrpcRestContext.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public abstract class GrpcRestContext extends TransportContext {
3333
GrpcRestContext.builder()
3434
.setClassNames(new ClassNames("Grpc", "HttpJson"))
3535
.setTransport(Transport.GRPC_REST)
36-
.setTransportName(null)
36+
.setTransportNames(ImmutableList.of("gRPC", "REST"))
3737
// For grpcrest.GrpcServiceStubClassComposer
3838
.setCallSettingsClass(null)
3939
.setStubCallableFactoryType(null)

0 commit comments

Comments
 (0)