Skip to content

Commit 31ce3f0

Browse files
authored
Merge branch 'main' into feat/actionable-errors-api-tracer
2 parents 042c642 + a889654 commit 31ce3f0

File tree

61 files changed

+1299
-25
lines changed

Some content is hidden

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

61 files changed

+1299
-25
lines changed

dependencies.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ org.slf4j:slf4j-api,slf4j=2.0.17
2323

2424
# 1P Shared-Deps
2525
# These dependencies are declared: https://github.com/googleapis/sdk-platform-java/blob/main/java-shared-dependencies/first-party-dependencies/pom.xml
26-
com.google.cloud:grpc-gcp,grpc-gcp=1.9.1
26+
com.google.cloud:grpc-gcp,grpc-gcp=1.9.2
2727
com.google.oauth-client:google-oauth-client,google.oauth-client=1.39.0
2828
com.google.api-client:google-api-client,google.api-client=2.9.0
2929

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

Lines changed: 61 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,57 @@ private static Predicate<String> shouldAutoPopulate(Message methodRequestMessage
14951505
.anyMatch(field -> field.name().equals(fieldName) && field.canBeAutoPopulated());
14961506
}
14971507

1508+
/**
1509+
* The Resource Name Extractor should only be generated if the request contains a field that has
1510+
* resource reference (see {@link Field#hasResourceReference()})
1511+
*/
1512+
@Nullable
1513+
protected static LambdaExpr createResourceNameExtractorClassInstance(
1514+
Method method, ImmutableMap<String, Message> messageTypes) {
1515+
Field resourceNameField = getDestinationResourceIdField(method, messageTypes);
1516+
1517+
if (resourceNameField == null) {
1518+
return null;
1519+
}
1520+
1521+
// Expected expression: request -> request.getField()
1522+
VariableExpr requestVarExpr = createRequestVarExpr(method);
1523+
List<Statement> bodyStatements = new ArrayList<>();
1524+
Expr returnExpr =
1525+
MethodInvocationExpr.builder()
1526+
.setExprReferenceExpr(requestVarExpr)
1527+
.setMethodName(
1528+
String.format("get%s", JavaStyle.toUpperCamelCase(resourceNameField.name())))
1529+
.setReturnType(TypeNode.STRING)
1530+
.build();
1531+
1532+
return LambdaExpr.builder()
1533+
.setArguments(requestVarExpr.toBuilder().setIsDecl(true).build())
1534+
.setBody(bodyStatements)
1535+
.setReturnExpr(returnExpr)
1536+
.build();
1537+
}
1538+
1539+
// Find the first field that has resource reference in a request message
1540+
private static Field getDestinationResourceIdField(
1541+
Method method, ImmutableMap<String, Message> messageTypes) {
1542+
if (method.inputType().reference() == null
1543+
|| method.inputType().reference().fullName() == null) {
1544+
return null;
1545+
}
1546+
String methodRequestName = method.inputType().reference().fullName();
1547+
Message methodRequestMessage = messageTypes.get(methodRequestName);
1548+
if (methodRequestMessage == null) {
1549+
return null;
1550+
}
1551+
1552+
return methodRequestMessage.fields().stream()
1553+
.filter(Field::hasResourceReference)
1554+
.filter(f -> !f.isRepeated())
1555+
.findFirst()
1556+
.orElse(null);
1557+
}
1558+
14981559
protected LambdaExpr createRequestParamsExtractorClassInstance(
14991560
Method method, List<Statement> classStatements) {
15001561
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().parseResourceNameExtractorTesting();
119+
Service service = context.services().get(0);
120+
GapicClass clazz = GrpcServiceStubClassComposer.instance().generate(context, service);
121+
122+
Assert.assertGoldenClass(this.getClass(), clazz, "GrpcResourceNameExtractorStub.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 =

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ public class GrpcEchoStub extends EchoStub {
208208
GrpcCallSettings<EchoRequest, EchoResponse> echoTransportSettings =
209209
GrpcCallSettings.<EchoRequest, EchoResponse>newBuilder()
210210
.setMethodDescriptor(echoMethodDescriptor)
211+
.setResourceNameExtractor(request -> request.getName())
211212
.build();
212213
GrpcCallSettings<ExpandRequest, EchoResponse> expandTransportSettings =
213214
GrpcCallSettings.<ExpandRequest, EchoResponse>newBuilder()
@@ -216,14 +217,17 @@ public class GrpcEchoStub extends EchoStub {
216217
GrpcCallSettings<EchoRequest, EchoResponse> collectTransportSettings =
217218
GrpcCallSettings.<EchoRequest, EchoResponse>newBuilder()
218219
.setMethodDescriptor(collectMethodDescriptor)
220+
.setResourceNameExtractor(request -> request.getName())
219221
.build();
220222
GrpcCallSettings<EchoRequest, EchoResponse> chatTransportSettings =
221223
GrpcCallSettings.<EchoRequest, EchoResponse>newBuilder()
222224
.setMethodDescriptor(chatMethodDescriptor)
225+
.setResourceNameExtractor(request -> request.getName())
223226
.build();
224227
GrpcCallSettings<EchoRequest, EchoResponse> chatAgainTransportSettings =
225228
GrpcCallSettings.<EchoRequest, EchoResponse>newBuilder()
226229
.setMethodDescriptor(chatAgainMethodDescriptor)
230+
.setResourceNameExtractor(request -> request.getName())
227231
.build();
228232
GrpcCallSettings<PagedExpandRequest, PagedExpandResponse> pagedExpandTransportSettings =
229233
GrpcCallSettings.<PagedExpandRequest, PagedExpandResponse>newBuilder()
@@ -244,6 +248,7 @@ public class GrpcEchoStub extends EchoStub {
244248
GrpcCallSettings<EchoRequest, Object> collideNameTransportSettings =
245249
GrpcCallSettings.<EchoRequest, Object>newBuilder()
246250
.setMethodDescriptor(collideNameMethodDescriptor)
251+
.setResourceNameExtractor(request -> request.getName())
247252
.build();
248253
GrpcCallSettings<PagedExpandLegacyRequest, PagedExpandResponse>
249254
pagedExpandLegacyTransportSettings =

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,11 +183,13 @@ public class GrpcLoggingServiceV2Stub extends LoggingServiceV2Stub {
183183
builder.add("log_name", String.valueOf(request.getLogName()));
184184
return builder.build();
185185
})
186+
.setResourceNameExtractor(request -> request.getLogName())
186187
.build();
187188
GrpcCallSettings<WriteLogEntriesRequest, WriteLogEntriesResponse>
188189
writeLogEntriesTransportSettings =
189190
GrpcCallSettings.<WriteLogEntriesRequest, WriteLogEntriesResponse>newBuilder()
190191
.setMethodDescriptor(writeLogEntriesMethodDescriptor)
192+
.setResourceNameExtractor(request -> request.getLogName())
191193
.build();
192194
GrpcCallSettings<ListLogEntriesRequest, ListLogEntriesResponse>
193195
listLogEntriesTransportSettings =
@@ -211,6 +213,7 @@ public class GrpcLoggingServiceV2Stub extends LoggingServiceV2Stub {
211213
builder.add("parent", String.valueOf(request.getParent()));
212214
return builder.build();
213215
})
216+
.setResourceNameExtractor(request -> request.getParent())
214217
.build();
215218
GrpcCallSettings<TailLogEntriesRequest, TailLogEntriesResponse>
216219
tailLogEntriesTransportSettings =

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ public class GrpcPublisherStub extends PublisherStub {
203203
builder.add("name", String.valueOf(request.getName()));
204204
return builder.build();
205205
})
206+
.setResourceNameExtractor(request -> request.getName())
206207
.build();
207208
GrpcCallSettings<UpdateTopicRequest, Topic> updateTopicTransportSettings =
208209
GrpcCallSettings.<UpdateTopicRequest, Topic>newBuilder()
@@ -223,6 +224,7 @@ public class GrpcPublisherStub extends PublisherStub {
223224
builder.add("topic", String.valueOf(request.getTopic()));
224225
return builder.build();
225226
})
227+
.setResourceNameExtractor(request -> request.getTopic())
226228
.build();
227229
GrpcCallSettings<GetTopicRequest, Topic> getTopicTransportSettings =
228230
GrpcCallSettings.<GetTopicRequest, Topic>newBuilder()
@@ -233,6 +235,7 @@ public class GrpcPublisherStub extends PublisherStub {
233235
builder.add("topic", String.valueOf(request.getTopic()));
234236
return builder.build();
235237
})
238+
.setResourceNameExtractor(request -> request.getTopic())
236239
.build();
237240
GrpcCallSettings<ListTopicsRequest, ListTopicsResponse> listTopicsTransportSettings =
238241
GrpcCallSettings.<ListTopicsRequest, ListTopicsResponse>newBuilder()
@@ -243,6 +246,7 @@ public class GrpcPublisherStub extends PublisherStub {
243246
builder.add("project", String.valueOf(request.getProject()));
244247
return builder.build();
245248
})
249+
.setResourceNameExtractor(request -> request.getProject())
246250
.build();
247251
GrpcCallSettings<ListTopicSubscriptionsRequest, ListTopicSubscriptionsResponse>
248252
listTopicSubscriptionsTransportSettings =
@@ -255,6 +259,7 @@ public class GrpcPublisherStub extends PublisherStub {
255259
builder.add("topic", String.valueOf(request.getTopic()));
256260
return builder.build();
257261
})
262+
.setResourceNameExtractor(request -> request.getTopic())
258263
.build();
259264
GrpcCallSettings<ListTopicSnapshotsRequest, ListTopicSnapshotsResponse>
260265
listTopicSnapshotsTransportSettings =
@@ -266,6 +271,7 @@ public class GrpcPublisherStub extends PublisherStub {
266271
builder.add("topic", String.valueOf(request.getTopic()));
267272
return builder.build();
268273
})
274+
.setResourceNameExtractor(request -> request.getTopic())
269275
.build();
270276
GrpcCallSettings<DeleteTopicRequest, Empty> deleteTopicTransportSettings =
271277
GrpcCallSettings.<DeleteTopicRequest, Empty>newBuilder()
@@ -276,6 +282,7 @@ public class GrpcPublisherStub extends PublisherStub {
276282
builder.add("topic", String.valueOf(request.getTopic()));
277283
return builder.build();
278284
})
285+
.setResourceNameExtractor(request -> request.getTopic())
279286
.build();
280287
GrpcCallSettings<DetachSubscriptionRequest, DetachSubscriptionResponse>
281288
detachSubscriptionTransportSettings =
@@ -287,6 +294,7 @@ public class GrpcPublisherStub extends PublisherStub {
287294
builder.add("subscription", String.valueOf(request.getSubscription()));
288295
return builder.build();
289296
})
297+
.setResourceNameExtractor(request -> request.getSubscription())
290298
.build();
291299

292300
this.createTopicCallable =

0 commit comments

Comments
 (0)