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

Commit bf0bbaa

Browse files
authored
[ggj][codegen] feat: add third ServiceStubSettings.Builder(settings) ctor (#241)
* feat: add factory var decl in ServiceStubSettings codegen * fix: prevent duplicate MethodDefinition annotations * feat: add descriptor fields to ServiceStubSettings codegen * feat: add starter Builder to ServiceStubSettings codegen * feat: add settings.builder decls to ServiceStubSettings codegen * feat: add first nested ctors to ServiceStubSettings codegen * feat: add GapicServiceConfig DS and processing * feat: integrate GapicServiceConfig into GapicContext, Parser, Composer * feat: initial param block, RetrySettingsComposer, test * fix!: refactor GapicRetrySettings * fix: recognize 1. or .1 double patterns * feat: support BlockStatement in ClassDef stmts * feat: add params block to ServiceStubSettings codegen * feat: add codes def to ServiceStubSettings codegen * feat: add initDefaults() to ServiceStubSettings codegen * feat: add LRO to ServiceStubSettings.Builder.initDefaults * feat: add third ServiceStubSettings.Builder(settings) ctor
1 parent 15da1d0 commit bf0bbaa

3 files changed

Lines changed: 68 additions & 5 deletions

File tree

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -610,7 +610,6 @@ private static Map<String, TypeNode> createStaticTypes() {
610610
RetrySettings.class,
611611
StatusCode.class,
612612
UnaryCallSettings.class);
613-
614613
return concreteClazzes.stream()
615614
.collect(
616615
Collectors.toMap(

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

Lines changed: 52 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1163,7 +1163,7 @@ private static List<MethodDefinition> createNestedClassMethods(
11631163
Map<String, TypeNode> types) {
11641164
List<MethodDefinition> nestedClassMethods = new ArrayList<>();
11651165
nestedClassMethods.addAll(
1166-
createNestedClassConstructorMethods(nestedMethodSettingsMemberVarExprs, types));
1166+
createNestedClassConstructorMethods(service, nestedMethodSettingsMemberVarExprs, types));
11671167
nestedClassMethods.add(createNestedClassInitDefaultsMethod(service, serviceConfig, types));
11681168

11691169
// TODO(miraleung): More methods.
@@ -1220,7 +1220,10 @@ private static MethodDefinition createNestedClassInitDefaultsMethod(
12201220
}
12211221

12221222
private static List<MethodDefinition> createNestedClassConstructorMethods(
1223-
Map<String, VariableExpr> nestedMethodSettingsMemberVarExprs, Map<String, TypeNode> types) {
1223+
Service service,
1224+
Map<String, VariableExpr> nestedMethodSettingsMemberVarExprs,
1225+
Map<String, TypeNode> types) {
1226+
12241227
TypeNode builderType = types.get(NESTED_BUILDER_CLASS_NAME);
12251228

12261229
List<MethodDefinition> ctorMethods = new ArrayList<>();
@@ -1324,7 +1327,7 @@ private static List<MethodDefinition> createNestedClassConstructorMethods(
13241327
})
13251328
.collect(Collectors.toList()));
13261329

1327-
ctorBodyExprs.add(
1330+
Expr unaryMethodSettingsBuildersAssignExpr =
13281331
AssignmentExpr.builder()
13291332
.setVariableExpr(NESTED_UNARY_METHOD_SETTINGS_BUILDERS_VAR_EXPR)
13301333
.setValueExpr(
@@ -1345,7 +1348,8 @@ private static List<MethodDefinition> createNestedClassConstructorMethods(
13451348
.collect(Collectors.toList()))
13461349
.setReturnType(NESTED_UNARY_METHOD_SETTINGS_BUILDERS_VAR_EXPR.type())
13471350
.build())
1348-
.build());
1351+
.build();
1352+
ctorBodyExprs.add(unaryMethodSettingsBuildersAssignExpr);
13491353

13501354
ctorBodyExprs.add(
13511355
MethodInvocationExpr.builder()
@@ -1364,6 +1368,50 @@ private static List<MethodDefinition> createNestedClassConstructorMethods(
13641368
.collect(Collectors.toList()))
13651369
.build());
13661370

1371+
// Third constructor that takes a ServivceStubSettings.
1372+
TypeNode outerSettingsType = types.get(getThisClassName(service.name()));
1373+
VariableExpr settingsVarExpr =
1374+
VariableExpr.withVariable(
1375+
Variable.builder().setType(outerSettingsType).setName("settings").build());
1376+
ctorBodyExprs = new ArrayList<>();
1377+
ctorBodyExprs.add(
1378+
ReferenceConstructorExpr.superBuilder()
1379+
.setType(builderType)
1380+
.setArguments(settingsVarExpr)
1381+
.build());
1382+
// TODO(cleanup): Technically this should actually use the outer class's <method>Settings
1383+
// members to avoid decoupling variable names.
1384+
ctorBodyExprs.addAll(
1385+
nestedMethodSettingsMemberVarExprs.values().stream()
1386+
.map(
1387+
v ->
1388+
AssignmentExpr.builder()
1389+
.setVariableExpr(v)
1390+
.setValueExpr(
1391+
MethodInvocationExpr.builder()
1392+
.setExprReferenceExpr(
1393+
VariableExpr.builder()
1394+
.setExprReferenceExpr(settingsVarExpr)
1395+
.setVariable(v.variable())
1396+
.build())
1397+
.setMethodName("toBuilder")
1398+
.setReturnType(v.type())
1399+
.build())
1400+
.build())
1401+
.collect(Collectors.toList()));
1402+
ctorBodyExprs.add(unaryMethodSettingsBuildersAssignExpr);
1403+
1404+
ctorMethods.add(
1405+
MethodDefinition.constructorBuilder()
1406+
.setScope(ScopeNode.PROTECTED)
1407+
.setReturnType(builderType)
1408+
.setArguments(settingsVarExpr.toBuilder().setIsDecl(true).build())
1409+
.setBody(
1410+
ctorBodyExprs.stream()
1411+
.map(e -> ExprStatement.withExpr(e))
1412+
.collect(Collectors.toList()))
1413+
.build());
1414+
13671415
return ctorMethods;
13681416
}
13691417

src/test/java/com/google/api/generator/gapic/composer/ServiceStubSettingsClassComposerTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,22 @@ public void generateServiceClasses() {
422422
+ " initDefaults(this);\n"
423423
+ " }\n"
424424
+ "\n"
425+
+ " protected Builder(EchoStubSettings settings) {\n"
426+
+ " super(settings);\n"
427+
+ " echoSettings = settings.echoSettings.toBuilder();\n"
428+
+ " expandSettings = settings.expandSettings.toBuilder();\n"
429+
+ " collectSettings = settings.collectSettings.toBuilder();\n"
430+
+ " chatSettings = settings.chatSettings.toBuilder();\n"
431+
+ " chatAgainSettings = settings.chatAgainSettings.toBuilder();\n"
432+
+ " pagedExpandSettings = settings.pagedExpandSettings.toBuilder();\n"
433+
+ " waitSettings = settings.waitSettings.toBuilder();\n"
434+
+ " waitOperationSettings = settings.waitOperationSettings.toBuilder();\n"
435+
+ " blockSettings = settings.blockSettings.toBuilder();\n"
436+
+ " unaryMethodSettingsBuilders =\n"
437+
+ " ImmutableList.<UnaryCallSettings.Builder<?, ?>>of(\n"
438+
+ " echoSettings, pagedExpandSettings, waitSettings, blockSettings);\n"
439+
+ " }\n"
440+
+ "\n"
425441
+ " private static Builder initDefaults(Builder builder) {\n"
426442
+ " builder\n"
427443
+ " .echoSettings()\n"

0 commit comments

Comments
 (0)