Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0807672

Browse files
[ggj][ast][protos] feat: support deeply-nested types in AST and proto message parsing (#421)
* fix: support non-name fields with res-refs in resname def parsing * fix: add workaround for missing default_host and oauth_scopes annotation * [ggj][infra][3/5]feat: add goldens update bazel rules for Redis API (#396) * goldens update bazel rules * clean up * [ggj][infra][4/5]feat: add goldens update bazel rules for Asset API (#397) * goldens update bazel rules * clean up * goldens update rule for asset API * update goldens * [ggj][infra][3/5]feat: add goldens update bazel rules for Redis API (#396) * goldens update bazel rules * clean up * [ggj][infra][4/5]feat: add goldens update bazel rules for Asset API (#397) * goldens update bazel rules * clean up * goldens update rule for asset API * update goldens * [ggj][infra][3/5]feat: add goldens update bazel rules for Redis API (#396) * goldens update bazel rules * clean up * [ggj][infra][4/5]feat: add goldens update bazel rules for Asset API (#397) * goldens update bazel rules * clean up * goldens update rule for asset API * update goldens * fix: clarify LRO parsing error messages * feat: support deeply-nested types in AST and proto message parsing Co-authored-by: Xiaozhen Liu <[email protected]>
1 parent 19d63a9 commit 0807672

20 files changed

+225
-78
lines changed

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,18 @@ public String pakkage() {
8989
public abstract boolean useFullName();
9090

9191
@Override
92-
public String enclosingClassName() {
92+
public ImmutableList<String> enclosingClassNames() {
9393
if (!hasEnclosingClass()) {
94-
return null;
94+
return ImmutableList.of();
9595
}
96-
return clazz().getEnclosingClass().getSimpleName();
96+
// The innermost type will be the last element in the list.
97+
ImmutableList.Builder<String> listBuilder = new ImmutableList.Builder<>();
98+
Class currentClz = clazz();
99+
while (currentClz.getEnclosingClass() != null) {
100+
listBuilder.add(currentClz.getEnclosingClass().getSimpleName());
101+
currentClz = currentClz.getEnclosingClass();
102+
}
103+
return listBuilder.build();
97104
}
98105

99106
@Override

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public interface Reference {
3030
boolean useFullName();
3131

3232
@Nullable
33-
String enclosingClassName();
33+
ImmutableList<String> enclosingClassNames();
3434

3535
@Nullable
3636
Reference wildcardUpperBound();

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

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
package com.google.api.generator.engine.ast;
1616

1717
import com.google.auto.value.AutoValue;
18-
import com.google.common.base.Strings;
1918
import com.google.common.collect.ImmutableList;
2019
import java.util.Arrays;
20+
import java.util.Collections;
2121
import java.util.List;
2222
import java.util.Objects;
2323
import javax.annotation.Nullable;
@@ -43,7 +43,7 @@ public abstract class VaporReference implements Reference {
4343

4444
@Nullable
4545
@Override
46-
public abstract String enclosingClassName();
46+
public abstract ImmutableList<String> enclosingClassNames();
4747

4848
@Nullable
4949
public abstract Reference supertypeReference();
@@ -56,9 +56,9 @@ public Reference wildcardUpperBound() {
5656

5757
@Override
5858
public String fullName() {
59-
// TODO(unsupported): Nested classes with depth greater than 1.
6059
if (hasEnclosingClass()) {
61-
return String.format("%s.%s.%s", pakkage(), enclosingClassName(), plainName());
60+
return String.format(
61+
"%s.%s.%s", pakkage(), String.join(DOT, enclosingClassNames()), plainName());
6262
}
6363
return String.format("%s.%s", pakkage(), plainName());
6464
}
@@ -68,7 +68,7 @@ public String fullName() {
6868

6969
@Override
7070
public boolean hasEnclosingClass() {
71-
return !Strings.isNullOrEmpty(enclosingClassName());
71+
return !enclosingClassNames().isEmpty();
7272
}
7373

7474
@Override
@@ -86,7 +86,7 @@ public boolean isSupertypeOrEquals(Reference other) {
8686
VaporReference ref = (VaporReference) other;
8787
return pakkage().equals(ref.pakkage())
8888
&& plainName().equals(ref.plainName())
89-
&& Objects.equals(enclosingClassName(), ref.enclosingClassName());
89+
&& Objects.equals(enclosingClassNames(), ref.enclosingClassNames());
9090
}
9191

9292
@Override
@@ -112,14 +112,14 @@ public boolean equals(Object o) {
112112
return pakkage().equals(ref.pakkage())
113113
&& name().equals(ref.name())
114114
&& generics().equals(ref.generics())
115-
&& Objects.equals(enclosingClassName(), ref.enclosingClassName());
115+
&& Objects.equals(enclosingClassNames(), ref.enclosingClassNames());
116116
}
117117

118118
@Override
119119
public int hashCode() {
120120
int hash = 17 * pakkage().hashCode() + 19 * name().hashCode() + 23 * generics().hashCode();
121-
if (!Strings.isNullOrEmpty(enclosingClassName())) {
122-
hash += 29 * enclosingClassName().hashCode();
121+
if (!enclosingClassNames().isEmpty()) {
122+
hash += 29 * enclosingClassNames().hashCode();
123123
}
124124
return hash;
125125
}
@@ -133,7 +133,8 @@ public static Builder builder() {
133133
return new AutoValue_VaporReference.Builder()
134134
.setUseFullName(false)
135135
.setGenerics(ImmutableList.of())
136-
.setIsStaticImport(false);
136+
.setIsStaticImport(false)
137+
.setEnclosingClassNames(Collections.emptyList());
137138
}
138139

139140
// Private.
@@ -153,7 +154,11 @@ public Builder setGenerics(Reference... references) {
153154

154155
public abstract Builder setGenerics(List<Reference> clazzes);
155156

156-
public abstract Builder setEnclosingClassName(String enclosingClassName);
157+
public Builder setEnclosingClassNames(String... enclosingClassNames) {
158+
return setEnclosingClassNames(Arrays.asList(enclosingClassNames));
159+
}
160+
161+
public abstract Builder setEnclosingClassNames(List<String> enclosingClassNames);
157162

158163
public abstract Builder setIsStaticImport(boolean isStaticImport);
159164

@@ -166,8 +171,7 @@ public Builder setGenerics(Reference... references) {
166171

167172
abstract ImmutableList<Reference> generics();
168173

169-
@Nullable
170-
abstract String enclosingClassName();
174+
abstract ImmutableList<String> enclosingClassNames();
171175

172176
abstract boolean isStaticImport();
173177

@@ -180,11 +184,11 @@ public VaporReference build() {
180184

181185
setPlainName(name());
182186

183-
setIsStaticImport(enclosingClassName() != null && isStaticImport());
187+
setIsStaticImport(!enclosingClassNames().isEmpty() && isStaticImport());
184188

185189
StringBuilder sb = new StringBuilder();
186-
if (enclosingClassName() != null && !isStaticImport()) {
187-
sb.append(enclosingClassName());
190+
if (!enclosingClassNames().isEmpty() && !isStaticImport()) {
191+
sb.append(String.join(DOT, enclosingClassNames()));
188192
sb.append(DOT);
189193
}
190194

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
import javax.annotation.Nullable;
6969

7070
public class ImportWriterVisitor implements AstNodeVisitor {
71+
private static final String DOT = ".";
7172
private static final String NEWLINE = "\n";
7273
private static final String PKG_JAVA_LANG = "java.lang";
7374

@@ -423,7 +424,8 @@ private void references(List<Reference> refs) {
423424

424425
if (ref.isStaticImport()
425426
&& !Strings.isNullOrEmpty(currentClassName)
426-
&& ref.enclosingClassName().equals(currentClassName)) {
427+
&& !ref.enclosingClassNames().isEmpty()
428+
&& ref.enclosingClassNames().contains(currentClassName)) {
427429
continue;
428430
}
429431

@@ -432,7 +434,8 @@ private void references(List<Reference> refs) {
432434
staticImports.add(ref.fullName());
433435
} else {
434436
if (ref.hasEnclosingClass()) {
435-
imports.add(String.format("%s.%s", ref.pakkage(), ref.enclosingClassName()));
437+
imports.add(
438+
String.format("%s.%s", ref.pakkage(), String.join(DOT, ref.enclosingClassNames())));
436439
} else {
437440
imports.add(ref.fullName());
438441
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ private static MethodDefinition createGetRequestBuilderMethod(
153153
TypeNode builderType =
154154
TypeNode.withReference(
155155
VaporReference.builder()
156-
.setEnclosingClassName(method.inputType().reference().name())
156+
.setEnclosingClassNames(method.inputType().reference().name())
157157
.setName("Builder")
158158
.setPakkage(method.inputType().reference().pakkage())
159159
.build());

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1049,7 +1049,7 @@ private static Map<String, TypeNode> createDynamicTypes(Service service, String
10491049
VaporReference.builder()
10501050
.setName(String.format(PAGED_RESPONSE_TYPE_NAME_PATTERN, m.name()))
10511051
.setPakkage(service.pakkage())
1052-
.setEnclosingClassName(String.format("%sClient", service.name()))
1052+
.setEnclosingClassNames(String.format("%sClient", service.name()))
10531053
.setIsStaticImport(true)
10541054
.build()))));
10551055
return types;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1575,7 +1575,7 @@ private static Map<String, TypeNode> createDynamicTypes(
15751575
VaporReference.builder()
15761576
.setName("Builder")
15771577
.setPakkage(resourceName.pakkage())
1578-
.setEnclosingClassName(thisClassName)
1578+
.setEnclosingClassNames(thisClassName)
15791579
.setIsStaticImport(true)
15801580
.build()));
15811581

@@ -1591,7 +1591,7 @@ private static Map<String, TypeNode> createDynamicTypes(
15911591
VaporReference.builder()
15921592
.setName(s)
15931593
.setPakkage(resourceName.pakkage())
1594-
.setEnclosingClassName(thisClassName)
1594+
.setEnclosingClassNames(thisClassName)
15951595
.setIsStaticImport(true)
15961596
.build()))));
15971597
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1441,7 +1441,7 @@ private static Map<String, TypeNode> createVaporTypes(Service service) {
14411441
VaporReference.builder()
14421442
.setName(
14431443
String.format(t, JavaStyle.toUpperCamelCase(method.name())))
1444-
.setEnclosingClassName(getClientClassName(service.name()))
1444+
.setEnclosingClassNames(getClientClassName(service.name()))
14451445
.setPakkage(service.pakkage())
14461446
.setIsStaticImport(true) // Same class, so they won't be imported.
14471447
.build()))));
@@ -1466,7 +1466,7 @@ private static Map<String, TypeNode> createVaporTypes(Service service) {
14661466
VaporReference.builder()
14671467
.setName(String.format(PAGED_RESPONSE_TYPE_NAME_PATTERN, m.name()))
14681468
.setPakkage(service.pakkage())
1469-
.setEnclosingClassName(getClientClassName(service.name()))
1469+
.setEnclosingClassNames(getClientClassName(service.name()))
14701470
.setIsStaticImport(true)
14711471
.build()))));
14721472
return types;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1749,7 +1749,7 @@ private static Map<String, TypeNode> createDynamicTypes(Service service) {
17491749
VaporReference.builder()
17501750
.setName(String.format(PAGED_RESPONSE_TYPE_NAME_PATTERN, m.name()))
17511751
.setPakkage(service.pakkage())
1752-
.setEnclosingClassName(getClientClassName(service.name()))
1752+
.setEnclosingClassNames(getClientClassName(service.name()))
17531753
.setIsStaticImport(true)
17541754
.build()))));
17551755
return types;
@@ -1864,7 +1864,7 @@ private static TypeNode getPagedResponseType(Method method, Service service) {
18641864
VaporReference.builder()
18651865
.setName(String.format(PAGED_RESPONSE_TYPE_NAME_PATTERN, method.name()))
18661866
.setPakkage(service.pakkage())
1867-
.setEnclosingClassName(getClientClassName(service.name()))
1867+
.setEnclosingClassNames(getClientClassName(service.name()))
18681868
.setIsStaticImport(true)
18691869
.build());
18701870
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ private static MethodDefinition createCreatorMethod(
230230
TypeNode.withReference(
231231
VaporReference.builder()
232232
.setName("Builder")
233-
.setEnclosingClassName(String.format("%sSettings", service.name()))
233+
.setEnclosingClassNames(String.format("%sSettings", service.name()))
234234
.setPakkage(service.pakkage())
235235
.build());
236236
Expr returnMethodExpr =
@@ -712,7 +712,7 @@ private static Map<String, TypeNode> createDynamicTypes(Service service) {
712712
TypeNode.withReference(
713713
VaporReference.builder()
714714
.setName(BUILDER_CLASS_NAME)
715-
.setEnclosingClassName(getThisClassName(service.name()))
715+
.setEnclosingClassNames(getThisClassName(service.name()))
716716
.setPakkage(service.pakkage())
717717
.setIsStaticImport(true)
718718
.build()));
@@ -729,7 +729,7 @@ private static Map<String, TypeNode> createDynamicTypes(Service service) {
729729
VaporReference.builder()
730730
.setName(String.format(PAGED_RESPONSE_TYPE_NAME_PATTERN, m.name()))
731731
.setPakkage(service.pakkage())
732-
.setEnclosingClassName(getClientClassName(service.name()))
732+
.setEnclosingClassNames(getClientClassName(service.name()))
733733
.setIsStaticImport(true)
734734
.build()))));
735735
return types;
@@ -828,7 +828,7 @@ private static TypeNode getStubSettingsBuilderType(Service service) {
828828
VaporReference.builder()
829829
.setPakkage(service.pakkage())
830830
.setName(BUILDER_CLASS_NAME)
831-
.setEnclosingClassName(getStubSettingsClassName(service.name()))
831+
.setEnclosingClassNames(getStubSettingsClassName(service.name()))
832832
.build());
833833
}
834834

0 commit comments

Comments
 (0)