diff --git a/src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceClientClassComposer.java b/src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceClientClassComposer.java index a4c7041f3e..18b9eeca81 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceClientClassComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceClientClassComposer.java @@ -235,7 +235,9 @@ private List createFieldDeclarations( "settings", typeStore.get(ClassNames.getServiceSettingsClassName(service))); fieldNameToTypes.put("stub", typeStore.get(ClassNames.getServiceStubClassName(service))); if (hasLroClient) { - fieldNameToTypes.put("operationsClient", getTransportContext().operationsClientType()); + fieldNameToTypes.put( + getTransportContext().operationsClientName(), + getTransportContext().operationsClientType()); } return fieldNameToTypes.entrySet().stream() @@ -377,7 +379,10 @@ private List createConstructorMethods( .build()); VariableExpr operationsClientVarExpr = VariableExpr.withVariable( - Variable.builder().setType(operationsClientType).setName("operationsClient").build()); + Variable.builder() + .setType(operationsClientType) + .setName(getTransportContext().operationsClientName()) + .build()); // Create the ServiceClient(ServiceSettings settings) ctor. List ctorAssignmentExprs = new ArrayList<>(); @@ -407,10 +412,15 @@ private List createConstructorMethods( .build()) .build()); + String operationsStubGetterName = + String.format( + "get%s", + JavaStyle.toUpperCamelCase(getTransportContext().transportOperationsStubName())); + Expr clientArgExpr = MethodInvocationExpr.builder() .setExprReferenceExpr(stubVarExpr.toBuilder().setExprReferenceExpr(thisExpr).build()) - .setMethodName("getOperationsStub") + .setMethodName(operationsStubGetterName) .build(); AssignmentExpr operationsClientAssignExpr = AssignmentExpr.builder() @@ -485,9 +495,13 @@ private List createGetterMethods( methodNameToTypes.put( "getSettings", typeStore.get(ClassNames.getServiceSettingsClassName(service))); methodNameToTypes.put("getStub", typeStore.get(ClassNames.getServiceStubClassName(service))); - String getOperationsClientMethodName = "getOperationsClient"; + String getOperationsClientMethodName = + String.format( + "get%s", + JavaStyle.toUpperCamelCase(getTransportContext().operationsClientName())); if (hasLroClient) { - methodNameToTypes.put(getOperationsClientMethodName, getTransportContext().operationsClientType()); + methodNameToTypes.put( + getOperationsClientMethodName, getTransportContext().operationsClientType()); } AnnotationNode betaStubAnnotation = AnnotationNode.builder() diff --git a/src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceStubClassComposer.java b/src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceStubClassComposer.java index 8c8f03c083..1b26732cff 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceStubClassComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceStubClassComposer.java @@ -112,7 +112,7 @@ private static List createClassImplements(TypeStore typeStore) { private List createClassMethods( Service service, Map messageTypes, TypeStore typeStore) { - boolean hasLroClient = hasLroMethods(service); + boolean hasLroClient = service.hasLroMethods(); List methods = new ArrayList<>(); if (hasLroClient) { methods.add(createOperationsStubGetter(typeStore)); @@ -207,7 +207,11 @@ private static MethodDefinition createCallableGetterHelper( } private MethodDefinition createOperationsStubGetter(TypeStore typeStore) { - String methodName = "getOperationsStub"; + String methodName = + String.format( + "get%s", + JavaStyle.toUpperCamelCase(getTransportContext().transportOperationsStubName())); + return MethodDefinition.builder() .setScope(ScopeNode.PUBLIC) .setReturnType(getTransportContext().operationsStubType()) @@ -228,15 +232,6 @@ private static List createBackgroundResourceMethodOverrides() return Arrays.asList(closeMethod); } - private static boolean hasLroMethods(Service service) { - for (Method method : service.methods()) { - if (method.hasLro()) { - return true; - } - } - return false; - } - private static TypeStore createTypes(Service service, Map messageTypes) { List concreteClazzes = Arrays.asList( diff --git a/src/main/java/com/google/api/generator/gapic/composer/common/AbstractTransportServiceStubClassComposer.java b/src/main/java/com/google/api/generator/gapic/composer/common/AbstractTransportServiceStubClassComposer.java index b5352fc5d0..14fe5da0fa 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/common/AbstractTransportServiceStubClassComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/common/AbstractTransportServiceStubClassComposer.java @@ -61,6 +61,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -84,7 +85,7 @@ public abstract class AbstractTransportServiceStubClassComposer implements Class private static final String CALLABLE_CLASS_MEMBER_PATTERN = "%sCallable"; private static final String OPERATION_CALLABLE_CLASS_MEMBER_PATTERN = "%sOperationCallable"; private static final String OPERATION_CALLABLE_NAME = "OperationCallable"; - private static final String OPERATIONS_STUB_MEMBER_NAME = "operationsStub"; + // private static final String OPERATIONS_STUB_MEMBER_NAME = "operationsStub"; private static final String PAGED_CALLABLE_NAME = "PagedCallable"; protected static final TypeStore FIXED_TYPESTORE = createStaticTypes(); @@ -143,12 +144,12 @@ public GapicClass generate(GapicContext context, Service service) { .setName(BACKGROUND_RESOURCES_MEMBER_NAME) .setType(FIXED_TYPESTORE.get("BackgroundResource")) .build())); - if (getTransportContext().transportOperationsStubType() != null) { + if (generateOperationsStubLogic(service)) { classMemberVarExprs.put( - OPERATIONS_STUB_MEMBER_NAME, + getTransportContext().transportOperationsStubName(), VariableExpr.withVariable( Variable.builder() - .setName(OPERATIONS_STUB_MEMBER_NAME) + .setName(getTransportContext().transportOperationsStubName()) .setType(getTransportContext().transportOperationsStubType()) .build())); } @@ -196,13 +197,26 @@ public GapicClass generate(GapicContext context, Service service) { protected abstract Statement createMethodDescriptorVariableDecl( Service service, Method protoMethod, VariableExpr methodDescriptorVarExpr); + protected boolean generateOperationsStubLogic(Service service) { + return true; + } + protected List createOperationsStubGetterMethod( - VariableExpr operationsStubVarExpr) { + Service service, VariableExpr operationsStubVarExpr) { + if (!generateOperationsStubLogic(service)) { + return Collections.emptyList(); + } + + String methodName = + String.format( + "get%s", + JavaStyle.toUpperCamelCase(getTransportContext().transportOperationsStubName())); + return Arrays.asList( MethodDefinition.builder() .setScope(ScopeNode.PUBLIC) .setReturnType(operationsStubVarExpr.type()) - .setName("getOperationsStub") + .setName(methodName) .setReturnExpr(operationsStubVarExpr) .build()); } @@ -385,7 +399,8 @@ protected List createClassMethods( javaMethods.addAll( createGetMethodDescriptorsMethod(service, typeStore, protoMethodNameToDescriptorVarExprs)); javaMethods.addAll( - createOperationsStubGetterMethod(classMemberVarExprs.get(OPERATIONS_STUB_MEMBER_NAME))); + createOperationsStubGetterMethod( + service, classMemberVarExprs.get(getTransportContext().transportOperationsStubName()))); javaMethods.addAll(createCallableGetterMethods(callableClassMemberVarExprs)); javaMethods.addAll( createStubOverrideMethods(classMemberVarExprs.get(BACKGROUND_RESOURCES_MEMBER_NAME))); @@ -551,8 +566,8 @@ protected List createConstructorMethods( .build()) .setValueExpr(callableFactoryVarExpr) .build()); - VariableExpr operationsStubClassVarExpr = classMemberVarExprs.get(OPERATIONS_STUB_MEMBER_NAME); - if (getTransportContext().transportOperationsStubType() != null) { + VariableExpr operationsStubClassVarExpr = classMemberVarExprs.get(getTransportContext().transportOperationsStubName()); + if (generateOperationsStubLogic(service)) { secondCtorExprs.add( AssignmentExpr.builder() .setVariableExpr( @@ -716,17 +731,18 @@ private Expr createCallableInitExpr( clientContextVarExpr); } - Optional callableCreatorMethodName = getCallableCreatorMethodName(callableVarExpr.type()); - + Optional callableCreatorMethodName = + getCallableCreatorMethodName(callableVarExpr.type()); Expr initExpr; if (callableCreatorMethodName.isPresent()) { - initExpr = MethodInvocationExpr.builder() - .setExprReferenceExpr(callableFactoryVarExpr) - .setMethodName(callableCreatorMethodName.get()) - .setArguments(creatorMethodArgVarExprs) - .setReturnType(callableVarExpr.type()) - .build(); + initExpr = + MethodInvocationExpr.builder() + .setExprReferenceExpr(callableFactoryVarExpr) + .setMethodName(callableCreatorMethodName.get()) + .setArguments(creatorMethodArgVarExprs) + .setReturnType(callableVarExpr.type()) + .build(); } else { initExpr = ValueExpr.createNullExpr(); } diff --git a/src/main/java/com/google/api/generator/gapic/composer/common/TransportContext.java b/src/main/java/com/google/api/generator/gapic/composer/common/TransportContext.java index f5acb80be7..9296c9b93c 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/common/TransportContext.java +++ b/src/main/java/com/google/api/generator/gapic/composer/common/TransportContext.java @@ -19,7 +19,6 @@ import com.google.api.generator.gapic.composer.utils.ClassNames; import com.google.api.generator.gapic.model.Transport; import com.google.auto.value.AutoValue; -import javax.annotation.Nullable; @AutoValue public abstract class TransportContext { @@ -37,9 +36,10 @@ public abstract class TransportContext { public abstract Class methodDescriptorClass(); - @Nullable public abstract TypeNode transportOperationsStubType(); + public abstract String transportOperationsStubName(); + // For AbstractServiceSettingsClassComposer public abstract Class instantiatingChannelProviderClass(); @@ -66,6 +66,8 @@ public abstract class TransportContext { public abstract TypeNode operationsClientType(); + public abstract String operationsClientName(); + protected static TypeNode classToType(Class clazz) { return TypeNode.withReference(ConcreteReference.withClazz(clazz)); } @@ -107,6 +109,8 @@ public abstract Builder setDefaultTransportProviderBuilderName( public abstract Builder setTransportOperationsStubType(TypeNode transportOperationsStubType); + public abstract Builder setTransportOperationsStubName(String transportOperationsStubName); + public abstract Builder setOperationsStubType(TypeNode operationsStubType); public abstract Builder setOperationResponseTransformerType(TypeNode operationResponseTransformerType); @@ -115,6 +119,8 @@ public abstract Builder setDefaultTransportProviderBuilderName( public abstract Builder setOperationsClientType(TypeNode operationsClientType); + public abstract Builder setOperationsClientName(String operationsClientName); + public abstract TransportContext build(); } } diff --git a/src/main/java/com/google/api/generator/gapic/composer/grpc/GrpcContext.java b/src/main/java/com/google/api/generator/gapic/composer/grpc/GrpcContext.java index c216a90f3b..53a8d6f3ca 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/grpc/GrpcContext.java +++ b/src/main/java/com/google/api/generator/gapic/composer/grpc/GrpcContext.java @@ -39,6 +39,7 @@ public abstract class GrpcContext extends TransportContext { .setStubCallableFactoryType(classToType(GrpcStubCallableFactory.class)) .setMethodDescriptorClass(MethodDescriptor.class) .setTransportOperationsStubType(classToType(GrpcOperationsStub.class)) + .setTransportOperationsStubName("operationsStub") // For grpc.ServiceSettingsClassComposer .setInstantiatingChannelProviderClass(InstantiatingGrpcChannelProvider.Builder.class) .setDefaultTransportProviderBuilderName("defaultGrpcTransportProviderBuilder") @@ -57,6 +58,7 @@ public abstract class GrpcContext extends TransportContext { classToType(ProtoOperationTransformers.MetadataTransformer.class)) // For ServiceClientClassComposer .setOperationsClientType(classToType(OperationsClient.class)) + .setOperationsClientName("operationsClient") .build(); public static TransportContext instance() { diff --git a/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java b/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java index 7b195145fd..ff927a3713 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java @@ -90,6 +90,11 @@ private static TypeStore createStaticTypes() { ProtoRestSerializer.class)); } + @Override + protected boolean generateOperationsStubLogic(Service service) { + return service.hasLroMethods(); + } + @Override protected Statement createMethodDescriptorVariableDecl( Service service, Method protoMethod, VariableExpr methodDescriptorVarExpr) { diff --git a/src/main/java/com/google/api/generator/gapic/composer/rest/RestContext.java b/src/main/java/com/google/api/generator/gapic/composer/rest/RestContext.java index 655ba9523e..682e68f1da 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/rest/RestContext.java +++ b/src/main/java/com/google/api/generator/gapic/composer/rest/RestContext.java @@ -39,6 +39,7 @@ public abstract class RestContext extends TransportContext { .setStubCallableFactoryType(classToType(HttpJsonStubCallableFactory.class)) .setMethodDescriptorClass(ApiMethodDescriptor.class) .setTransportOperationsStubType(classToType(HttpJsonOperationsStub.class)) + .setTransportOperationsStubName("httpJsonOperationsStub") // For httpjson.ServiceSettingsClassComposer .setInstantiatingChannelProviderClass(InstantiatingHttpJsonChannelProvider.Builder.class) .setDefaultTransportProviderBuilderName("defaultHttpJsonTransportProviderBuilder") @@ -58,6 +59,7 @@ public abstract class RestContext extends TransportContext { classToType(ProtoOperationTransformers.MetadataTransformer.class)) // For ServiceClientClassComposer .setOperationsClientType(classToType(OperationsClient.class)) + .setOperationsClientName("httpJsonOperationsClient") .build(); public static TransportContext instance() { diff --git a/src/main/java/com/google/api/generator/gapic/model/Service.java b/src/main/java/com/google/api/generator/gapic/model/Service.java index f21125fb54..2ce5c09d2e 100644 --- a/src/main/java/com/google/api/generator/gapic/model/Service.java +++ b/src/main/java/com/google/api/generator/gapic/model/Service.java @@ -49,6 +49,15 @@ public boolean hasDescription() { return !Strings.isNullOrEmpty(description()); } + public boolean hasLroMethods() { + for (Method method : methods()) { + if (method.hasLro()) { + return true; + } + } + return false; + } + public abstract Builder toBuilder(); public static Builder builder() { diff --git a/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonComplianceStub.golden b/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonComplianceStub.golden index 7631cfc640..331e5bf961 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonComplianceStub.golden +++ b/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonComplianceStub.golden @@ -11,7 +11,6 @@ import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; import com.google.api.gax.httpjson.ProtoMessageRequestFormatter; import com.google.api.gax.httpjson.ProtoMessageResponseParser; import com.google.api.gax.httpjson.ProtoRestSerializer; -import com.google.api.gax.httpjson.longrunning.stub.HttpJsonOperationsStub; import com.google.api.gax.rpc.ClientContext; import com.google.api.gax.rpc.UnaryCallable; import com.google.showcase.v1beta1.RepeatRequest; @@ -273,7 +272,6 @@ public class HttpJsonComplianceStub extends ComplianceStub { private final UnaryCallable repeatDataPathTrailingResourceCallable; private final BackgroundResource backgroundResources; - private final HttpJsonOperationsStub operationsStub; private final HttpJsonStubCallableFactory callableFactory; public static final HttpJsonComplianceStub create(ComplianceStubSettings settings) @@ -313,7 +311,6 @@ public class HttpJsonComplianceStub extends ComplianceStub { HttpJsonStubCallableFactory callableFactory) throws IOException { this.callableFactory = callableFactory; - this.operationsStub = HttpJsonOperationsStub.create(clientContext, callableFactory); HttpJsonCallSettings repeatDataBodyTransportSettings = HttpJsonCallSettings.newBuilder() @@ -384,10 +381,6 @@ public class HttpJsonComplianceStub extends ComplianceStub { return methodDescriptors; } - public HttpJsonOperationsStub getOperationsStub() { - return operationsStub; - } - @Override public UnaryCallable repeatDataBodyCallable() { return repeatDataBodyCallable; diff --git a/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonAddressesStub.java b/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonAddressesStub.java index ff6bb2d8be..d8d960d342 100644 --- a/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonAddressesStub.java +++ b/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonAddressesStub.java @@ -30,7 +30,6 @@ import com.google.api.gax.httpjson.ProtoMessageRequestFormatter; import com.google.api.gax.httpjson.ProtoMessageResponseParser; import com.google.api.gax.httpjson.ProtoRestSerializer; -import com.google.api.gax.httpjson.longrunning.stub.HttpJsonOperationsStub; import com.google.api.gax.rpc.ClientContext; import com.google.api.gax.rpc.UnaryCallable; import com.google.cloud.compute.v1.AddressAggregatedList; @@ -228,7 +227,6 @@ public class HttpJsonAddressesStub extends AddressesStub { private final UnaryCallable listPagedCallable; private final BackgroundResource backgroundResources; - private final HttpJsonOperationsStub operationsStub; private final HttpJsonStubCallableFactory callableFactory; public static final HttpJsonAddressesStub create(AddressesStubSettings settings) @@ -267,7 +265,6 @@ protected HttpJsonAddressesStub( HttpJsonStubCallableFactory callableFactory) throws IOException { this.callableFactory = callableFactory; - this.operationsStub = HttpJsonOperationsStub.create(clientContext, callableFactory); HttpJsonCallSettings aggregatedListTransportSettings = @@ -320,10 +317,6 @@ public static List getMethodDescriptors() { return methodDescriptors; } - public HttpJsonOperationsStub getOperationsStub() { - return operationsStub; - } - @Override public UnaryCallable aggregatedListCallable() { diff --git a/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonRegionOperationsStub.java b/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonRegionOperationsStub.java index a10d02bfdc..9d90915792 100644 --- a/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonRegionOperationsStub.java +++ b/test/integration/goldens/compute/com/google/cloud/compute/v1/stub/HttpJsonRegionOperationsStub.java @@ -27,7 +27,6 @@ import com.google.api.gax.httpjson.ProtoMessageRequestFormatter; import com.google.api.gax.httpjson.ProtoMessageResponseParser; import com.google.api.gax.httpjson.ProtoRestSerializer; -import com.google.api.gax.httpjson.longrunning.stub.HttpJsonOperationsStub; import com.google.api.gax.rpc.ClientContext; import com.google.api.gax.rpc.UnaryCallable; import com.google.cloud.compute.v1.GetRegionOperationRequest; @@ -85,7 +84,6 @@ public class HttpJsonRegionOperationsStub extends RegionOperationsStub { private final UnaryCallable getCallable; private final BackgroundResource backgroundResources; - private final HttpJsonOperationsStub operationsStub; private final HttpJsonStubCallableFactory callableFactory; public static final HttpJsonRegionOperationsStub create(RegionOperationsStubSettings settings) @@ -126,7 +124,6 @@ protected HttpJsonRegionOperationsStub( HttpJsonStubCallableFactory callableFactory) throws IOException { this.callableFactory = callableFactory; - this.operationsStub = HttpJsonOperationsStub.create(clientContext, callableFactory); HttpJsonCallSettings getTransportSettings = HttpJsonCallSettings.newBuilder() @@ -148,10 +145,6 @@ public static List getMethodDescriptors() { return methodDescriptors; } - public HttpJsonOperationsStub getOperationsStub() { - return operationsStub; - } - @Override public UnaryCallable getCallable() { return getCallable;