Skip to content

Commit

Permalink
chore: Pre-DIREGAPIC Refactoring #1 (#719)
Browse files Browse the repository at this point in the history
* chore: Pre-DIREGAPIC Refactoring #1

 This is as minimal of a PR that I could make stuch that:
 1) It compiles and tests run single composer plus minimal
 2) All the key changes are present (abstract/grpc class, comment composer, class names, golden files move)

 I had to add a few quite ugly and artificial   constructs:
 fake `ClassComposer` under `composer` package which simply extends `composer.common.Composer` to void changing the rest of the classes
 put back static methods in `ClassNames` and `StubCommentComposer` and `TestProtoLoaderUtil` (for the same reasons as above). All of those chagnes are marked with `// TODO: remove after Pre-DIREGAPIC refactoring is fully merged` statement.
  • Loading branch information
vam-google committed May 18, 2021
1 parent 83e2e3b commit 5d182dd
Show file tree
Hide file tree
Showing 29 changed files with 920 additions and 267 deletions.
Expand Up @@ -18,7 +18,9 @@ java_library(
"//src/main/java/com/google/api/generator/engine/writer",
"//src/main/java/com/google/api/generator/gapic:status_java_proto",
"//src/main/java/com/google/api/generator/gapic/composer/comment",
"//src/main/java/com/google/api/generator/gapic/composer/common",
"//src/main/java/com/google/api/generator/gapic/composer/defaultvalue",
"//src/main/java/com/google/api/generator/gapic/composer/grpc",
"//src/main/java/com/google/api/generator/gapic/composer/resourcename",
"//src/main/java/com/google/api/generator/gapic/composer/samplecode",
"//src/main/java/com/google/api/generator/gapic/composer/store",
Expand Down
Expand Up @@ -14,10 +14,5 @@

package com.google.api.generator.gapic.composer;

import com.google.api.generator.gapic.model.GapicClass;
import com.google.api.generator.gapic.model.GapicContext;
import com.google.api.generator.gapic.model.Service;

public interface ClassComposer {
GapicClass generate(GapicContext context, Service serivce);
}
public interface ClassComposer
extends com.google.api.generator.gapic.composer.common.ClassComposer {}
Expand Up @@ -17,6 +17,7 @@
import com.google.api.generator.engine.ast.ClassDefinition;
import com.google.api.generator.engine.ast.ScopeNode;
import com.google.api.generator.gapic.composer.comment.CommentComposer;
import com.google.api.generator.gapic.composer.grpc.ServiceSettingsClassComposer;
import com.google.api.generator.gapic.composer.resourcename.ResourceNameHelperClassComposer;
import com.google.api.generator.gapic.model.GapicClass;
import com.google.api.generator.gapic.model.GapicClass.Kind;
Expand Down
Expand Up @@ -983,7 +983,7 @@ private static List<MethodDefinition> createDefaultHelperAndGetterMethods(
javaMethods.add(
MethodDefinition.builder()
.setHeaderCommentStatements(
SettingsCommentComposer.DEFAULT_GRPC_TRANSPORT_PROVIDER_BUILDER_METHOD_COMMENT)
SettingsCommentComposer.DEFAULT_TRANSPORT_PROVIDER_BUILDER_METHOD_COMMENT)
.setScope(ScopeNode.PUBLIC)
.setIsStatic(true)
.setReturnType(returnType)
Expand Down
Expand Up @@ -67,7 +67,7 @@ public class SettingsCommentComposer {
public static final CommentStatement DEFAULT_CREDENTIALS_PROVIDER_BUILDER_METHOD_COMMENT =
toSimpleComment("Returns a builder for the default credentials for this service.");

public static final CommentStatement DEFAULT_GRPC_TRANSPORT_PROVIDER_BUILDER_METHOD_COMMENT =
public static final CommentStatement DEFAULT_TRANSPORT_PROVIDER_BUILDER_METHOD_COMMENT =
toSimpleComment("Returns a builder for the default ChannelProvider for this service.");

public static final CommentStatement NEW_BUILDER_METHOD_COMMENT =
Expand Down
Expand Up @@ -22,44 +22,69 @@
public class StubCommentComposer {
private static final String STUB_CLASS_HEADER_SUMMARY_PATTERN =
"Base stub class for the %s service API.";
private static final String GRPC_CALLABLE_FACTORY_CLASS_HEADER_SUMMARY_PATTERN =
"gRPC callable factory implementation for the %s service API.";
private static final String GRPC_STUB_CLASS_HEADER_SUMMARY_PATTERN =
"gRPC stub implementation for the %s service API.";
private static final String TRANSPORT_CALLABLE_FACTORY_CLASS_HEADER_SUMMARY_PATTERN =
"%s callable factory implementation for the %s service API.";
private static final String TRANSPORT_STUB_CLASS_HEADER_SUMMARY_PATTERN =
"%s stub implementation for the %s service API.";

private static final String ADVANCED_USAGE_DESCRIPTION = "This class is for advanced usage.";
private static final String ADVANCED_USAGE_API_REFLECTION_DESCRIPTION =
"This class is for advanced usage and reflects the underlying API directly.";

// TODO: remove after Pre-DIREGAPIC refactoring is fully merged
private static final StubCommentComposer GRPC_INSTANCE = new StubCommentComposer("gRPC");

private final String transportPrefix;

public StubCommentComposer(String transportPrefix) {
this.transportPrefix = transportPrefix;
}

// TODO: remove after Pre-DIREGAPIC refactoring is fully merged
public static List<CommentStatement> createGrpcServiceStubClassHeaderComments(
String serviceName, boolean isDeprecated) {
return GRPC_INSTANCE.createTransportServiceStubClassHeaderComments(serviceName, isDeprecated);
}

public List<CommentStatement> createTransportServiceStubClassHeaderComments(
String serviceName, boolean isDeprecated) {
JavaDocComment.Builder javaDocBuilder = JavaDocComment.builder();
if (isDeprecated) {
javaDocBuilder = javaDocBuilder.setDeprecated(CommentComposer.DEPRECATED_CLASS_STRING);
}

return Arrays.asList(
CommentComposer.AUTO_GENERATED_CLASS_COMMENT,
CommentStatement.withComment(
javaDocBuilder
.addComment(String.format(GRPC_STUB_CLASS_HEADER_SUMMARY_PATTERN, serviceName))
.addComment(
String.format(
TRANSPORT_STUB_CLASS_HEADER_SUMMARY_PATTERN, transportPrefix, serviceName))
.addParagraph(ADVANCED_USAGE_API_REFLECTION_DESCRIPTION)
.build()));
}

// TODO: remove after Pre-DIREGAPIC refactoring is fully merged
public static List<CommentStatement> createGrpcServiceCallableFactoryClassHeaderComments(
String serviceName, boolean isDeprecated) {
return GRPC_INSTANCE.createTransportServiceCallableFactoryClassHeaderComments(
serviceName, isDeprecated);
}

public List<CommentStatement> createTransportServiceCallableFactoryClassHeaderComments(
String serviceName, boolean isDeprecated) {
JavaDocComment.Builder javaDocBuilder = JavaDocComment.builder();
if (isDeprecated) {
javaDocBuilder = javaDocBuilder.setDeprecated(CommentComposer.DEPRECATED_CLASS_STRING);
}

return Arrays.asList(
CommentComposer.AUTO_GENERATED_CLASS_COMMENT,
CommentStatement.withComment(
javaDocBuilder
.addComment(
String.format(GRPC_CALLABLE_FACTORY_CLASS_HEADER_SUMMARY_PATTERN, serviceName))
String.format(
TRANSPORT_CALLABLE_FACTORY_CLASS_HEADER_SUMMARY_PATTERN,
transportPrefix,
serviceName))
.addParagraph(ADVANCED_USAGE_DESCRIPTION)
.build()));
}
Expand Down
Expand Up @@ -12,13 +12,12 @@
// See the License for the specific language governing permissions and
// limitations under the License.

package com.google.api.generator.gapic.composer;
package com.google.api.generator.gapic.composer.common;

import com.google.api.core.ApiFunction;
import com.google.api.core.BetaApi;
import com.google.api.gax.core.GoogleCredentialsProvider;
import com.google.api.gax.core.InstantiatingExecutorProvider;
import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider;
import com.google.api.gax.rpc.ApiClientHeaderProvider;
import com.google.api.gax.rpc.BatchingCallSettings;
import com.google.api.gax.rpc.ClientContext;
Expand Down Expand Up @@ -61,6 +60,7 @@
import com.google.api.generator.gapic.model.Method;
import com.google.api.generator.gapic.model.Method.Stream;
import com.google.api.generator.gapic.model.Service;
import com.google.api.generator.gapic.model.TransportContext;
import com.google.api.generator.gapic.utils.JavaStyle;
import com.google.common.base.Preconditions;
import com.google.longrunning.Operation;
Expand All @@ -75,26 +75,16 @@
import java.util.stream.Collectors;
import javax.annotation.Generated;

public class ServiceSettingsClassComposer implements ClassComposer {
public abstract class AbstractServiceSettingsClassComposer implements ClassComposer {
private static final String BUILDER_CLASS_NAME = "Builder";
private static final String CALL_SETTINGS_TYPE_NAME_PATTERN = "%sCallSettings";
private static final String PAGED_RESPONSE_TYPE_NAME_PATTERN = "%sPagedResponse";

private static final String OPERATION_SETTINGS_LITERAL = "OperationSettings";
private static final String SETTINGS_LITERAL = "Settings";

private static final ServiceSettingsClassComposer INSTANCE = new ServiceSettingsClassComposer();

private static final TypeStore FIXED_TYPESTORE = createStaticTypes();

private ServiceSettingsClassComposer() {}

public static ServiceSettingsClassComposer instance() {
return INSTANCE;
}

@Override
public GapicClass generate(GapicContext ignored, Service service) {
public GapicClass generate(GapicContext context, Service service) {
String pakkage = service.pakkage();
TypeStore typeStore = createDynamicTypes(service);
String className = ClassNames.getServiceSettingsClassName(service);
Expand All @@ -118,7 +108,7 @@ public GapicClass generate(GapicContext ignored, Service service) {
typeStore
.get(ClassNames.getServiceSettingsClassName(service))
.reference()))))
.setMethods(createClassMethods(service, typeStore))
.setMethods(createClassMethods(context.transportContext(), service, typeStore))
.setNestedClasses(Arrays.asList(createNestedBuilderClass(service, typeStore)))
.build();
return GapicClass.create(kind, classDef);
Expand Down Expand Up @@ -168,11 +158,12 @@ private static List<AnnotationNode> createClassAnnotations(Service service) {
return annotations;
}

private static List<MethodDefinition> createClassMethods(Service service, TypeStore typeStore) {
private static List<MethodDefinition> createClassMethods(
TransportContext transportContext, Service service, TypeStore typeStore) {
List<MethodDefinition> javaMethods = new ArrayList<>();
javaMethods.addAll(createSettingsGetterMethods(service, typeStore));
javaMethods.add(createCreatorMethod(service, typeStore));
javaMethods.addAll(createDefaultGetterMethods(service, typeStore));
javaMethods.addAll(createDefaultGetterMethods(transportContext, service, typeStore));
javaMethods.addAll(createBuilderHelperMethods(service, typeStore));
javaMethods.add(createConstructorMethod(service, typeStore));
return javaMethods;
Expand Down Expand Up @@ -202,8 +193,7 @@ private static MethodDefinition createConstructorMethod(Service service, TypeSto
}

// TODO(miraleung): Consider merging this with createNestedBuilderSettingsGetterMethods.
private static List<MethodDefinition> createSettingsGetterMethods(
Service service, TypeStore typeStore) {
private static List<MethodDefinition> createSettingsGetterMethods(Service service, TypeStore typeStore) {
TypeNode stubSettingsType = typeStore.get(ClassNames.getServiceStubSettingsClassName(service));
BiFunction<TypeNode, String, MethodDefinition.Builder> methodMakerFn =
(retType, javaMethodName) ->
Expand Down Expand Up @@ -306,7 +296,7 @@ private static MethodDefinition createCreatorMethod(Service service, TypeStore t
}

private static List<MethodDefinition> createDefaultGetterMethods(
Service service, TypeStore typeStore) {
TransportContext transportContext, Service service, TypeStore typeStore) {
BiFunction<String, TypeNode, MethodDefinition.Builder> methodStarterFn =
(mName, retType) ->
MethodDefinition.builder()
Expand Down Expand Up @@ -356,9 +346,9 @@ private static List<MethodDefinition> createDefaultGetterMethods(
javaMethods.add(
methodMakerFn.apply(
methodStarterFn.apply(
"defaultGrpcTransportProviderBuilder",
typeMakerFn.apply(InstantiatingGrpcChannelProvider.Builder.class)),
SettingsCommentComposer.DEFAULT_GRPC_TRANSPORT_PROVIDER_BUILDER_METHOD_COMMENT));
transportContext.defaultTransportProviderBuilderName(),
typeMakerFn.apply(transportContext.instantiatingChannelProviderClass())),
SettingsCommentComposer.DEFAULT_TRANSPORT_PROVIDER_BUILDER_METHOD_COMMENT));

javaMethods.add(
methodStarterFn
Expand All @@ -385,8 +375,7 @@ private static List<MethodDefinition> createDefaultGetterMethods(
return javaMethods;
}

private static List<MethodDefinition> createBuilderHelperMethods(
Service service, TypeStore typeStore) {
private static List<MethodDefinition> createBuilderHelperMethods(Service service, TypeStore typeStore) {
TypeNode builderType = typeStore.get(BUILDER_CLASS_NAME);
MethodDefinition newBuilderMethodOne =
MethodDefinition.builder()
Expand Down Expand Up @@ -740,7 +729,6 @@ private static TypeStore createStaticTypes() {
Generated.class,
GoogleCredentialsProvider.class,
InstantiatingExecutorProvider.class,
InstantiatingGrpcChannelProvider.class,
IOException.class,
Operation.class,
OperationCallSettings.class,
Expand Down
@@ -0,0 +1,50 @@
load("@rules_java//java:defs.bzl", "java_library")

package(default_visibility = ["//visibility:public"])

filegroup(
name = "common_files",
srcs = glob(["*.java"]),
)

java_library(
name = "common",
srcs = [
":common_files",
],
deps = [
"//:service_config_java_proto",
"//src/main/java/com/google/api/generator/engine/ast",
"//src/main/java/com/google/api/generator/engine/writer",
"//src/main/java/com/google/api/generator/gapic:status_java_proto",
"//src/main/java/com/google/api/generator/gapic/composer/comment",
"//src/main/java/com/google/api/generator/gapic/composer/defaultvalue",
"//src/main/java/com/google/api/generator/gapic/composer/resourcename",
"//src/main/java/com/google/api/generator/gapic/composer/samplecode",
"//src/main/java/com/google/api/generator/gapic/composer/store",
"//src/main/java/com/google/api/generator/gapic/composer/utils",
"//src/main/java/com/google/api/generator/gapic/model",
"//src/main/java/com/google/api/generator/gapic/utils",
"//src/main/java/com/google/api/generator/util",
"@com_google_api_api_common//jar",
"@com_google_api_gax_java//gax:gax",
"@com_google_api_gax_java//gax:gax_testlib",
"@com_google_api_gax_java//gax-grpc:gax_grpc",
"@com_google_api_gax_java//gax-grpc:gax_grpc_testlib",
"@com_google_code_findbugs_jsr305//jar",
"@com_google_googleapis//gapic/metadata:metadata_java_proto",
"@com_google_googleapis//google/api:api_java_proto",
"@com_google_googleapis//google/longrunning:longrunning_java_proto",
"@com_google_googleapis//google/rpc:rpc_java_proto",
"@com_google_guava_guava//jar",
"@com_google_protobuf//:protobuf_java",
"@com_google_protobuf//:protobuf_java_util",
"@com_google_protobuf//java/core",
"@io_grpc_grpc_java//api",
"@io_grpc_grpc_java//protobuf",
"@io_grpc_grpc_java//stub",
"@javax_annotation_javax_annotation_api//jar",
"@junit_junit//jar",
"@org_threeten_threetenbp//jar",
],
)
@@ -0,0 +1,24 @@
// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package com.google.api.generator.gapic.composer.common;

import com.google.api.generator.gapic.model.GapicClass;
import com.google.api.generator.gapic.model.GapicContext;
import com.google.api.generator.gapic.model.Service;

// TODO: remove after Pre-DIREGAPIC refactoring is fully merged
public interface ClassComposer {
GapicClass generate(GapicContext context, Service serivce);
}
@@ -0,0 +1,51 @@
load("@rules_java//java:defs.bzl", "java_library")

package(default_visibility = ["//visibility:public"])

filegroup(
name = "grpc_files",
srcs = glob(["*.java"]),
)

java_library(
name = "grpc",
srcs = [
":grpc_files",
],
deps = [
"//:service_config_java_proto",
"//src/main/java/com/google/api/generator/engine/ast",
"//src/main/java/com/google/api/generator/engine/writer",
"//src/main/java/com/google/api/generator/gapic:status_java_proto",
"//src/main/java/com/google/api/generator/gapic/composer/comment",
"//src/main/java/com/google/api/generator/gapic/composer/common",
"//src/main/java/com/google/api/generator/gapic/composer/defaultvalue",
"//src/main/java/com/google/api/generator/gapic/composer/resourcename",
"//src/main/java/com/google/api/generator/gapic/composer/samplecode",
"//src/main/java/com/google/api/generator/gapic/composer/store",
"//src/main/java/com/google/api/generator/gapic/composer/utils",
"//src/main/java/com/google/api/generator/gapic/model",
"//src/main/java/com/google/api/generator/gapic/utils",
"//src/main/java/com/google/api/generator/util",
"@com_google_api_api_common//jar",
"@com_google_api_gax_java//gax",
"@com_google_api_gax_java//gax:gax_testlib",
"@com_google_api_gax_java//gax-grpc:gax_grpc",
"@com_google_api_gax_java//gax-grpc:gax_grpc_testlib",
"@com_google_code_findbugs_jsr305//jar",
"@com_google_googleapis//gapic/metadata:metadata_java_proto",
"@com_google_googleapis//google/api:api_java_proto",
"@com_google_googleapis//google/longrunning:longrunning_java_proto",
"@com_google_googleapis//google/rpc:rpc_java_proto",
"@com_google_guava_guava//jar",
"@com_google_protobuf//:protobuf_java",
"@com_google_protobuf//:protobuf_java_util",
"@com_google_protobuf//java/core",
"@io_grpc_grpc_java//api",
"@io_grpc_grpc_java//protobuf",
"@io_grpc_grpc_java//stub",
"@javax_annotation_javax_annotation_api//jar",
"@junit_junit//jar",
"@org_threeten_threetenbp//jar",
],
)

0 comments on commit 5d182dd

Please sign in to comment.