Skip to content

Commit 1a6e4f7

Browse files
authored
Merge branch 'master' into dev/resname-flip-flop
2 parents 6c1a4f1 + 8c601f5 commit 1a6e4f7

File tree

86 files changed

+957
-2766
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

86 files changed

+957
-2766
lines changed

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
# Changelog
22

3+
## [2.0.0](https://www.github.com/googleapis/gapic-generator-java/compare/v1.0.17...v2.0.0) (2021-08-03)
4+
5+
6+
### ⚠ BREAKING CHANGES
7+
8+
* remove Exception, unused resname classes for Java major version bump (#814)
9+
10+
### Features
11+
12+
* Lambda-ize single-method anon classes (Java 8+) ([#815](https://www.github.com/googleapis/gapic-generator-java/issues/815)) ([19b661c](https://www.github.com/googleapis/gapic-generator-java/commit/19b661cc78757e37ce93bae96eb81cb4ac32658b))
13+
* remove Exception, unused resname classes for Java major version bump ([#814](https://www.github.com/googleapis/gapic-generator-java/issues/814)) ([8abece2](https://www.github.com/googleapis/gapic-generator-java/commit/8abece20dd20e9ac8134df04301ce5b6e2ab76ad))
14+
315
### [1.0.17](https://www.github.com/googleapis/gapic-generator-java/compare/v1.0.16...v1.0.17) (2021-08-02)
416

517

src/main/java/com/google/api/generator/engine/ast/MethodInvocationExpr.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,9 @@ public MethodInvocationExpr build() {
126126
"generics",
127127
String.format("method invocation of %s", methodInvocationExpr.methodIdentifier().name()));
128128

129+
// TODO(v2): If type-checking is ever added for arguments, beware of lambdas and their type
130+
// workarounds.
131+
129132
return methodInvocationExpr;
130133
}
131134
}

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
import com.google.api.generator.engine.ast.CommentStatement;
1818
import com.google.api.generator.engine.ast.JavaDocComment;
19-
import com.google.api.generator.engine.ast.LineComment;
2019
import com.google.api.generator.engine.ast.TypeNode;
2120
import com.google.api.generator.gapic.utils.JavaStyle;
2221
import com.google.common.base.Preconditions;
@@ -80,7 +79,6 @@ public class SettingsCommentComposer {
8079

8180
public static final List<CommentStatement> APPLY_TO_ALL_UNARY_METHODS_METHOD_COMMENTS =
8281
Arrays.asList(
83-
LineComment.withComment("NEXT_MAJOR_VER: remove 'throws Exception'."),
8482
JavaDocComment.builder()
8583
.addComment(
8684
"Applies the given settings updater function to all of the unary API methods"

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -648,8 +648,6 @@ private static MethodDefinition createNestedBuilderApplyToAllUnaryMethod(
648648
.setReturnType(builderType)
649649
.setName(javaMethodName)
650650
.setArguments(Arrays.asList(settingsUpdaterVarExpr.toBuilder().setIsDecl(true).build()))
651-
.setThrowsExceptions(
652-
Arrays.asList(TypeNode.withReference(ConcreteReference.withClazz(Exception.class))))
653651
.setBody(Arrays.asList(ExprStatement.withExpr(applyMethodExpr)))
654652
.setReturnExpr(ValueExpr.withValue(ThisObjectValue.withType(builderType)))
655653
.build();

src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceStubSettingsClassComposer.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -613,13 +613,13 @@ private static Expr createPagedListDescriptorAssignExpr(
613613
.setReturnType(returnType)
614614
.build();
615615
thenExpr =
616-
MethodInvocationExpr.builder()
617-
.setStaticReferenceType(
618-
TypeNode.withReference(ConcreteReference.withClazz(ImmutableList.class)))
619-
.setGenerics(Arrays.asList(repeatedResponseType.reference()))
620-
.setMethodName("of")
621-
.setReturnType(returnType)
622-
.build();
616+
MethodInvocationExpr.builder()
617+
.setStaticReferenceType(
618+
TypeNode.withReference(ConcreteReference.withClazz(ImmutableList.class)))
619+
.setGenerics(Arrays.asList(repeatedResponseType.reference()))
620+
.setMethodName("of")
621+
.setReturnType(returnType)
622+
.build();
623623
elseExpr = getResponsesExpr;
624624
}
625625
// While protobufs should not be null, this null-check is needed to protect against NPEs
@@ -1722,7 +1722,6 @@ private static MethodDefinition createNestedClassApplyToAllUnaryMethodsMethod(
17221722
.setReturnType(returnType)
17231723
.setName(methodName)
17241724
.setArguments(settingsUpdaterVarExpr.toBuilder().setIsDecl(true).build())
1725-
.setThrowsExceptions(Arrays.asList(TypeNode.withExceptionClazz(Exception.class)))
17261725
.setBody(Arrays.asList(ExprStatement.withExpr(superApplyExpr)))
17271726
.setReturnExpr(returnExpr)
17281727
.build();

src/main/java/com/google/api/generator/gapic/composer/common/ServiceClientClassComposer.java

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,14 @@
3030
import com.google.api.gax.rpc.ServerStreamingCallable;
3131
import com.google.api.gax.rpc.UnaryCallable;
3232
import com.google.api.generator.engine.ast.AnnotationNode;
33-
import com.google.api.generator.engine.ast.AnonymousClassExpr;
3433
import com.google.api.generator.engine.ast.AssignmentExpr;
3534
import com.google.api.generator.engine.ast.CastExpr;
3635
import com.google.api.generator.engine.ast.ClassDefinition;
3736
import com.google.api.generator.engine.ast.CommentStatement;
3837
import com.google.api.generator.engine.ast.ConcreteReference;
3938
import com.google.api.generator.engine.ast.Expr;
4039
import com.google.api.generator.engine.ast.ExprStatement;
40+
import com.google.api.generator.engine.ast.LambdaExpr;
4141
import com.google.api.generator.engine.ast.MethodDefinition;
4242
import com.google.api.generator.engine.ast.MethodInvocationExpr;
4343
import com.google.api.generator.engine.ast.NewObjectExpr;
@@ -1165,23 +1165,14 @@ private static ClassDefinition createNestedRpcPagedResponseClass(
11651165
.setClazz(ApiFunction.class)
11661166
.setGenerics(Arrays.asList(methodPageType.reference(), thisClassType.reference()))
11671167
.build());
1168+
1169+
// Overrides ApiFunction.apply.
1170+
// (https://github.com/googleapis/api-common-java/blob/debf25960dea0367b0d3b5e16d57d76c1d01947e/src/main/java/com/google/api/core/ApiFunction.java).
11681171
Expr pageToTransformExpr =
1169-
AnonymousClassExpr.builder()
1170-
.setType(anonClassType)
1171-
.setMethods(
1172-
Arrays.asList(
1173-
MethodDefinition.builder()
1174-
.setIsOverride(true)
1175-
.setScope(ScopeNode.PUBLIC)
1176-
.setReturnType(thisClassType)
1177-
.setName("apply")
1178-
.setArguments(inputVarExpr.toBuilder().setIsDecl(true).build())
1179-
.setReturnExpr(
1180-
NewObjectExpr.builder()
1181-
.setType(thisClassType)
1182-
.setArguments(inputVarExpr)
1183-
.build())
1184-
.build()))
1172+
LambdaExpr.builder()
1173+
.setArguments(inputVarExpr.toBuilder().setIsDecl(true).build())
1174+
.setReturnExpr(
1175+
NewObjectExpr.builder().setType(thisClassType).setArguments(inputVarExpr).build())
11851176
.build();
11861177

11871178
// createAsync method - return expression.
@@ -1739,9 +1730,7 @@ private static boolean isProtoEmptyType(TypeNode type) {
17391730
private static void updateGapicMetadata(
17401731
GapicContext context, String protoPackage, String javaPackage) {
17411732
context.updateGapicMetadata(
1742-
context
1743-
.gapicMetadata()
1744-
.toBuilder()
1733+
context.gapicMetadata().toBuilder()
17451734
.setProtoPackage(protoPackage)
17461735
.setLibraryPackage(javaPackage)
17471736
.build());

src/main/java/com/google/api/generator/gapic/composer/grpc/GrpcServiceStubClassComposer.java

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,12 @@
1616

1717
import com.google.api.gax.grpc.GrpcCallSettings;
1818
import com.google.api.gax.grpc.GrpcStubCallableFactory;
19-
import com.google.api.gax.rpc.RequestParamsExtractor;
20-
import com.google.api.generator.engine.ast.AnonymousClassExpr;
2119
import com.google.api.generator.engine.ast.AssignmentExpr;
2220
import com.google.api.generator.engine.ast.ConcreteReference;
2321
import com.google.api.generator.engine.ast.EnumRefExpr;
2422
import com.google.api.generator.engine.ast.Expr;
2523
import com.google.api.generator.engine.ast.ExprStatement;
24+
import com.google.api.generator.engine.ast.LambdaExpr;
2625
import com.google.api.generator.engine.ast.MethodDefinition;
2726
import com.google.api.generator.engine.ast.MethodInvocationExpr;
2827
import com.google.api.generator.engine.ast.ScopeNode;
@@ -223,7 +222,7 @@ protected Expr createTransportSettingsInitExpr(
223222
MethodInvocationExpr.builder()
224223
.setExprReferenceExpr(callSettingsBuilderExpr)
225224
.setMethodName("setParamsExtractor")
226-
.setArguments(createRequestParamsExtractorAnonClass(method))
225+
.setArguments(createRequestParamsExtractorClassInstance(method))
227226
.build();
228227
}
229228

@@ -255,7 +254,7 @@ protected String getProtoRpcFullMethodName(Service protoService, Method protoMet
255254
return String.format("google.iam.v1.IAMPolicy/%s", protoMethod.name());
256255
}
257256

258-
private AnonymousClassExpr createRequestParamsExtractorAnonClass(Method method) {
257+
private LambdaExpr createRequestParamsExtractorClassInstance(Method method) {
259258
Preconditions.checkState(
260259
method.hasHttpBindings(), String.format("Method %s has no HTTP binding", method.name()));
261260

@@ -339,24 +338,13 @@ private AnonymousClassExpr createRequestParamsExtractorAnonClass(Method method)
339338
.setReturnType(returnType)
340339
.build();
341340

342-
MethodDefinition extractMethod =
343-
MethodDefinition.builder()
344-
.setIsOverride(true)
345-
.setScope(ScopeNode.PUBLIC)
346-
.setReturnType(returnType)
347-
.setName("extract")
348-
.setArguments(requestVarExpr.toBuilder().setIsDecl(true).build())
349-
.setBody(
350-
bodyExprs.stream().map(e -> ExprStatement.withExpr(e)).collect(Collectors.toList()))
351-
.setReturnExpr(returnExpr)
352-
.build();
353-
354-
TypeNode anonClassType =
355-
TypeNode.withReference(
356-
ConcreteReference.builder()
357-
.setClazz(RequestParamsExtractor.class)
358-
.setGenerics(method.inputType().reference())
359-
.build());
360-
return AnonymousClassExpr.builder().setType(anonClassType).setMethods(extractMethod).build();
341+
// Overrides extract().
342+
// https://github.com/googleapis/gax-java/blob/8d45d186e36ae97b789a6f89d80ae5213a773b65/gax/src/main/java/com/google/api/gax/rpc/RequestParamsExtractor.java#L55
343+
return LambdaExpr.builder()
344+
.setArguments(requestVarExpr.toBuilder().setIsDecl(true).build())
345+
.setBody(
346+
bodyExprs.stream().map(e -> ExprStatement.withExpr(e)).collect(Collectors.toList()))
347+
.setReturnExpr(returnExpr)
348+
.build();
361349
}
362350
}

src/main/java/com/google/api/generator/gapic/composer/grpc/MockServiceImplClassComposer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ private static MethodDefinition createGenericClientStreamingProtoMethodOverride(
354354
AssignmentExpr.builder()
355355
.setVariableExpr(requestObserverVarExpr.toBuilder().setIsDecl(true).build())
356356
.setValueExpr(
357-
createStreamObserverAnonymousClassExpr(
357+
createStreamObserverClassInstance(
358358
protoMethod,
359359
returnType,
360360
responseObserverVarExpr,
@@ -364,7 +364,7 @@ private static MethodDefinition createGenericClientStreamingProtoMethodOverride(
364364
.build();
365365
}
366366

367-
private static AnonymousClassExpr createStreamObserverAnonymousClassExpr(
367+
private static AnonymousClassExpr createStreamObserverClassInstance(
368368
Method protoMethod,
369369
TypeNode classType,
370370
VariableExpr responseObserverVarExpr,

src/main/java/com/google/api/generator/gapic/composer/rest/HttpJsonServiceStubClassComposer.java

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@
2424
import com.google.api.gax.httpjson.ProtoMessageResponseParser;
2525
import com.google.api.gax.httpjson.ProtoRestSerializer;
2626
import com.google.api.generator.engine.ast.AnnotationNode;
27-
import com.google.api.generator.engine.ast.AnonymousClassExpr;
2827
import com.google.api.generator.engine.ast.AssignmentExpr;
2928
import com.google.api.generator.engine.ast.ConcreteReference;
3029
import com.google.api.generator.engine.ast.EnumRefExpr;
3130
import com.google.api.generator.engine.ast.Expr;
3231
import com.google.api.generator.engine.ast.ExprStatement;
3332
import com.google.api.generator.engine.ast.IfStatement;
33+
import com.google.api.generator.engine.ast.LambdaExpr;
3434
import com.google.api.generator.engine.ast.MethodDefinition;
3535
import com.google.api.generator.engine.ast.MethodInvocationExpr;
3636
import com.google.api.generator.engine.ast.NewObjectExpr;
@@ -277,7 +277,7 @@ private List<Expr> getRequestFormatterExpr(Method protoMethod) {
277277
ValueExpr.withValue(
278278
StringObjectValue.withValue(
279279
protoMethod.httpBindings().patternLowerCamel())),
280-
createFieldsExtractorAnonClass(
280+
createFieldsExtractorClassInstance(
281281
protoMethod,
282282
extractorVarType,
283283
protoMethod.httpBindings().pathParameters(),
@@ -303,7 +303,7 @@ private List<Expr> getRequestFormatterExpr(Method protoMethod) {
303303
.apply(
304304
"setQueryParamsExtractor",
305305
Arrays.asList(
306-
createFieldsExtractorAnonClass(
306+
createFieldsExtractorClassInstance(
307307
protoMethod,
308308
extractorVarType,
309309
protoMethod.httpBindings().queryParameters(),
@@ -316,7 +316,7 @@ private List<Expr> getRequestFormatterExpr(Method protoMethod) {
316316
.apply(
317317
"setRequestBodyExtractor",
318318
Arrays.asList(
319-
createFieldsExtractorAnonClass(
319+
createFieldsExtractorClassInstance(
320320
protoMethod,
321321
extractorVarType,
322322
protoMethod.httpBindings().bodyParameters(),
@@ -356,7 +356,7 @@ private List<Expr> setResponseParserExpr(Method protoMethod) {
356356
return Collections.singletonList(expr);
357357
}
358358

359-
private Expr createFieldsExtractorAnonClass(
359+
private Expr createFieldsExtractorClassInstance(
360360
Method method,
361361
TypeNode extractorReturnType,
362362
Set<HttpBinding> httpBindingFieldNames,
@@ -495,25 +495,13 @@ private Expr createFieldsExtractorAnonClass(
495495
}
496496
}
497497

498-
MethodDefinition extractMethod =
499-
MethodDefinition.builder()
500-
.setIsOverride(true)
501-
.setScope(ScopeNode.PUBLIC)
502-
.setReturnType(extractorReturnType)
503-
.setName("extract")
504-
.setArguments(requestVarExpr.toBuilder().setIsDecl(true).build())
505-
.setBody(bodyStatements)
506-
.setReturnExpr(returnExpr)
507-
.build();
508-
509-
TypeNode anonClassType =
510-
TypeNode.withReference(
511-
ConcreteReference.builder()
512-
.setClazz(FieldsExtractor.class)
513-
.setGenerics(method.inputType().reference(), extractorReturnType.reference())
514-
.build());
515-
516-
return AnonymousClassExpr.builder().setType(anonClassType).setMethods(extractMethod).build();
498+
// Overrides FieldsExtractor
499+
// (https://github.com/googleapis/gax-java/blob/12b18ee255d3fabe13bb3969df40753b29f830d5/gax-httpjson/src/main/java/com/google/api/gax/httpjson/FieldsExtractor.java).
500+
return LambdaExpr.builder()
501+
.setArguments(requestVarExpr.toBuilder().setIsDecl(true).build())
502+
.setBody(bodyStatements)
503+
.setReturnExpr(returnExpr)
504+
.build();
517505
}
518506

519507
private List<Expr> getHttpMethodTypeExpr(Method protoMethod) {

src/main/java/com/google/api/generator/gapic/protoparser/Parser.java

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,9 @@ public static GapicContext parse(CodeGeneratorRequest request) {
142142
Map<String, ResourceName> resourceNames = parseResourceNames(request);
143143
messages = updateResourceNamesInMessages(messages, resourceNames.values());
144144

145+
// Contains only resource names that are actually used. That is, resource name definitions
146+
// or references that are simply defined, but not used, will not have corresponding Java helper
147+
// classes generated.
145148
Set<ResourceName> outputArgResourceNames = new HashSet<>();
146149
List<Service> mixinServices = new ArrayList<>();
147150
Transport transport = Transport.parse(transportOpt.orElse(Transport.GRPC.toString()));
@@ -157,33 +160,6 @@ public static GapicContext parse(CodeGeneratorRequest request) {
157160
transport);
158161

159162
Preconditions.checkState(!services.isEmpty(), "No services found to generate");
160-
Function<ResourceName, String> typeNameFn =
161-
r -> r.resourceTypeString().substring(r.resourceTypeString().indexOf("/") + 1);
162-
Function<Set<ResourceName>, Set<String>> typeStringSetFn =
163-
sr -> sr.stream().map(r -> typeNameFn.apply(r)).collect(Collectors.toSet());
164-
165-
// Include all resource names present in message types for backwards-compatibility with the
166-
// monolith. In the future, this should be removed on a client library major semver update.
167-
// Resolve type name collisions with the ones present in the method arguments.
168-
final Set<String> typeStringSet = typeStringSetFn.apply(outputArgResourceNames);
169-
outputArgResourceNames.addAll(
170-
resourceNames.values().stream()
171-
.filter(r -> r.hasParentMessageName() && !typeStringSet.contains(typeNameFn.apply(r)))
172-
.collect(Collectors.toSet()));
173-
174-
String servicePackage = services.get(0).pakkage();
175-
Map<String, ResourceName> patternsToResourceNames =
176-
ResourceParserHelpers.createPatternResourceNameMap(resourceNames);
177-
for (ResourceReference resourceReference : outputResourceReferencesSeen) {
178-
final Set<String> interimTypeStringSet = typeStringSetFn.apply(outputArgResourceNames);
179-
outputArgResourceNames.addAll(
180-
ResourceReferenceParser.parseResourceNames(
181-
resourceReference, servicePackage, null, resourceNames, patternsToResourceNames)
182-
.stream()
183-
.filter(r -> !interimTypeStringSet.contains(typeNameFn.apply(r)))
184-
.collect(Collectors.toSet()));
185-
}
186-
187163
return GapicContext.builder()
188164
.setServices(services)
189165
.setMixinServices(mixinServices)

0 commit comments

Comments
 (0)