Skip to content

Commit 5d182dd

Browse files
authored
chore: Pre-DIREGAPIC Refactoring #1 (#719)
* 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.
1 parent 83e2e3b commit 5d182dd

29 files changed

+920
-267
lines changed

src/main/java/com/google/api/generator/gapic/composer/BUILD.bazel

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ java_library(
1818
"//src/main/java/com/google/api/generator/engine/writer",
1919
"//src/main/java/com/google/api/generator/gapic:status_java_proto",
2020
"//src/main/java/com/google/api/generator/gapic/composer/comment",
21+
"//src/main/java/com/google/api/generator/gapic/composer/common",
2122
"//src/main/java/com/google/api/generator/gapic/composer/defaultvalue",
23+
"//src/main/java/com/google/api/generator/gapic/composer/grpc",
2224
"//src/main/java/com/google/api/generator/gapic/composer/resourcename",
2325
"//src/main/java/com/google/api/generator/gapic/composer/samplecode",
2426
"//src/main/java/com/google/api/generator/gapic/composer/store",

src/main/java/com/google/api/generator/gapic/composer/ClassComposer.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,5 @@
1414

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

17-
import com.google.api.generator.gapic.model.GapicClass;
18-
import com.google.api.generator.gapic.model.GapicContext;
19-
import com.google.api.generator.gapic.model.Service;
20-
21-
public interface ClassComposer {
22-
GapicClass generate(GapicContext context, Service serivce);
23-
}
17+
public interface ClassComposer
18+
extends com.google.api.generator.gapic.composer.common.ClassComposer {}

src/main/java/com/google/api/generator/gapic/composer/Composer.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.google.api.generator.engine.ast.ClassDefinition;
1818
import com.google.api.generator.engine.ast.ScopeNode;
1919
import com.google.api.generator.gapic.composer.comment.CommentComposer;
20+
import com.google.api.generator.gapic.composer.grpc.ServiceSettingsClassComposer;
2021
import com.google.api.generator.gapic.composer.resourcename.ResourceNameHelperClassComposer;
2122
import com.google.api.generator.gapic.model.GapicClass;
2223
import com.google.api.generator.gapic.model.GapicClass.Kind;

src/main/java/com/google/api/generator/gapic/composer/ServiceStubSettingsClassComposer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -983,7 +983,7 @@ private static List<MethodDefinition> createDefaultHelperAndGetterMethods(
983983
javaMethods.add(
984984
MethodDefinition.builder()
985985
.setHeaderCommentStatements(
986-
SettingsCommentComposer.DEFAULT_GRPC_TRANSPORT_PROVIDER_BUILDER_METHOD_COMMENT)
986+
SettingsCommentComposer.DEFAULT_TRANSPORT_PROVIDER_BUILDER_METHOD_COMMENT)
987987
.setScope(ScopeNode.PUBLIC)
988988
.setIsStatic(true)
989989
.setReturnType(returnType)

src/main/java/com/google/api/generator/gapic/composer/comment/SettingsCommentComposer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public class SettingsCommentComposer {
6767
public static final CommentStatement DEFAULT_CREDENTIALS_PROVIDER_BUILDER_METHOD_COMMENT =
6868
toSimpleComment("Returns a builder for the default credentials for this service.");
6969

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

7373
public static final CommentStatement NEW_BUILDER_METHOD_COMMENT =

src/main/java/com/google/api/generator/gapic/composer/comment/StubCommentComposer.java

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,44 +22,69 @@
2222
public class StubCommentComposer {
2323
private static final String STUB_CLASS_HEADER_SUMMARY_PATTERN =
2424
"Base stub class for the %s service API.";
25-
private static final String GRPC_CALLABLE_FACTORY_CLASS_HEADER_SUMMARY_PATTERN =
26-
"gRPC callable factory implementation for the %s service API.";
27-
private static final String GRPC_STUB_CLASS_HEADER_SUMMARY_PATTERN =
28-
"gRPC stub implementation for the %s service API.";
25+
private static final String TRANSPORT_CALLABLE_FACTORY_CLASS_HEADER_SUMMARY_PATTERN =
26+
"%s callable factory implementation for the %s service API.";
27+
private static final String TRANSPORT_STUB_CLASS_HEADER_SUMMARY_PATTERN =
28+
"%s stub implementation for the %s service API.";
2929

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

34+
// TODO: remove after Pre-DIREGAPIC refactoring is fully merged
35+
private static final StubCommentComposer GRPC_INSTANCE = new StubCommentComposer("gRPC");
36+
37+
private final String transportPrefix;
38+
39+
public StubCommentComposer(String transportPrefix) {
40+
this.transportPrefix = transportPrefix;
41+
}
42+
43+
// TODO: remove after Pre-DIREGAPIC refactoring is fully merged
3444
public static List<CommentStatement> createGrpcServiceStubClassHeaderComments(
3545
String serviceName, boolean isDeprecated) {
46+
return GRPC_INSTANCE.createTransportServiceStubClassHeaderComments(serviceName, isDeprecated);
47+
}
48+
49+
public List<CommentStatement> createTransportServiceStubClassHeaderComments(
50+
String serviceName, boolean isDeprecated) {
3651
JavaDocComment.Builder javaDocBuilder = JavaDocComment.builder();
3752
if (isDeprecated) {
3853
javaDocBuilder = javaDocBuilder.setDeprecated(CommentComposer.DEPRECATED_CLASS_STRING);
3954
}
40-
4155
return Arrays.asList(
4256
CommentComposer.AUTO_GENERATED_CLASS_COMMENT,
4357
CommentStatement.withComment(
4458
javaDocBuilder
45-
.addComment(String.format(GRPC_STUB_CLASS_HEADER_SUMMARY_PATTERN, serviceName))
59+
.addComment(
60+
String.format(
61+
TRANSPORT_STUB_CLASS_HEADER_SUMMARY_PATTERN, transportPrefix, serviceName))
4662
.addParagraph(ADVANCED_USAGE_API_REFLECTION_DESCRIPTION)
4763
.build()));
4864
}
4965

66+
// TODO: remove after Pre-DIREGAPIC refactoring is fully merged
5067
public static List<CommentStatement> createGrpcServiceCallableFactoryClassHeaderComments(
5168
String serviceName, boolean isDeprecated) {
69+
return GRPC_INSTANCE.createTransportServiceCallableFactoryClassHeaderComments(
70+
serviceName, isDeprecated);
71+
}
72+
73+
public List<CommentStatement> createTransportServiceCallableFactoryClassHeaderComments(
74+
String serviceName, boolean isDeprecated) {
5275
JavaDocComment.Builder javaDocBuilder = JavaDocComment.builder();
5376
if (isDeprecated) {
5477
javaDocBuilder = javaDocBuilder.setDeprecated(CommentComposer.DEPRECATED_CLASS_STRING);
5578
}
56-
5779
return Arrays.asList(
5880
CommentComposer.AUTO_GENERATED_CLASS_COMMENT,
5981
CommentStatement.withComment(
6082
javaDocBuilder
6183
.addComment(
62-
String.format(GRPC_CALLABLE_FACTORY_CLASS_HEADER_SUMMARY_PATTERN, serviceName))
84+
String.format(
85+
TRANSPORT_CALLABLE_FACTORY_CLASS_HEADER_SUMMARY_PATTERN,
86+
transportPrefix,
87+
serviceName))
6388
.addParagraph(ADVANCED_USAGE_DESCRIPTION)
6489
.build()));
6590
}

src/main/java/com/google/api/generator/gapic/composer/ServiceSettingsClassComposer.java renamed to src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceSettingsClassComposer.java

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,12 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
package com.google.api.generator.gapic.composer;
15+
package com.google.api.generator.gapic.composer.common;
1616

1717
import com.google.api.core.ApiFunction;
1818
import com.google.api.core.BetaApi;
1919
import com.google.api.gax.core.GoogleCredentialsProvider;
2020
import com.google.api.gax.core.InstantiatingExecutorProvider;
21-
import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider;
2221
import com.google.api.gax.rpc.ApiClientHeaderProvider;
2322
import com.google.api.gax.rpc.BatchingCallSettings;
2423
import com.google.api.gax.rpc.ClientContext;
@@ -61,6 +60,7 @@
6160
import com.google.api.generator.gapic.model.Method;
6261
import com.google.api.generator.gapic.model.Method.Stream;
6362
import com.google.api.generator.gapic.model.Service;
63+
import com.google.api.generator.gapic.model.TransportContext;
6464
import com.google.api.generator.gapic.utils.JavaStyle;
6565
import com.google.common.base.Preconditions;
6666
import com.google.longrunning.Operation;
@@ -75,26 +75,16 @@
7575
import java.util.stream.Collectors;
7676
import javax.annotation.Generated;
7777

78-
public class ServiceSettingsClassComposer implements ClassComposer {
78+
public abstract class AbstractServiceSettingsClassComposer implements ClassComposer {
7979
private static final String BUILDER_CLASS_NAME = "Builder";
80-
private static final String CALL_SETTINGS_TYPE_NAME_PATTERN = "%sCallSettings";
8180
private static final String PAGED_RESPONSE_TYPE_NAME_PATTERN = "%sPagedResponse";
8281

8382
private static final String OPERATION_SETTINGS_LITERAL = "OperationSettings";
8483
private static final String SETTINGS_LITERAL = "Settings";
85-
86-
private static final ServiceSettingsClassComposer INSTANCE = new ServiceSettingsClassComposer();
87-
8884
private static final TypeStore FIXED_TYPESTORE = createStaticTypes();
8985

90-
private ServiceSettingsClassComposer() {}
91-
92-
public static ServiceSettingsClassComposer instance() {
93-
return INSTANCE;
94-
}
95-
9686
@Override
97-
public GapicClass generate(GapicContext ignored, Service service) {
87+
public GapicClass generate(GapicContext context, Service service) {
9888
String pakkage = service.pakkage();
9989
TypeStore typeStore = createDynamicTypes(service);
10090
String className = ClassNames.getServiceSettingsClassName(service);
@@ -118,7 +108,7 @@ public GapicClass generate(GapicContext ignored, Service service) {
118108
typeStore
119109
.get(ClassNames.getServiceSettingsClassName(service))
120110
.reference()))))
121-
.setMethods(createClassMethods(service, typeStore))
111+
.setMethods(createClassMethods(context.transportContext(), service, typeStore))
122112
.setNestedClasses(Arrays.asList(createNestedBuilderClass(service, typeStore)))
123113
.build();
124114
return GapicClass.create(kind, classDef);
@@ -168,11 +158,12 @@ private static List<AnnotationNode> createClassAnnotations(Service service) {
168158
return annotations;
169159
}
170160

171-
private static List<MethodDefinition> createClassMethods(Service service, TypeStore typeStore) {
161+
private static List<MethodDefinition> createClassMethods(
162+
TransportContext transportContext, Service service, TypeStore typeStore) {
172163
List<MethodDefinition> javaMethods = new ArrayList<>();
173164
javaMethods.addAll(createSettingsGetterMethods(service, typeStore));
174165
javaMethods.add(createCreatorMethod(service, typeStore));
175-
javaMethods.addAll(createDefaultGetterMethods(service, typeStore));
166+
javaMethods.addAll(createDefaultGetterMethods(transportContext, service, typeStore));
176167
javaMethods.addAll(createBuilderHelperMethods(service, typeStore));
177168
javaMethods.add(createConstructorMethod(service, typeStore));
178169
return javaMethods;
@@ -202,8 +193,7 @@ private static MethodDefinition createConstructorMethod(Service service, TypeSto
202193
}
203194

204195
// TODO(miraleung): Consider merging this with createNestedBuilderSettingsGetterMethods.
205-
private static List<MethodDefinition> createSettingsGetterMethods(
206-
Service service, TypeStore typeStore) {
196+
private static List<MethodDefinition> createSettingsGetterMethods(Service service, TypeStore typeStore) {
207197
TypeNode stubSettingsType = typeStore.get(ClassNames.getServiceStubSettingsClassName(service));
208198
BiFunction<TypeNode, String, MethodDefinition.Builder> methodMakerFn =
209199
(retType, javaMethodName) ->
@@ -306,7 +296,7 @@ private static MethodDefinition createCreatorMethod(Service service, TypeStore t
306296
}
307297

308298
private static List<MethodDefinition> createDefaultGetterMethods(
309-
Service service, TypeStore typeStore) {
299+
TransportContext transportContext, Service service, TypeStore typeStore) {
310300
BiFunction<String, TypeNode, MethodDefinition.Builder> methodStarterFn =
311301
(mName, retType) ->
312302
MethodDefinition.builder()
@@ -356,9 +346,9 @@ private static List<MethodDefinition> createDefaultGetterMethods(
356346
javaMethods.add(
357347
methodMakerFn.apply(
358348
methodStarterFn.apply(
359-
"defaultGrpcTransportProviderBuilder",
360-
typeMakerFn.apply(InstantiatingGrpcChannelProvider.Builder.class)),
361-
SettingsCommentComposer.DEFAULT_GRPC_TRANSPORT_PROVIDER_BUILDER_METHOD_COMMENT));
349+
transportContext.defaultTransportProviderBuilderName(),
350+
typeMakerFn.apply(transportContext.instantiatingChannelProviderClass())),
351+
SettingsCommentComposer.DEFAULT_TRANSPORT_PROVIDER_BUILDER_METHOD_COMMENT));
362352

363353
javaMethods.add(
364354
methodStarterFn
@@ -385,8 +375,7 @@ private static List<MethodDefinition> createDefaultGetterMethods(
385375
return javaMethods;
386376
}
387377

388-
private static List<MethodDefinition> createBuilderHelperMethods(
389-
Service service, TypeStore typeStore) {
378+
private static List<MethodDefinition> createBuilderHelperMethods(Service service, TypeStore typeStore) {
390379
TypeNode builderType = typeStore.get(BUILDER_CLASS_NAME);
391380
MethodDefinition newBuilderMethodOne =
392381
MethodDefinition.builder()
@@ -740,7 +729,6 @@ private static TypeStore createStaticTypes() {
740729
Generated.class,
741730
GoogleCredentialsProvider.class,
742731
InstantiatingExecutorProvider.class,
743-
InstantiatingGrpcChannelProvider.class,
744732
IOException.class,
745733
Operation.class,
746734
OperationCallSettings.class,
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
load("@rules_java//java:defs.bzl", "java_library")
2+
3+
package(default_visibility = ["//visibility:public"])
4+
5+
filegroup(
6+
name = "common_files",
7+
srcs = glob(["*.java"]),
8+
)
9+
10+
java_library(
11+
name = "common",
12+
srcs = [
13+
":common_files",
14+
],
15+
deps = [
16+
"//:service_config_java_proto",
17+
"//src/main/java/com/google/api/generator/engine/ast",
18+
"//src/main/java/com/google/api/generator/engine/writer",
19+
"//src/main/java/com/google/api/generator/gapic:status_java_proto",
20+
"//src/main/java/com/google/api/generator/gapic/composer/comment",
21+
"//src/main/java/com/google/api/generator/gapic/composer/defaultvalue",
22+
"//src/main/java/com/google/api/generator/gapic/composer/resourcename",
23+
"//src/main/java/com/google/api/generator/gapic/composer/samplecode",
24+
"//src/main/java/com/google/api/generator/gapic/composer/store",
25+
"//src/main/java/com/google/api/generator/gapic/composer/utils",
26+
"//src/main/java/com/google/api/generator/gapic/model",
27+
"//src/main/java/com/google/api/generator/gapic/utils",
28+
"//src/main/java/com/google/api/generator/util",
29+
"@com_google_api_api_common//jar",
30+
"@com_google_api_gax_java//gax:gax",
31+
"@com_google_api_gax_java//gax:gax_testlib",
32+
"@com_google_api_gax_java//gax-grpc:gax_grpc",
33+
"@com_google_api_gax_java//gax-grpc:gax_grpc_testlib",
34+
"@com_google_code_findbugs_jsr305//jar",
35+
"@com_google_googleapis//gapic/metadata:metadata_java_proto",
36+
"@com_google_googleapis//google/api:api_java_proto",
37+
"@com_google_googleapis//google/longrunning:longrunning_java_proto",
38+
"@com_google_googleapis//google/rpc:rpc_java_proto",
39+
"@com_google_guava_guava//jar",
40+
"@com_google_protobuf//:protobuf_java",
41+
"@com_google_protobuf//:protobuf_java_util",
42+
"@com_google_protobuf//java/core",
43+
"@io_grpc_grpc_java//api",
44+
"@io_grpc_grpc_java//protobuf",
45+
"@io_grpc_grpc_java//stub",
46+
"@javax_annotation_javax_annotation_api//jar",
47+
"@junit_junit//jar",
48+
"@org_threeten_threetenbp//jar",
49+
],
50+
)
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Copyright 2020 Google LLC
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package com.google.api.generator.gapic.composer.common;
16+
17+
import com.google.api.generator.gapic.model.GapicClass;
18+
import com.google.api.generator.gapic.model.GapicContext;
19+
import com.google.api.generator.gapic.model.Service;
20+
21+
// TODO: remove after Pre-DIREGAPIC refactoring is fully merged
22+
public interface ClassComposer {
23+
GapicClass generate(GapicContext context, Service serivce);
24+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
load("@rules_java//java:defs.bzl", "java_library")
2+
3+
package(default_visibility = ["//visibility:public"])
4+
5+
filegroup(
6+
name = "grpc_files",
7+
srcs = glob(["*.java"]),
8+
)
9+
10+
java_library(
11+
name = "grpc",
12+
srcs = [
13+
":grpc_files",
14+
],
15+
deps = [
16+
"//:service_config_java_proto",
17+
"//src/main/java/com/google/api/generator/engine/ast",
18+
"//src/main/java/com/google/api/generator/engine/writer",
19+
"//src/main/java/com/google/api/generator/gapic:status_java_proto",
20+
"//src/main/java/com/google/api/generator/gapic/composer/comment",
21+
"//src/main/java/com/google/api/generator/gapic/composer/common",
22+
"//src/main/java/com/google/api/generator/gapic/composer/defaultvalue",
23+
"//src/main/java/com/google/api/generator/gapic/composer/resourcename",
24+
"//src/main/java/com/google/api/generator/gapic/composer/samplecode",
25+
"//src/main/java/com/google/api/generator/gapic/composer/store",
26+
"//src/main/java/com/google/api/generator/gapic/composer/utils",
27+
"//src/main/java/com/google/api/generator/gapic/model",
28+
"//src/main/java/com/google/api/generator/gapic/utils",
29+
"//src/main/java/com/google/api/generator/util",
30+
"@com_google_api_api_common//jar",
31+
"@com_google_api_gax_java//gax",
32+
"@com_google_api_gax_java//gax:gax_testlib",
33+
"@com_google_api_gax_java//gax-grpc:gax_grpc",
34+
"@com_google_api_gax_java//gax-grpc:gax_grpc_testlib",
35+
"@com_google_code_findbugs_jsr305//jar",
36+
"@com_google_googleapis//gapic/metadata:metadata_java_proto",
37+
"@com_google_googleapis//google/api:api_java_proto",
38+
"@com_google_googleapis//google/longrunning:longrunning_java_proto",
39+
"@com_google_googleapis//google/rpc:rpc_java_proto",
40+
"@com_google_guava_guava//jar",
41+
"@com_google_protobuf//:protobuf_java",
42+
"@com_google_protobuf//:protobuf_java_util",
43+
"@com_google_protobuf//java/core",
44+
"@io_grpc_grpc_java//api",
45+
"@io_grpc_grpc_java//protobuf",
46+
"@io_grpc_grpc_java//stub",
47+
"@javax_annotation_javax_annotation_api//jar",
48+
"@junit_junit//jar",
49+
"@org_threeten_threetenbp//jar",
50+
],
51+
)

0 commit comments

Comments
 (0)