Skip to content

Commit 09e80fe

Browse files
committed
feat: extract destination resource name and trace unary callables
1 parent 7eca195 commit 09e80fe

49 files changed

Lines changed: 11992 additions & 11 deletions

File tree

Some content is hidden

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

MODULE.bazel

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
###############################################################################
2+
# Bazel now uses Bzlmod by default to manage external dependencies.
3+
# Please consider migrating your external dependencies from WORKSPACE to MODULE.bazel.
4+
#
5+
# For more details, please check https://github.com/bazelbuild/bazel/issues/18958
6+
###############################################################################

MODULE.bazel.lock

Lines changed: 85 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,16 @@ protected Expr createTransportSettingsInitExpr(
331331
.build();
332332
}
333333

334+
LambdaExpr extractor = createResourceNameExtractorClassInstance(method, messageTypes);
335+
if (extractor != null) {
336+
callSettingsBuilderExpr =
337+
MethodInvocationExpr.builder()
338+
.setExprReferenceExpr(callSettingsBuilderExpr)
339+
.setMethodName("setResourceNameExtractor")
340+
.setArguments(extractor)
341+
.build();
342+
}
343+
334344
callSettingsBuilderExpr =
335345
MethodInvocationExpr.builder()
336346
.setExprReferenceExpr(callSettingsBuilderExpr)
@@ -1495,6 +1505,50 @@ private static Predicate<String> shouldAutoPopulate(Message methodRequestMessage
14951505
.anyMatch(field -> field.name().equals(fieldName) && field.canBeAutoPopulated());
14961506
}
14971507

1508+
@Nullable
1509+
protected static LambdaExpr createResourceNameExtractorClassInstance(
1510+
Method method, ImmutableMap<String, Message> messageTypes) {
1511+
Field resourceNameField = getDestinationResourceNameField(method, messageTypes);
1512+
1513+
if (resourceNameField == null) {
1514+
return null;
1515+
}
1516+
1517+
VariableExpr requestVarExpr = createRequestVarExpr(method);
1518+
List<Statement> bodyStatements = new ArrayList<>();
1519+
Expr returnExpr =
1520+
MethodInvocationExpr.builder()
1521+
.setExprReferenceExpr(requestVarExpr)
1522+
.setMethodName(
1523+
String.format("get%s", JavaStyle.toUpperCamelCase(resourceNameField.name())))
1524+
.setReturnType(TypeNode.STRING)
1525+
.build();
1526+
1527+
return LambdaExpr.builder()
1528+
.setArguments(requestVarExpr.toBuilder().setIsDecl(true).build())
1529+
.setBody(bodyStatements)
1530+
.setReturnExpr(returnExpr)
1531+
.build();
1532+
}
1533+
1534+
private static Field getDestinationResourceNameField(
1535+
Method method, ImmutableMap<String, Message> messageTypes) {
1536+
if (method.inputType().reference() == null
1537+
|| method.inputType().reference().fullName() == null) {
1538+
return null;
1539+
}
1540+
String methodRequestName = method.inputType().reference().fullName();
1541+
Message methodRequestMessage = messageTypes.get(methodRequestName);
1542+
if (methodRequestMessage == null) {
1543+
return null;
1544+
}
1545+
1546+
return methodRequestMessage.fields().stream()
1547+
.filter(f -> f.resourceReference() != null && !f.isRepeated())
1548+
.findFirst()
1549+
.orElse(null);
1550+
}
1551+
14981552
protected LambdaExpr createRequestParamsExtractorClassInstance(
14991553
Method method, List<Statement> classStatements) {
15001554
List<Statement> bodyStatements = new ArrayList<>();

gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/grpc/GrpcServiceStubClassComposerTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,4 +112,14 @@ void generateGrpcServiceStubClass_bigQuery() {
112112
Assert.assertGoldenClass(this.getClass(), clazz, "GrpcBigQueryJobServiceStub.golden");
113113
Assert.assertEmptySamples(clazz.samples());
114114
}
115+
116+
@Test
117+
void generateGrpcServiceStubClass_clientResourceNameExtractor() {
118+
GapicContext context = GrpcTestProtoLoader.instance().parseClientResourceNameExtractorTesting();
119+
Service service = context.services().get(0);
120+
GapicClass clazz = GrpcServiceStubClassComposer.instance().generate(context, service);
121+
122+
Assert.assertGoldenClass(this.getClass(), clazz, "GrpcClientResourceNameExtractorStub.golden");
123+
Assert.assertEmptySamples(clazz.samples());
124+
}
115125
}

gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/grpc/goldens/GrpcCallableNameTypeStub.golden

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ public class GrpcCallableNameTypeServiceStub extends CallableNameTypeServiceStub
104104
builder.add("name", String.valueOf(request.getName()));
105105
return builder.build();
106106
})
107+
.setResourceNameExtractor(request -> request.getName())
107108
.build();
108109
GrpcCallSettings<GetApiOperationRequest, ApiOperation> apiPagedTransportSettings =
109110
GrpcCallSettings.<GetApiOperationRequest, ApiOperation>newBuilder()
@@ -114,6 +115,7 @@ public class GrpcCallableNameTypeServiceStub extends CallableNameTypeServiceStub
114115
builder.add("name", String.valueOf(request.getName()));
115116
return builder.build();
116117
})
118+
.setResourceNameExtractor(request -> request.getName())
117119
.build();
118120

119121
this.getApiOperationCallable =

0 commit comments

Comments
 (0)