16
16
17
17
import com .google .api .gax .grpc .GrpcCallSettings ;
18
18
import com .google .api .gax .grpc .GrpcStubCallableFactory ;
19
- import com .google .api .gax .rpc .RequestParamsBuilder ;
20
19
import com .google .api .generator .engine .ast .AssignmentExpr ;
21
20
import com .google .api .generator .engine .ast .ConcreteReference ;
22
21
import com .google .api .generator .engine .ast .EnumRefExpr ;
23
22
import com .google .api .generator .engine .ast .Expr ;
24
23
import com .google .api .generator .engine .ast .ExprStatement ;
25
- import com .google .api .generator .engine .ast .IfStatement ;
26
- import com .google .api .generator .engine .ast .LambdaExpr ;
27
- import com .google .api .generator .engine .ast .LogicalOperationExpr ;
28
24
import com .google .api .generator .engine .ast .MethodInvocationExpr ;
29
- import com .google .api .generator .engine .ast .RelationalOperationExpr ;
30
25
import com .google .api .generator .engine .ast .ScopeNode ;
31
26
import com .google .api .generator .engine .ast .Statement ;
32
27
import com .google .api .generator .engine .ast .StringObjectValue ;
33
28
import com .google .api .generator .engine .ast .TypeNode ;
34
29
import com .google .api .generator .engine .ast .ValueExpr ;
35
- import com .google .api .generator .engine .ast .Variable ;
36
30
import com .google .api .generator .engine .ast .VariableExpr ;
37
31
import com .google .api .generator .gapic .composer .common .AbstractTransportServiceStubClassComposer ;
38
32
import com .google .api .generator .gapic .composer .store .TypeStore ;
39
- import com .google .api .generator .gapic .model .HttpBindings .HttpBinding ;
40
33
import com .google .api .generator .gapic .model .Message ;
41
34
import com .google .api .generator .gapic .model .Method ;
42
- import com .google .api .generator .gapic .model .RoutingHeaderRule .RoutingHeaderParam ;
43
35
import com .google .api .generator .gapic .model .Service ;
44
- import com .google .api .generator .gapic .utils .JavaStyle ;
45
- import com .google .api .pathtemplate .PathTemplate ;
46
- import com .google .common .base .Splitter ;
47
- import com .google .common .collect .ImmutableList ;
48
- import com .google .common .collect .ImmutableMap ;
49
36
import com .google .longrunning .stub .GrpcOperationsStub ;
50
37
import io .grpc .MethodDescriptor ;
51
38
import io .grpc .protobuf .ProtoUtils ;
52
- import java .util .ArrayList ;
53
39
import java .util .Arrays ;
54
40
import java .util .HashSet ;
55
41
import java .util .List ;
@@ -200,46 +186,6 @@ protected EnumRefExpr getMethodDescriptorMethodTypeExpr(Method protoMethod) {
200
186
.build ();
201
187
}
202
188
203
- @ Override
204
- protected Expr createTransportSettingsInitExpr (
205
- Method method ,
206
- VariableExpr transportSettingsVarExpr ,
207
- VariableExpr methodDescriptorVarExpr ,
208
- List <Statement > classStatements ) {
209
- MethodInvocationExpr callSettingsBuilderExpr =
210
- MethodInvocationExpr .builder ()
211
- .setStaticReferenceType (getTransportContext ().transportCallSettingsType ())
212
- .setGenerics (transportSettingsVarExpr .type ().reference ().generics ())
213
- .setMethodName ("newBuilder" )
214
- .build ();
215
- callSettingsBuilderExpr =
216
- MethodInvocationExpr .builder ()
217
- .setExprReferenceExpr (callSettingsBuilderExpr )
218
- .setMethodName ("setMethodDescriptor" )
219
- .setArguments (Arrays .asList (methodDescriptorVarExpr ))
220
- .build ();
221
-
222
- if (method .shouldSetParamsExtractor ()) {
223
- callSettingsBuilderExpr =
224
- MethodInvocationExpr .builder ()
225
- .setExprReferenceExpr (callSettingsBuilderExpr )
226
- .setMethodName ("setParamsExtractor" )
227
- .setArguments (createRequestParamsExtractorClassInstance (method , classStatements ))
228
- .build ();
229
- }
230
-
231
- callSettingsBuilderExpr =
232
- MethodInvocationExpr .builder ()
233
- .setExprReferenceExpr (callSettingsBuilderExpr )
234
- .setMethodName ("build" )
235
- .setReturnType (transportSettingsVarExpr .type ())
236
- .build ();
237
- return AssignmentExpr .builder ()
238
- .setVariableExpr (transportSettingsVarExpr .toBuilder ().setIsDecl (true ).build ())
239
- .setValueExpr (callSettingsBuilderExpr )
240
- .build ();
241
- }
242
-
243
189
@ Override
244
190
protected String getProtoRpcFullMethodName (Service protoService , Method protoMethod ) {
245
191
if (protoMethod .isMixin ()) {
@@ -255,244 +201,4 @@ protected String getProtoRpcFullMethodName(Service protoService, Method protoMet
255
201
// long-term solution.
256
202
return String .format ("google.iam.v1.IAMPolicy/%s" , protoMethod .name ());
257
203
}
258
-
259
- private LambdaExpr createRequestParamsExtractorClassInstance (
260
- Method method , List <Statement > classStatements ) {
261
- List <Statement > bodyStatements = new ArrayList <>();
262
- VariableExpr requestVarExpr =
263
- VariableExpr .withVariable (
264
- Variable .builder ().setType (method .inputType ()).setName ("request" ).build ());
265
- TypeNode returnType =
266
- TypeNode .withReference (
267
- ConcreteReference .builder ()
268
- .setClazz (Map .class )
269
- .setGenerics (TypeNode .STRING .reference (), TypeNode .STRING .reference ())
270
- .build ());
271
- MethodInvocationExpr .Builder returnExpr =
272
- MethodInvocationExpr .builder ().setReturnType (returnType );
273
- // If the google.api.routing annotation is present(even with empty routing parameters),
274
- // the implicit routing headers specified in the google.api.http annotation should not be sent
275
- if (method .routingHeaderRule () == null ) {
276
- createRequestParamsExtractorBodyForHttpBindings (
277
- method , requestVarExpr , bodyStatements , returnExpr );
278
- } else {
279
- createRequestParamsExtractorBodyForRoutingHeaders (
280
- method , requestVarExpr , classStatements , bodyStatements , returnExpr );
281
- }
282
-
283
- // Overrides extract().
284
- // https://github.com/googleapis/gax-java/blob/8d45d186e36ae97b789a6f89d80ae5213a773b65/gax/src/main/java/com/google/api/gax/rpc/RequestParamsExtractor.java#L55
285
- return LambdaExpr .builder ()
286
- .setArguments (requestVarExpr .toBuilder ().setIsDecl (true ).build ())
287
- .setBody (bodyStatements )
288
- .setReturnExpr (returnExpr .build ())
289
- .build ();
290
- }
291
-
292
- private void createRequestParamsExtractorBodyForHttpBindings (
293
- Method method ,
294
- VariableExpr requestVarExpr ,
295
- List <Statement > bodyStatements ,
296
- MethodInvocationExpr .Builder returnExprBuilder ) {
297
- TypeNode paramsVarType =
298
- TypeNode .withReference (
299
- ConcreteReference .builder ()
300
- .setClazz (ImmutableMap .Builder .class )
301
- .setGenerics (TypeNode .STRING .reference (), TypeNode .STRING .reference ())
302
- .build ());
303
- VariableExpr paramsVarExpr =
304
- VariableExpr .withVariable (
305
- Variable .builder ().setName ("params" ).setType (paramsVarType ).build ());
306
-
307
- Expr paramsAssignExpr =
308
- AssignmentExpr .builder ()
309
- .setVariableExpr (paramsVarExpr .toBuilder ().setIsDecl (true ).build ())
310
- .setValueExpr (
311
- MethodInvocationExpr .builder ()
312
- .setStaticReferenceType (FIXED_TYPESTORE .get ("ImmutableMap" ))
313
- .setMethodName ("builder" )
314
- .setReturnType (paramsVarType )
315
- .build ())
316
- .build ();
317
- bodyStatements .add (ExprStatement .withExpr (paramsAssignExpr ));
318
-
319
- for (HttpBinding httpBindingFieldBinding : method .httpBindings ().pathParameters ()) {
320
- MethodInvocationExpr requestBuilderExpr =
321
- createRequestFieldGetterExpr (requestVarExpr , httpBindingFieldBinding .name ());
322
- Expr valueOfExpr =
323
- MethodInvocationExpr .builder ()
324
- .setStaticReferenceType (TypeNode .STRING )
325
- .setMethodName ("valueOf" )
326
- .setArguments (requestBuilderExpr )
327
- .build ();
328
-
329
- Expr paramsPutExpr =
330
- MethodInvocationExpr .builder ()
331
- .setExprReferenceExpr (paramsVarExpr )
332
- .setMethodName ("put" )
333
- .setArguments (
334
- ValueExpr .withValue (StringObjectValue .withValue (httpBindingFieldBinding .name ())),
335
- valueOfExpr )
336
- .build ();
337
- bodyStatements .add (ExprStatement .withExpr (paramsPutExpr ));
338
- }
339
-
340
- returnExprBuilder .setExprReferenceExpr (paramsVarExpr ).setMethodName ("build" );
341
- }
342
-
343
- private void createRequestParamsExtractorBodyForRoutingHeaders (
344
- Method method ,
345
- VariableExpr requestVarExpr ,
346
- List <Statement > classStatements ,
347
- List <Statement > bodyStatements ,
348
- MethodInvocationExpr .Builder returnExprBuilder ) {
349
- TypeNode routingHeadersBuilderType =
350
- TypeNode .withReference (
351
- ConcreteReference .builder ().setClazz (RequestParamsBuilder .class ).build ());
352
- VariableExpr routingHeadersBuilderVarExpr =
353
- VariableExpr .builder ()
354
- .setVariable (
355
- Variable .builder ().setName ("builder" ).setType (routingHeadersBuilderType ).build ())
356
- .setIsDecl (true )
357
- .build ();
358
- MethodInvocationExpr routingHeaderBuilderInvokeExpr =
359
- MethodInvocationExpr .builder ()
360
- .setStaticReferenceType (routingHeadersBuilderType )
361
- .setMethodName ("create" )
362
- .setReturnType (routingHeadersBuilderType )
363
- .build ();
364
- Expr routingHeadersBuilderInitExpr =
365
- AssignmentExpr .builder ()
366
- .setVariableExpr (routingHeadersBuilderVarExpr )
367
- .setValueExpr (routingHeaderBuilderInvokeExpr )
368
- .build ();
369
- bodyStatements .add (ExprStatement .withExpr (routingHeadersBuilderInitExpr ));
370
- List <RoutingHeaderParam > routingHeaderParams = method .routingHeaderRule ().routingHeaderParams ();
371
- VariableExpr routingHeadersBuilderVarNonDeclExpr =
372
- VariableExpr .builder ()
373
- .setVariable (
374
- Variable .builder ().setName ("builder" ).setType (routingHeadersBuilderType ).build ())
375
- .build ();
376
- for (int i = 0 ; i < routingHeaderParams .size (); i ++) {
377
- RoutingHeaderParam routingHeaderParam = routingHeaderParams .get (i );
378
- MethodInvocationExpr requestFieldGetterExpr =
379
- createRequestFieldGetterExpr (requestVarExpr , routingHeaderParam .fieldName ());
380
- Expr routingHeaderKeyExpr =
381
- ValueExpr .withValue (StringObjectValue .withValue (routingHeaderParam .key ()));
382
- String pathTemplateName =
383
- String .format ("%s_%s_PATH_TEMPLATE" , JavaStyle .toUpperSnakeCase (method .name ()), i );
384
- TypeNode pathTemplateType =
385
- TypeNode .withReference (ConcreteReference .withClazz (PathTemplate .class ));
386
- Variable pathTemplateVar =
387
- Variable .builder ().setType (pathTemplateType ).setName (pathTemplateName ).build ();
388
- Expr routingHeaderPatternExpr = VariableExpr .withVariable (pathTemplateVar );
389
- Statement pathTemplateClassVar =
390
- createPathTemplateClassStatement (routingHeaderParam , pathTemplateType , pathTemplateVar );
391
- classStatements .add (pathTemplateClassVar );
392
- MethodInvocationExpr addParamMethodExpr =
393
- MethodInvocationExpr .builder ()
394
- .setExprReferenceExpr (routingHeadersBuilderVarNonDeclExpr )
395
- .setMethodName ("add" )
396
- .setArguments (requestFieldGetterExpr , routingHeaderKeyExpr , routingHeaderPatternExpr )
397
- .build ();
398
-
399
- ExprStatement addParamStatement = ExprStatement .withExpr (addParamMethodExpr );
400
- // No need to add null check if there is no nested fields
401
- if (routingHeaderParam .getDescendantFieldNames ().size () == 1 ) {
402
- bodyStatements .add (addParamStatement );
403
- } else {
404
- IfStatement ifStatement =
405
- IfStatement .builder ()
406
- .setConditionExpr (
407
- fieldValuesNotNullConditionExpr (
408
- requestVarExpr , routingHeaderParam .getDescendantFieldNames ()))
409
- .setBody (ImmutableList .of (addParamStatement ))
410
- .build ();
411
- bodyStatements .add (ifStatement );
412
- }
413
- }
414
- returnExprBuilder
415
- .setExprReferenceExpr (routingHeadersBuilderVarNonDeclExpr )
416
- .setMethodName ("build" );
417
- }
418
-
419
- private Statement createPathTemplateClassStatement (
420
- RoutingHeaderParam routingHeaderParam , TypeNode pathTemplateType , Variable pathTemplateVar ) {
421
- VariableExpr pathTemplateVarExpr =
422
- VariableExpr .builder ()
423
- .setVariable (pathTemplateVar )
424
- .setIsDecl (true )
425
- .setIsStatic (true )
426
- .setIsFinal (true )
427
- .setScope (ScopeNode .PRIVATE )
428
- .build ();
429
- ValueExpr valueExpr =
430
- ValueExpr .withValue (StringObjectValue .withValue (routingHeaderParam .pattern ()));
431
- Expr pathTemplateExpr =
432
- AssignmentExpr .builder ()
433
- .setVariableExpr (pathTemplateVarExpr )
434
- .setValueExpr (
435
- MethodInvocationExpr .builder ()
436
- .setStaticReferenceType (pathTemplateType )
437
- .setMethodName ("create" )
438
- .setArguments (valueExpr )
439
- .setReturnType (pathTemplateType )
440
- .build ())
441
- .build ();
442
- return ExprStatement .withExpr (pathTemplateExpr );
443
- }
444
-
445
- private Expr fieldValuesNotNullConditionExpr (
446
- VariableExpr requestVarExpr , List <String > fieldNames ) {
447
- MethodInvocationExpr .Builder requestFieldGetterExprBuilder =
448
- MethodInvocationExpr .builder ().setExprReferenceExpr (requestVarExpr );
449
- Expr fieldValuesNotNullExpr = null ;
450
- for (int i = 0 ; i < fieldNames .size () - 1 ; i ++) {
451
- String currFieldName = fieldNames .get (i );
452
- String bindingFieldMethodName =
453
- String .format ("get%s" , JavaStyle .toUpperCamelCase (currFieldName ));
454
- requestFieldGetterExprBuilder =
455
- requestFieldGetterExprBuilder .setMethodName (bindingFieldMethodName );
456
- // set return type of each method invocation to String just to pass the validation for
457
- // RelationalOperationExpr that both side of relational operation needs to be a valid equality
458
- // type
459
- MethodInvocationExpr requestGetterExpr =
460
- requestFieldGetterExprBuilder .setReturnType (TypeNode .STRING ).build ();
461
- Expr currentValueNotNullExpr =
462
- RelationalOperationExpr .notEqualToWithExprs (
463
- requestGetterExpr , ValueExpr .createNullExpr ());
464
- if (fieldValuesNotNullExpr == null ) {
465
- fieldValuesNotNullExpr = currentValueNotNullExpr ;
466
- } else {
467
- fieldValuesNotNullExpr =
468
- LogicalOperationExpr .logicalAndWithExprs (
469
- fieldValuesNotNullExpr , currentValueNotNullExpr );
470
- }
471
- requestFieldGetterExprBuilder =
472
- MethodInvocationExpr .builder ().setExprReferenceExpr (requestGetterExpr );
473
- }
474
- return fieldValuesNotNullExpr ;
475
- }
476
-
477
- private MethodInvocationExpr createRequestFieldGetterExpr (
478
- VariableExpr requestVarExpr , String fieldName ) {
479
- MethodInvocationExpr .Builder requestFieldGetterExprBuilder =
480
- MethodInvocationExpr .builder ().setExprReferenceExpr (requestVarExpr );
481
- List <String > descendantFields = Splitter .on ("." ).splitToList (fieldName );
482
- // Handle foo.bar cases by descending into the subfields.
483
- // e.g. foo.bar -> request.getFoo().getBar()
484
- for (int i = 0 ; i < descendantFields .size (); i ++) {
485
- String currFieldName = descendantFields .get (i );
486
- String bindingFieldMethodName =
487
- String .format ("get%s" , JavaStyle .toUpperCamelCase (currFieldName ));
488
- requestFieldGetterExprBuilder =
489
- requestFieldGetterExprBuilder .setMethodName (bindingFieldMethodName );
490
- if (i < descendantFields .size () - 1 ) {
491
- requestFieldGetterExprBuilder =
492
- MethodInvocationExpr .builder ()
493
- .setExprReferenceExpr (requestFieldGetterExprBuilder .build ());
494
- }
495
- }
496
- return requestFieldGetterExprBuilder .build ();
497
- }
498
204
}
0 commit comments