@@ -462,12 +462,12 @@ private static List<MethodDefinition> createServiceMethods(
462462 Service service , Map <String , Message > messageTypes , Map <String , TypeNode > types ) {
463463 List <MethodDefinition > javaMethods = new ArrayList <>();
464464 for (Method method : service .methods ()) {
465- if (method .stream ().equals (Stream .NONE ) && ! method . hasLro () ) {
465+ if (method .stream ().equals (Stream .NONE )) {
466466 javaMethods .addAll (createMethodVariants (method , messageTypes , types ));
467+ javaMethods .add (createMethodDefaultMethod (method , types ));
467468 }
468469 if (method .hasLro ()) {
469- javaMethods .add (createLroAsyncMethod (service .name (), method , types ));
470- javaMethods .add (createLroCallable (service .name (), method , types ));
470+ javaMethods .add (createLroCallableMethod (service .name (), method , types ));
471471 }
472472 if (method .isPaged ()) {
473473 javaMethods .add (createPagedCallableMethod (service .name (), method , types ));
@@ -486,6 +486,18 @@ private static List<MethodDefinition> createMethodVariants(
486486 method .isPaged ()
487487 ? types .get (String .format (PAGED_RESPONSE_TYPE_NAME_PATTERN , method .name ()))
488488 : method .outputType ();
489+ if (method .hasLro ()) {
490+ LongrunningOperation lro = method .lro ();
491+ methodOutputType =
492+ TypeNode .withReference (
493+ types
494+ .get ("OperationFuture" )
495+ .reference ()
496+ .copyAndSetGenerics (
497+ Arrays .asList (
498+ lro .responseType ().reference (), lro .metadataType ().reference ())));
499+ }
500+
489501 String methodInputTypeName = methodInputType .reference ().name ();
490502 Reference listRef = ConcreteReference .withClazz (List .class );
491503 Reference mapRef = ConcreteReference .withClazz (Map .class );
@@ -603,7 +615,7 @@ private static List<MethodDefinition> createMethodVariants(
603615 // Return expression.
604616 MethodInvocationExpr returnExpr =
605617 MethodInvocationExpr .builder ()
606- .setMethodName (methodName )
618+ .setMethodName (String . format ( method . hasLro () ? "%sAsync" : "%s" , methodName ) )
607619 .setArguments (Arrays .asList (requestVarExpr .toBuilder ().setIsDecl (false ).build ()))
608620 .setReturnType (methodOutputType )
609621 .build ();
@@ -615,14 +627,37 @@ private static List<MethodDefinition> createMethodVariants(
615627 .setScope (ScopeNode .PUBLIC )
616628 .setIsFinal (true )
617629 .setReturnType (methodOutputType )
618- .setName (methodName )
630+ .setName (String . format ( method . hasLro () ? "%sAsync" : "%s" , methodName ) )
619631 .setArguments (arguments )
620632 .setBody (statements )
621633 .setReturnExpr (returnExpr )
622634 .build ());
623635 }
624636
625- // Finally, construct the method that accepts a request proto.
637+ return javaMethods ;
638+ }
639+
640+ private static MethodDefinition createMethodDefaultMethod (
641+ Method method , Map <String , TypeNode > types ) {
642+ String methodName = JavaStyle .toLowerCamelCase (method .name ());
643+ TypeNode methodInputType = method .inputType ();
644+ TypeNode methodOutputType =
645+ method .isPaged ()
646+ ? types .get (String .format (PAGED_RESPONSE_TYPE_NAME_PATTERN , method .name ()))
647+ : method .outputType ();
648+ if (method .hasLro ()) {
649+ LongrunningOperation lro = method .lro ();
650+ methodOutputType =
651+ TypeNode .withReference (
652+ types
653+ .get ("OperationFuture" )
654+ .reference ()
655+ .copyAndSetGenerics (
656+ Arrays .asList (
657+ lro .responseType ().reference (), lro .metadataType ().reference ())));
658+ }
659+
660+ // Construct the method that accepts a request proto.
626661 VariableExpr requestArgVarExpr =
627662 VariableExpr .builder ()
628663 .setVariable (Variable .builder ().setName ("request" ).setType (methodInputType ).build ())
@@ -632,79 +667,32 @@ private static List<MethodDefinition> createMethodVariants(
632667 method .isPaged ()
633668 ? String .format (PAGED_CALLABLE_NAME_PATTERN , methodName )
634669 : String .format (CALLABLE_NAME_PATTERN , methodName );
670+ if (method .hasLro ()) {
671+ callableMethodName = String .format (OPERATION_CALLABLE_NAME_PATTERN , methodName );
672+ }
673+
635674 MethodInvocationExpr methodReturnExpr =
636675 MethodInvocationExpr .builder ().setMethodName (callableMethodName ).build ();
637676 methodReturnExpr =
638677 MethodInvocationExpr .builder ()
639- .setMethodName ("call" )
678+ .setMethodName (method . hasLro () ? "futureCall" : "call" )
640679 .setArguments (Arrays .asList (requestArgVarExpr .toBuilder ().setIsDecl (false ).build ()))
641680 .setExprReferenceExpr (methodReturnExpr )
642681 .setReturnType (methodOutputType )
643682 .build ();
644- javaMethods .add (
645- MethodDefinition .builder ()
646- .setHeaderCommentStatements (
647- ServiceClientCommentComposer .createRpcMethodHeaderComment (method ))
648- .setScope (ScopeNode .PUBLIC )
649- .setIsFinal (true )
650- .setReturnType (methodOutputType )
651- .setName (methodName )
652- .setArguments (Arrays .asList (requestArgVarExpr ))
653- .setReturnExpr (methodReturnExpr )
654- .build ());
655-
656- return javaMethods ;
657- }
658-
659- private static MethodDefinition createLroAsyncMethod (
660- String serviceName , Method method , Map <String , TypeNode > types ) {
661- // TODO(miraleung): Create variants as well.
662- Preconditions .checkState (
663- method .hasLro (), String .format ("Method %s does not have an LRO" , method .name ()));
664- String methodName = JavaStyle .toLowerCamelCase (method .name ());
665- TypeNode methodInputType = method .inputType ();
666- TypeNode methodOutputType = method .outputType ();
667- String methodInputTypeName = methodInputType .reference ().name ();
668- LongrunningOperation lro = method .lro ();
669-
670- VariableExpr argumentExpr =
671- VariableExpr .builder ()
672- .setVariable (Variable .builder ().setName ("request" ).setType (methodInputType ).build ())
673- .setIsDecl (true )
674- .build ();
675-
676- TypeNode returnType =
677- TypeNode .withReference (
678- types
679- .get ("OperationFuture" )
680- .reference ()
681- .copyAndSetGenerics (
682- Arrays .asList (lro .responseType ().reference (), lro .metadataType ().reference ())));
683- MethodInvocationExpr returnExpr =
684- MethodInvocationExpr .builder ()
685- .setMethodName (String .format ("%sOperationCallable" , methodName ))
686- .build ();
687- returnExpr =
688- MethodInvocationExpr .builder ()
689- .setMethodName ("futureCall" )
690- .setArguments (Arrays .asList (argumentExpr .toBuilder ().setIsDecl (false ).build ()))
691- .setExprReferenceExpr (returnExpr )
692- .setReturnType (returnType )
693- .build ();
694-
695683 return MethodDefinition .builder ()
696684 .setHeaderCommentStatements (
697685 ServiceClientCommentComposer .createRpcMethodHeaderComment (method ))
698686 .setScope (ScopeNode .PUBLIC )
699687 .setIsFinal (true )
700- .setReturnType (returnType )
701- .setName (String .format ("%sAsync" , methodName ))
702- .setArguments (Arrays .asList (argumentExpr ))
703- .setReturnExpr (returnExpr )
688+ .setReturnType (methodOutputType )
689+ .setName (String .format (method . hasLro () ? "%sAsync" : "%s " , methodName ))
690+ .setArguments (Arrays .asList (requestArgVarExpr ))
691+ .setReturnExpr (methodReturnExpr )
704692 .build ();
705693 }
706694
707- private static MethodDefinition createLroCallable (
695+ private static MethodDefinition createLroCallableMethod (
708696 String serviceName , Method method , Map <String , TypeNode > types ) {
709697 return createCallableMethod (serviceName , method , types , CallableMethodKind .LRO );
710698 }
0 commit comments