36
36
import com .google .api .generator .gapic .model .MethodArgument ;
37
37
import com .google .api .generator .gapic .model .ResourceName ;
38
38
import com .google .api .generator .gapic .utils .JavaStyle ;
39
- import com .google .common .annotations .VisibleForTesting ;
40
39
import com .google .common .base .Preconditions ;
40
+ import java .util .ArrayList ;
41
41
import java .util .Arrays ;
42
42
import java .util .List ;
43
43
import java .util .Map ;
@@ -192,121 +192,166 @@ public static String composeRpcMethodHeaderSampleCode(
192
192
List <MethodArgument > arguments ,
193
193
Map <String , ResourceName > resourceNames ,
194
194
Map <String , Message > messageTypes ) {
195
- // TODO(summerji): Add other types RPC methods' sample code.
195
+ VariableExpr clientVarExpr =
196
+ VariableExpr .withVariable (
197
+ Variable .builder ()
198
+ .setName (JavaStyle .toLowerCamelCase (clientType .reference ().name ()))
199
+ .setType (clientType )
200
+ .build ());
201
+
202
+ // Assign method's arguments variable with the default values.
203
+ List <VariableExpr > rpcMethodArgVarExprs = createRpcMethodArgumentVariableExprs (arguments );
204
+ List <Expr > rpcMethodArgDefaultValueExprs =
205
+ createRpcMethodArgumentDefaultValueExprs (arguments , resourceNames );
206
+ List <Expr > rpcMethodArgAssignmentExprs =
207
+ createAssignmentsForVarExprsWithValueExprs (
208
+ rpcMethodArgVarExprs , rpcMethodArgDefaultValueExprs );
209
+
210
+ List <Expr > bodyExprs = new ArrayList <>();
211
+ bodyExprs .addAll (rpcMethodArgAssignmentExprs );
212
+
213
+ List <Statement > bodyStatements = new ArrayList <>();
196
214
if (method .isPaged ()) {
197
- // Find the repeated field.
198
- Message methodOutputMessage = messageTypes .get (method .outputType ().reference ().simpleName ());
199
- Field repeatedPagedResultsField = methodOutputMessage .findAndUnwrapFirstRepeatedField ();
200
- Preconditions .checkNotNull (
201
- repeatedPagedResultsField ,
202
- String .format (
203
- "No repeated field found on message %s for method %s" ,
204
- methodOutputMessage .name (), method .name ()));
205
-
206
- TypeNode repeatedResponseType = repeatedPagedResultsField .type ();
207
- return SampleCodeWriter .write (
208
- composeUnaryPagedRpcMethodSampleCode (
209
- method , clientType , repeatedResponseType , arguments , resourceNames ));
210
- }
211
- if (method .hasLro ()) {
212
- return SampleCodeWriter .write (
213
- composeUnaryLroRpcMethodSampleCode (method , clientType , arguments , resourceNames ));
215
+ bodyStatements .addAll (
216
+ composeUnaryPagedRpcMethodSampleCodeBodyStatements (
217
+ method , clientVarExpr , rpcMethodArgVarExprs , bodyExprs , messageTypes ));
218
+ } else if (method .hasLro ()) {
219
+ bodyStatements .addAll (
220
+ composeUnaryLroRpcMethodSampleCodeBodyStatements (
221
+ method , clientVarExpr , rpcMethodArgVarExprs , bodyExprs ));
222
+ } else {
223
+ bodyStatements .addAll (
224
+ composeUnaryRpcMethodSampleCodeBodyStatements (
225
+ method , clientVarExpr , rpcMethodArgVarExprs , bodyExprs ));
214
226
}
227
+
215
228
return SampleCodeWriter .write (
216
- composeUnaryRpcMethodSampleCode (method , clientType , arguments , resourceNames ));
229
+ TryCatchStatement .builder ()
230
+ .setTryResourceExpr (assignClientVariableWithCreateMethodExpr (clientVarExpr ))
231
+ .setTryBody (bodyStatements )
232
+ .setIsSampleCode (true )
233
+ .build ());
217
234
}
218
235
219
- @ VisibleForTesting
220
- static TryCatchStatement composeUnaryRpcMethodSampleCode (
236
+ public static String composeRpcDefaultMethodHeaderSampleCode (
221
237
Method method ,
222
238
TypeNode clientType ,
223
- List < MethodArgument > arguments ,
224
- Map <String , ResourceName > resourceNames ) {
239
+ Map < String , ResourceName > resourceNames ,
240
+ Map <String , Message > messageTypes ) {
225
241
VariableExpr clientVarExpr =
226
242
VariableExpr .withVariable (
227
243
Variable .builder ()
228
244
.setName (JavaStyle .toLowerCamelCase (clientType .reference ().name ()))
229
245
.setType (clientType )
230
246
.build ());
231
- List <VariableExpr > rpcMethodArgVarExprs = createRpcMethodArgumentVariableExprs (arguments );
232
- List <Expr > rpcMethodArgDefaultValueExprs =
233
- createRpcMethodArgumentDefaultValueExprs (arguments , resourceNames );
234
- List <Expr > bodyExprs =
235
- createAssignmentsForVarExprsWithValueExprs (
236
- rpcMethodArgVarExprs , rpcMethodArgDefaultValueExprs );
247
+
248
+ // Create request variable expression and assign with its default value.
249
+ VariableExpr requestVarExpr =
250
+ VariableExpr .withVariable (
251
+ Variable .builder ().setName ("request" ).setType (method .inputType ()).build ());
252
+ List <VariableExpr > rpcMethodArgVarExprs = Arrays .asList (requestVarExpr );
253
+ Message requestMessage = messageTypes .get (method .inputType ().reference ().simpleName ());
254
+ Preconditions .checkNotNull (requestMessage );
255
+ Expr requestBuilderExpr =
256
+ DefaultValueComposer .createSimpleMessageBuilderExpr (
257
+ requestMessage , resourceNames , messageTypes );
258
+ AssignmentExpr requestAssignmentExpr =
259
+ AssignmentExpr .builder ()
260
+ .setVariableExpr (requestVarExpr .toBuilder ().setIsDecl (true ).build ())
261
+ .setValueExpr (requestBuilderExpr )
262
+ .build ();
263
+
264
+ List <Expr > bodyExprs = new ArrayList <>();
265
+ bodyExprs .add (requestAssignmentExpr );
266
+
267
+ List <Statement > bodyStatements = new ArrayList <>();
268
+ if (method .isPaged ()) {
269
+ bodyStatements .addAll (
270
+ composeUnaryPagedRpcMethodSampleCodeBodyStatements (
271
+ method , clientVarExpr , rpcMethodArgVarExprs , bodyExprs , messageTypes ));
272
+ } else if (method .hasLro ()) {
273
+ bodyStatements .addAll (
274
+ composeUnaryLroRpcMethodSampleCodeBodyStatements (
275
+ method , clientVarExpr , rpcMethodArgVarExprs , bodyExprs ));
276
+ } else {
277
+ bodyStatements .addAll (
278
+ composeUnaryRpcMethodSampleCodeBodyStatements (
279
+ method , clientVarExpr , rpcMethodArgVarExprs , bodyExprs ));
280
+ }
281
+
282
+ return SampleCodeWriter .write (
283
+ TryCatchStatement .builder ()
284
+ .setTryResourceExpr (assignClientVariableWithCreateMethodExpr (clientVarExpr ))
285
+ .setTryBody (bodyStatements )
286
+ .setIsSampleCode (true )
287
+ .build ());
288
+ }
289
+
290
+ private static List <Statement > composeUnaryRpcMethodSampleCodeBodyStatements (
291
+ Method method ,
292
+ VariableExpr clientVarExpr ,
293
+ List <VariableExpr > rpcMethodArgVarExprs ,
294
+ List <Expr > bodyExprs ) {
295
+
237
296
// Invoke current method based on return type.
238
297
// e.g. if return void, echoClient.echo(..); or,
239
298
// e.g. if return other type, EchoResponse response = echoClient.echo(...);
240
299
boolean returnsVoid = isProtoEmptyType (method .outputType ());
300
+ MethodInvocationExpr clientRpcMethodInvocationExpr =
301
+ MethodInvocationExpr .builder ()
302
+ .setExprReferenceExpr (clientVarExpr )
303
+ .setMethodName (JavaStyle .toLowerCamelCase (method .name ()))
304
+ .setArguments (
305
+ rpcMethodArgVarExprs .stream ().map (e -> (Expr ) e ).collect (Collectors .toList ()))
306
+ .setReturnType (method .outputType ())
307
+ .build ();
241
308
if (returnsVoid ) {
242
- bodyExprs .add (
243
- MethodInvocationExpr .builder ()
244
- .setExprReferenceExpr (clientVarExpr )
245
- .setMethodName (JavaStyle .toLowerCamelCase (method .name ()))
246
- .setArguments (
247
- rpcMethodArgVarExprs .stream ().map (e -> (Expr ) e ).collect (Collectors .toList ()))
248
- .setReturnType (clientType )
249
- .build ());
309
+ bodyExprs .add (clientRpcMethodInvocationExpr );
250
310
} else {
251
311
VariableExpr responseVarExpr =
252
312
VariableExpr .withVariable (
253
313
Variable .builder ().setName ("response" ).setType (method .outputType ()).build ());
254
- MethodInvocationExpr clientMethodInvocationExpr =
255
- MethodInvocationExpr .builder ()
256
- .setExprReferenceExpr (clientVarExpr )
257
- .setMethodName (JavaStyle .toLowerCamelCase (method .name ()))
258
- .setArguments (
259
- rpcMethodArgVarExprs .stream ().map (e -> (Expr ) e ).collect (Collectors .toList ()))
260
- .setReturnType (responseVarExpr .variable ().type ())
261
- .build ();
262
314
bodyExprs .add (
263
315
AssignmentExpr .builder ()
264
316
.setVariableExpr (responseVarExpr .toBuilder ().setIsDecl (true ).build ())
265
- .setValueExpr (clientMethodInvocationExpr )
317
+ .setValueExpr (clientRpcMethodInvocationExpr )
266
318
.build ());
267
319
}
268
320
269
- return TryCatchStatement .builder ()
270
- .setTryResourceExpr (assignClientVariableWithCreateMethodExpr (clientVarExpr ))
271
- .setTryBody (
272
- bodyExprs .stream ().map (e -> ExprStatement .withExpr (e )).collect (Collectors .toList ()))
273
- .setIsSampleCode (true )
274
- .build ();
321
+ return bodyExprs .stream ().map (e -> ExprStatement .withExpr (e )).collect (Collectors .toList ());
275
322
}
276
323
277
- @ VisibleForTesting
278
- static TryCatchStatement composeUnaryPagedRpcMethodSampleCode (
324
+ private static List <Statement > composeUnaryPagedRpcMethodSampleCodeBodyStatements (
279
325
Method method ,
280
- TypeNode clientType ,
281
- TypeNode repeatedResponseType ,
282
- List <MethodArgument > arguments ,
283
- Map <String , ResourceName > resourceNames ) {
284
- VariableExpr clientVarExpr =
285
- VariableExpr .withVariable (
286
- Variable .builder ()
287
- .setName (JavaStyle .toLowerCamelCase (clientType .reference ().name ()))
288
- .setType (clientType )
289
- .build ());
290
- List <VariableExpr > rpcMethodArgVarExprs = createRpcMethodArgumentVariableExprs (arguments );
291
- List <Expr > rpcMethodArgDefaultValueExprs =
292
- createRpcMethodArgumentDefaultValueExprs (arguments , resourceNames );
293
- List <Expr > bodyExprs =
294
- createAssignmentsForVarExprsWithValueExprs (
295
- rpcMethodArgVarExprs , rpcMethodArgDefaultValueExprs );
326
+ VariableExpr clientVarExpr ,
327
+ List <VariableExpr > rpcMethodArgVarExprs ,
328
+ List <Expr > bodyExprs ,
329
+ Map <String , Message > messageTypes ) {
330
+
331
+ // Find the repeated field.
332
+ Message methodOutputMessage = messageTypes .get (method .outputType ().reference ().simpleName ());
333
+ Field repeatedPagedResultsField = methodOutputMessage .findAndUnwrapFirstRepeatedField ();
334
+ Preconditions .checkNotNull (
335
+ repeatedPagedResultsField ,
336
+ String .format (
337
+ "No repeated field found on message %s for method %s" ,
338
+ methodOutputMessage .name (), method .name ()));
339
+ TypeNode repeatedResponseType = repeatedPagedResultsField .type ();
340
+
296
341
// For loop paged response item on iterateAll method.
297
342
// e.g. for (LogEntry element : loggingServiceV2Client.ListLogs(parent).iterateAll()) {
298
343
// //doThingsWith(element);
299
344
// }
300
- MethodInvocationExpr clientMethodExpr =
345
+ MethodInvocationExpr clientMethodIterateAllExpr =
301
346
MethodInvocationExpr .builder ()
302
347
.setExprReferenceExpr (clientVarExpr )
303
348
.setMethodName (JavaStyle .toLowerCamelCase (method .name ()))
304
349
.setArguments (
305
350
rpcMethodArgVarExprs .stream ().map (e -> (Expr ) e ).collect (Collectors .toList ()))
306
351
.build ();
307
- Expr clientMethodIteratorAllExpr =
352
+ clientMethodIterateAllExpr =
308
353
MethodInvocationExpr .builder ()
309
- .setExprReferenceExpr (clientMethodExpr )
354
+ .setExprReferenceExpr (clientMethodIterateAllExpr )
310
355
.setMethodName ("iterateAll" )
311
356
.setReturnType (repeatedResponseType )
312
357
.build ();
@@ -318,7 +363,7 @@ static TryCatchStatement composeUnaryPagedRpcMethodSampleCode(
318
363
Variable .builder ().setName ("element" ).setType (repeatedResponseType ).build ())
319
364
.setIsDecl (true )
320
365
.build ())
321
- .setCollectionExpr (clientMethodIteratorAllExpr )
366
+ .setCollectionExpr (clientMethodIterateAllExpr )
322
367
.setBody (
323
368
Arrays .asList (
324
369
CommentStatement .withComment (
@@ -327,52 +372,36 @@ static TryCatchStatement composeUnaryPagedRpcMethodSampleCode(
327
372
328
373
List <Statement > bodyStatements =
329
374
bodyExprs .stream ().map (e -> ExprStatement .withExpr (e )).collect (Collectors .toList ());
375
+ bodyExprs .clear ();
330
376
bodyStatements .add (loopIteratorStatement );
331
377
332
- return TryCatchStatement .builder ()
333
- .setTryResourceExpr (assignClientVariableWithCreateMethodExpr (clientVarExpr ))
334
- .setTryBody (bodyStatements )
335
- .setIsSampleCode (true )
336
- .build ();
378
+ return bodyStatements ;
337
379
}
338
380
339
- @ VisibleForTesting
340
- static TryCatchStatement composeUnaryLroRpcMethodSampleCode (
381
+ private static List <Statement > composeUnaryLroRpcMethodSampleCodeBodyStatements (
341
382
Method method ,
342
- TypeNode clientType ,
343
- List <MethodArgument > arguments ,
344
- Map <String , ResourceName > resourceNames ) {
345
- VariableExpr clientVarExpr =
346
- VariableExpr .withVariable (
347
- Variable .builder ()
348
- .setName (JavaStyle .toLowerCamelCase (clientType .reference ().name ()))
349
- .setType (clientType )
350
- .build ());
351
- List <VariableExpr > rpcMethodArgVarExprs = createRpcMethodArgumentVariableExprs (arguments );
352
- List <Expr > rpcMethodArgDefaultValueExprs =
353
- createRpcMethodArgumentDefaultValueExprs (arguments , resourceNames );
354
- List <Expr > bodyExprs =
355
- createAssignmentsForVarExprsWithValueExprs (
356
- rpcMethodArgVarExprs , rpcMethodArgDefaultValueExprs );
383
+ VariableExpr clientVarExpr ,
384
+ List <VariableExpr > rpcMethodArgVarExprs ,
385
+ List <Expr > bodyExprs ) {
357
386
// Assign response variable with invoking client's lro method.
358
387
// e.g. if return void, echoClient.waitAsync(ttl).get(); or,
359
388
// e.g. if return other type, WaitResponse response = echoClient.waitAsync(ttl).get();
360
- Expr invokeLroMethodExpr =
389
+ Expr invokeLroGetMethodExpr =
361
390
MethodInvocationExpr .builder ()
362
391
.setExprReferenceExpr (clientVarExpr )
363
392
.setMethodName (String .format ("%sAsync" , JavaStyle .toLowerCamelCase (method .name ())))
364
393
.setArguments (
365
394
rpcMethodArgVarExprs .stream ().map (e -> (Expr ) e ).collect (Collectors .toList ()))
366
395
.build ();
367
- Expr getResponseMethodExpr =
396
+ invokeLroGetMethodExpr =
368
397
MethodInvocationExpr .builder ()
369
- .setExprReferenceExpr (invokeLroMethodExpr )
398
+ .setExprReferenceExpr (invokeLroGetMethodExpr )
370
399
.setMethodName ("get" )
371
400
.setReturnType (method .lro ().responseType ())
372
401
.build ();
373
402
boolean returnsVoid = isProtoEmptyType (method .lro ().responseType ());
374
403
if (returnsVoid ) {
375
- bodyExprs .add (getResponseMethodExpr );
404
+ bodyExprs .add (invokeLroGetMethodExpr );
376
405
} else {
377
406
VariableExpr responseVarExpr =
378
407
VariableExpr .builder ()
@@ -386,16 +415,11 @@ static TryCatchStatement composeUnaryLroRpcMethodSampleCode(
386
415
bodyExprs .add (
387
416
AssignmentExpr .builder ()
388
417
.setVariableExpr (responseVarExpr )
389
- .setValueExpr (getResponseMethodExpr )
418
+ .setValueExpr (invokeLroGetMethodExpr )
390
419
.build ());
391
420
}
392
421
393
- return TryCatchStatement .builder ()
394
- .setTryResourceExpr (assignClientVariableWithCreateMethodExpr (clientVarExpr ))
395
- .setTryBody (
396
- bodyExprs .stream ().map (e -> ExprStatement .withExpr (e )).collect (Collectors .toList ()))
397
- .setIsSampleCode (true )
398
- .build ();
422
+ return bodyExprs .stream ().map (e -> ExprStatement .withExpr (e )).collect (Collectors .toList ());
399
423
}
400
424
401
425
// ==================================Helpers===================================================//
0 commit comments