Skip to content

Commit 8fa9b57

Browse files
Merge branch 'master' into policy-bot-af9e6af6-8c09-4ffc-b3ff-b83860414a08
2 parents d70cb9b + ddc75f9 commit 8fa9b57

185 files changed

Lines changed: 21170 additions & 2483 deletions

File tree

Some content is hidden

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

.github/workflows/ci.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ jobs:
4646
echo "The old one will disappear after 7 days."
4747
4848
- name: Unit Tests
49-
run: bazel --batch test $(bazel query "//src/test/..." | grep "Test$") --noshow_progress
49+
run: bazel --batch test $(bazel query "//src/test/..." | grep "Test$") --noshow_progress --test_output=errors
5050

5151
- name: Integration Tests
52-
run: bazel --batch test //test/integration:asset //test/integration:credentials //test/integration:iam //test/integration:kms //test/integration:logging //test/integration:redis //test/integration:library --noshow_progress
52+
run: bazel --batch test //test/integration:asset //test/integration:credentials //test/integration:iam //test/integration:kms //test/integration:logging //test/integration:pubsub //test/integration:redis //test/integration:library --noshow_progress
5353

5454
- uses: actions/upload-artifact@v2
5555
if: ${{ failure() }}

CHANGELOG.md

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

3+
### [1.0.10](https://www.github.com/googleapis/gapic-generator-java/compare/v1.0.9...v1.0.10) (2021-05-26)
4+
5+
6+
### Miscellaneous Chores
7+
8+
* Pre-DIREGAPIC refactoring ([04c2faa](https://github.com/googleapis/gapic-generator-java/commit/04c2faa191a9b5a10b92392fe8482279c4404803))
9+
10+
### [1.0.9](https://www.github.com/googleapis/gapic-generator-java/compare/v1.0.8...v1.0.9) (2021-05-26)
11+
12+
13+
### Features
14+
15+
* add AST support for lambdas ([#736](https://www.github.com/googleapis/gapic-generator-java/issues/736)) ([9ced678](https://www.github.com/googleapis/gapic-generator-java/commit/9ced6780c7a6b9934dd548002602618566a539d6))
16+
17+
18+
### Bug Fixes
19+
20+
* Support enums in proto HTTP annotations ([#733](https://www.github.com/googleapis/gapic-generator-java/issues/733)) ([f5c7b86](https://www.github.com/googleapis/gapic-generator-java/commit/f5c7b86b43ad71ffe47d8ba039155db601638e1f))
21+
* Support PubSub's _deleted-topic_ pattern ([#739](https://www.github.com/googleapis/gapic-generator-java/issues/739)) ([7d8c62d](https://www.github.com/googleapis/gapic-generator-java/commit/7d8c62d8e8922a3589e631299ecb0287bc41ba2d))
22+
23+
24+
### [1.0.8](https://www.github.com/googleapis/gapic-generator-java/compare/v1.0.7...v1.0.8) (2021-05-24)
25+
26+
27+
### Miscellaneous Chores
28+
29+
* DIREGAPIC refactoring ([ae17e7e](https://github.com/googleapis/gapic-generator-java/commit/ae17e7e9a272b422176962d896e387496b1806e8))
30+
31+
### [1.0.7](https://www.github.com/googleapis/gapic-generator-java/compare/v1.0.6...v1.0.7) (2021-05-21)
32+
33+
34+
### Bug Fixes
35+
36+
* Add PubSub to service.yaml / mixin allowlist ([#729](https://www.github.com/googleapis/gapic-generator-java/issues/729)) ([e7f6d33](https://www.github.com/googleapis/gapic-generator-java/commit/e7f6d33051e335504b05c402d3b98c387a9f0daf))
37+
38+
39+
### [1.0.6](https://www.github.com/googleapis/gapic-generator-java/compare/v1.0.5...v1.0.6) (2021-05-19)
40+
41+
42+
### Bug Fixes
43+
44+
* **mixins:** Gate mixin RPC on HTTP rules, add yaml doc/http overrides ([#727](https://www.github.com/googleapis/gapic-generator-java/issues/727)) ([229da5d](https://www.github.com/googleapis/gapic-generator-java/commit/229da5d94cf7db060abf3ea006a20d1ade804597))
45+
46+
### [1.0.5](https://www.github.com/googleapis/gapic-generator-java/compare/v1.0.4...v1.0.5) (2021-05-17)
47+
48+
49+
### Bug Fixes
50+
51+
* **types:** Reorder nested types for legacy protos w/ java_outer_class in one file ([#724](https://www.github.com/googleapis/gapic-generator-java/issues/724)) ([925356d](https://www.github.com/googleapis/gapic-generator-java/commit/925356d659aed4b8550ce526f1772a706661c246))
52+
53+
### [1.0.4](https://www.github.com/googleapis/gapic-generator-java/compare/v1.0.3...v1.0.4) (2021-05-13)
54+
55+
56+
### Bug Fixes
57+
58+
* **types:** Use fully-qualified message type names ([#723](https://www.github.com/googleapis/gapic-generator-java/issues/723)) ([8a5c36c](https://www.github.com/googleapis/gapic-generator-java/commit/8a5c36ccce7540940ec7a4bf8751971c3741d89d))
59+
* Use the right composers in deprecation unit tests ([#715](https://www.github.com/googleapis/gapic-generator-java/issues/715)) ([2318136](https://www.github.com/googleapis/gapic-generator-java/commit/2318136e49060c3212abfd6337e2c3ceb2c2fc69))
60+
361
### [1.0.3](https://www.github.com/googleapis/gapic-generator-java/compare/v1.0.2...v1.0.3) (2021-04-07)
462

563

dependencies.properties

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,11 @@ version.com_google_protobuf=3.13.0
1111
# Version of google-java-format is downgraded from 1.8 to 1.7, because 1.8 supports java 11 minimum, while our JRE is java 8.
1212
version.google_java_format=1.7
1313
version.com_google_api_common_java=1.9.3
14-
# TODO(miraleung): Update this.
1514
version.com_google_gax_java=1.62.0
1615
version.io_grpc_java=1.30.2
1716

1817
# Common deps.
19-
maven.com_google_guava_guava=com.google.guava:guava:26.0-jre
18+
maven.com_google_guava_guava=com.google.guava:guava:30.1-android
2019
maven.com_google_code_findbugs_jsr305=com.google.code.findbugs:jsr305:3.0.0
2120
maven.com_google_auto_value_auto_value=com.google.auto.value:auto-value:1.7.2
2221
maven.com_google_auto_value_auto_value_annotations=com.google.auto.value:auto-value-annotations:1.7.2

rules_bazel/java/integration_test.bzl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def _diff_integration_goldens_impl(ctx):
2323
rm -rf $(find ./ -type f -name 'PlaceholderFile.java')
2424
rm -r $(find ./ -type d -empty)
2525
cd ..
26-
diff codegen_tmp test/integration/goldens/{api_name}/ > {diff_output}
26+
diff -r codegen_tmp test/integration/goldens/{api_name} > {diff_output}
2727
# Bash `diff` command will return exit code 1 when there are differences between the two
2828
# folders. So we explicitly `exit 0` after the diff command to avoid build failure.
2929
exit 0

rules_java_gapic/java_gapic.bzl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
load("@com_google_api_codegen//rules_gapic:gapic.bzl", "proto_custom_library", "unzipped_srcjar")
1616

17-
SERVICE_YAML_ALLOWLIST = ["clouddms", "cloudkms", "datastream"]
17+
SERVICE_YAML_ALLOWLIST = ["clouddms", "cloudkms", "datastream", "pubsub"]
1818
NO_GRPC_CONFIG_ALLOWLIST = ["library"]
1919

2020
def _java_gapic_postprocess_srcjar_impl(ctx):

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ public interface AstNodeVisitor {
6565

6666
public void visit(AssignmentOperationExpr assignmentOperationExpr);
6767

68+
public void visit(LambdaExpr lambdaExpr);
69+
6870
/** =============================== COMMENT =============================== */
6971
public void visit(LineComment lineComment);
7072

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
// Copyright 2021 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.engine.ast;
16+
17+
import com.google.auto.value.AutoValue;
18+
import com.google.common.base.Preconditions;
19+
import com.google.common.collect.ImmutableList;
20+
import java.util.Arrays;
21+
import java.util.Collections;
22+
import java.util.List;
23+
import java.util.Set;
24+
import java.util.stream.Collectors;
25+
26+
@AutoValue
27+
public abstract class LambdaExpr implements Expr {
28+
@Override
29+
public TypeNode type() {
30+
// TODO(v2): Support set of FunctionalInterface parameterized on the args and return type,
31+
// which would enable assignment to an appropriate variable.
32+
return TypeNode.VOID;
33+
}
34+
35+
public abstract ImmutableList<VariableExpr> arguments();
36+
37+
public abstract ReturnExpr returnExpr();
38+
39+
public abstract ImmutableList<Statement> body();
40+
41+
@Override
42+
public void accept(AstNodeVisitor visitor) {
43+
visitor.visit(this);
44+
}
45+
46+
public static Builder builder() {
47+
return new AutoValue_LambdaExpr.Builder()
48+
.setArguments(Collections.emptyList())
49+
.setBody(Collections.emptyList());
50+
}
51+
52+
@AutoValue.Builder
53+
public abstract static class Builder {
54+
public Builder setArguments(VariableExpr... arguments) {
55+
return setArguments(Arrays.asList(arguments));
56+
}
57+
58+
public abstract Builder setArguments(List<VariableExpr> arguments);
59+
60+
public abstract Builder setBody(List<Statement> body);
61+
62+
public abstract Builder setReturnExpr(ReturnExpr returnExpr);
63+
64+
public Builder setReturnExpr(Expr expr) {
65+
return setReturnExpr(ReturnExpr.builder().setExpr(expr).build());
66+
}
67+
68+
public abstract LambdaExpr autoBuild();
69+
70+
public LambdaExpr build() {
71+
LambdaExpr lambdaExpr = autoBuild();
72+
Preconditions.checkState(
73+
!lambdaExpr.returnExpr().expr().type().equals(TypeNode.VOID),
74+
"Lambdas cannot return void-typed expressions.");
75+
// Must be a declaration.
76+
lambdaExpr.arguments().stream()
77+
.forEach(
78+
varExpr ->
79+
Preconditions.checkState(
80+
varExpr.isDecl(),
81+
String.format(
82+
"Argument %s must be a variable declaration",
83+
varExpr.variable().identifier())));
84+
// No modifiers allowed.
85+
lambdaExpr.arguments().stream()
86+
.forEach(
87+
varExpr ->
88+
Preconditions.checkState(
89+
varExpr.scope().equals(ScopeNode.LOCAL)
90+
&& !varExpr.isStatic()
91+
&& !varExpr.isFinal()
92+
&& !varExpr.isVolatile(),
93+
String.format(
94+
"Argument %s must have local scope, and cannot have static, final, or"
95+
+ " volatile modifiers",
96+
varExpr.variable().identifier())));
97+
98+
// Check that there aren't any arguments with duplicate names.
99+
List<String> allArgNames =
100+
lambdaExpr.arguments().stream()
101+
.map(v -> v.variable().identifier().name())
102+
.collect(Collectors.toList());
103+
Set<String> duplicateArgNames =
104+
allArgNames.stream()
105+
.filter(n -> Collections.frequency(allArgNames, n) > 1)
106+
.collect(Collectors.toSet());
107+
Preconditions.checkState(
108+
duplicateArgNames.isEmpty(),
109+
String.format(
110+
"Lambda arguments cannot have duplicate names: %s", duplicateArgNames.toString()));
111+
112+
return lambdaExpr;
113+
}
114+
}
115+
}

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

Lines changed: 59 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.Collections;
2222
import java.util.LinkedHashSet;
2323
import java.util.List;
24+
import java.util.Set;
2425
import java.util.stream.Collectors;
2526
import javax.annotation.Nullable;
2627

@@ -169,6 +170,8 @@ public Builder setReturnExpr(Expr expr) {
169170
// Private accessors.
170171
abstract String name();
171172

173+
abstract ImmutableList<VariableExpr> arguments();
174+
172175
abstract ImmutableList<CommentStatement> headerCommentStatements();
173176

174177
abstract ImmutableList<AnnotationNode> annotations();
@@ -314,28 +317,66 @@ public MethodDefinition build() {
314317
}
315318
}
316319

317-
for (VariableExpr varExpr : method.arguments()) {
318-
Preconditions.checkState(
319-
varExpr.isDecl(),
320-
String.format(
321-
"Argument %s must be a variable declaration", varExpr.variable().identifier()));
322-
}
323-
324-
for (TypeNode exceptionType : method.throwsExceptions()) {
325-
Preconditions.checkState(
326-
TypeNode.isExceptionType(exceptionType),
327-
String.format("Type %s is not an exception type", exceptionType.reference()));
328-
Preconditions.checkState(
329-
!RUNTIME_EXCEPTION_REFERENCE.isAssignableFrom(exceptionType.reference()),
330-
String.format(
331-
"RuntimeException type %s does not need to be thrown",
332-
exceptionType.reference().name()));
333-
}
320+
performArgumentChecks();
321+
performThrownExceptionChecks();
334322

335323
return method;
336324
}
337325

338-
void performNullChecks() {
326+
private void performArgumentChecks() {
327+
// Must be a declaration.
328+
arguments().stream()
329+
.forEach(
330+
varExpr ->
331+
Preconditions.checkState(
332+
varExpr.isDecl(),
333+
String.format(
334+
"Argument %s must be a variable declaration",
335+
varExpr.variable().identifier())));
336+
// No modifiers allowed.
337+
arguments().stream()
338+
.forEach(
339+
varExpr ->
340+
Preconditions.checkState(
341+
varExpr.scope().equals(ScopeNode.LOCAL)
342+
&& !varExpr.isStatic()
343+
&& !varExpr.isVolatile(),
344+
String.format(
345+
"Argument %s must have local scope, and cannot have \"static\" or"
346+
+ " \"volatile\" modifiers",
347+
varExpr.variable().identifier())));
348+
349+
// Check that there aren't any arguments with duplicate names.
350+
List<String> allArgNames =
351+
arguments().stream()
352+
.map(v -> v.variable().identifier().name())
353+
.collect(Collectors.toList());
354+
Set<String> duplicateArgNames =
355+
allArgNames.stream()
356+
.filter(n -> Collections.frequency(allArgNames, n) > 1)
357+
.collect(Collectors.toSet());
358+
Preconditions.checkState(
359+
duplicateArgNames.isEmpty(),
360+
String.format(
361+
"Lambda arguments cannot have duplicate names: %s", duplicateArgNames.toString()));
362+
}
363+
364+
private void performThrownExceptionChecks() {
365+
throwsExceptions().stream()
366+
.forEach(
367+
exceptionType -> {
368+
Preconditions.checkState(
369+
TypeNode.isExceptionType(exceptionType),
370+
String.format("Type %s is not an exception type", exceptionType.reference()));
371+
Preconditions.checkState(
372+
!RUNTIME_EXCEPTION_REFERENCE.isAssignableFrom(exceptionType.reference()),
373+
String.format(
374+
"RuntimeException type %s does not need to be thrown",
375+
exceptionType.reference().name()));
376+
});
377+
}
378+
379+
private void performNullChecks() {
339380
String contextInfo = String.format("method definition of %s", name());
340381
NodeValidator.checkNoNullElements(headerCommentStatements(), "header comments", contextInfo);
341382
NodeValidator.checkNoNullElements(annotations(), "annotations", contextInfo);

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ public interface Reference extends AstNode {
3434

3535
boolean useFullName();
3636

37+
// The nested types in left-to-right order, if any.
38+
// Example: com.google.Foo.Bar.Car.ThisType will have the outer types listed in the order
39+
// [Foo, Bar, Car].
3740
@Nullable
3841
ImmutableList<String> enclosingClassNames();
3942

src/main/java/com/google/api/generator/engine/writer/ImportWriterVisitor.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import com.google.api.generator.engine.ast.IfStatement;
3838
import com.google.api.generator.engine.ast.InstanceofExpr;
3939
import com.google.api.generator.engine.ast.JavaDocComment;
40+
import com.google.api.generator.engine.ast.LambdaExpr;
4041
import com.google.api.generator.engine.ast.LineComment;
4142
import com.google.api.generator.engine.ast.LogicalOperationExpr;
4243
import com.google.api.generator.engine.ast.MethodDefinition;
@@ -292,6 +293,13 @@ public void visit(AssignmentOperationExpr assignmentOperationExpr) {
292293
assignmentOperationExpr.valueExpr().accept(this);
293294
}
294295

296+
@Override
297+
public void visit(LambdaExpr lambdaExpr) {
298+
variableExpressions(lambdaExpr.arguments());
299+
statements(lambdaExpr.body());
300+
lambdaExpr.returnExpr().accept(this);
301+
}
302+
295303
/** =============================== STATEMENTS =============================== */
296304
@Override
297305
public void visit(ExprStatement exprStatement) {

0 commit comments

Comments
 (0)