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

Skip to content

Commit 01b8051

Browse files
committed
feat: add PackageInfoDefinition AST node
1 parent 2691d8c commit 01b8051

File tree

6 files changed

+174
-3
lines changed

6 files changed

+174
-3
lines changed

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
@@ -93,4 +93,6 @@ public interface AstNodeVisitor {
9393
public void visit(MethodDefinition methodDefinition);
9494

9595
public void visit(ClassDefinition classDefinition);
96+
97+
public void visit(PackageInfoDefinition packageInfoDefinition);
9698
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
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.engine.ast;
16+
17+
import com.google.auto.value.AutoValue;
18+
import com.google.common.collect.ImmutableList;
19+
import java.util.Arrays;
20+
import java.util.Collections;
21+
import java.util.List;
22+
23+
@AutoValue
24+
public abstract class PackageInfoDefinition implements AstNode {
25+
public abstract String pakkage();
26+
27+
public abstract ImmutableList<CommentStatement> fileHeader();
28+
29+
public abstract ImmutableList<CommentStatement> headerCommentStatements();
30+
31+
public abstract ImmutableList<AnnotationNode> annotations();
32+
33+
@Override
34+
public void accept(AstNodeVisitor visitor) {
35+
visitor.visit(this);
36+
}
37+
38+
public static Builder builder() {
39+
return new AutoValue_PackageInfoDefinition.Builder()
40+
.setFileHeader(Collections.emptyList())
41+
.setHeaderCommentStatements(Collections.emptyList())
42+
.setAnnotations(Collections.emptyList());
43+
}
44+
45+
@AutoValue.Builder
46+
public abstract static class Builder {
47+
public abstract Builder setPakkage(String pakkage);
48+
49+
public Builder setFileHeader(CommentStatement... headerComments) {
50+
return setFileHeader(Arrays.asList(headerComments));
51+
}
52+
53+
public abstract Builder setFileHeader(List<CommentStatement> fileHeader);
54+
55+
public Builder setHeaderCommentStatements(CommentStatement... comments) {
56+
return setHeaderCommentStatements(Arrays.asList(comments));
57+
}
58+
59+
public abstract Builder setHeaderCommentStatements(
60+
List<CommentStatement> headerCommentStatements);
61+
62+
public Builder setAnnotations(AnnotationNode... annotations) {
63+
return setAnnotations(Arrays.asList(annotations));
64+
}
65+
66+
public abstract Builder setAnnotations(List<AnnotationNode> annotations);
67+
68+
public abstract PackageInfoDefinition build();
69+
}
70+
}

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

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import com.google.api.generator.engine.ast.MethodDefinition;
4141
import com.google.api.generator.engine.ast.MethodInvocationExpr;
4242
import com.google.api.generator.engine.ast.NewObjectExpr;
43+
import com.google.api.generator.engine.ast.PackageInfoDefinition;
4344
import com.google.api.generator.engine.ast.Reference;
4445
import com.google.api.generator.engine.ast.ReferenceConstructorExpr;
4546
import com.google.api.generator.engine.ast.RelationalOperationExpr;
@@ -56,12 +57,15 @@
5657
import com.google.api.generator.engine.ast.VariableExpr;
5758
import com.google.api.generator.engine.ast.WhileStatement;
5859
import com.google.common.base.Preconditions;
60+
import com.google.common.base.Strings;
5961
import java.util.ArrayList;
6062
import java.util.Arrays;
6163
import java.util.List;
6264
import java.util.Map;
6365
import java.util.Set;
6466
import java.util.TreeSet;
67+
import javax.annotation.Nonnull;
68+
import javax.annotation.Nullable;
6569

6670
public class ImportWriterVisitor implements AstNodeVisitor {
6771
private static final String NEWLINE = "\n";
@@ -71,14 +75,19 @@ public class ImportWriterVisitor implements AstNodeVisitor {
7175
private final Set<String> imports = new TreeSet<>();
7276

7377
private String currentPackage;
74-
private String currentClassName;
78+
@Nullable private String currentClassName;
7579

7680
public void clear() {
7781
staticImports.clear();
7882
imports.clear();
7983
}
8084

81-
public void initialize(String currentPackage, String currentClassName) {
85+
public void initialize(@Nonnull String currentPackage) {
86+
this.currentPackage = currentPackage;
87+
this.currentClassName = null;
88+
}
89+
90+
public void initialize(@Nonnull String currentPackage, @Nonnull String currentClassName) {
8291
this.currentPackage = currentPackage;
8392
this.currentClassName = currentClassName;
8493
}
@@ -370,6 +379,11 @@ public void visit(ClassDefinition classDefinition) {
370379
}
371380
}
372381

382+
@Override
383+
public void visit(PackageInfoDefinition packageInfoDefinition) {
384+
annotations(packageInfoDefinition.annotations());
385+
}
386+
373387
/** =============================== PRIVATE HELPERS =============================== */
374388
private void annotations(List<AnnotationNode> annotations) {
375389
for (AnnotationNode annotation : annotations) {
@@ -407,7 +421,9 @@ private void references(List<Reference> refs) {
407421
continue;
408422
}
409423

410-
if (ref.isStaticImport() && ref.enclosingClassName().equals(currentClassName)) {
424+
if (ref.isStaticImport()
425+
&& !Strings.isNullOrEmpty(currentClassName)
426+
&& ref.enclosingClassName().equals(currentClassName)) {
411427
continue;
412428
}
413429

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import com.google.api.generator.engine.ast.MethodInvocationExpr;
4242
import com.google.api.generator.engine.ast.NewObjectExpr;
4343
import com.google.api.generator.engine.ast.OperatorKind;
44+
import com.google.api.generator.engine.ast.PackageInfoDefinition;
4445
import com.google.api.generator.engine.ast.ReferenceConstructorExpr;
4546
import com.google.api.generator.engine.ast.RelationalOperationExpr;
4647
import com.google.api.generator.engine.ast.ReturnExpr;
@@ -859,6 +860,26 @@ public void visit(ClassDefinition classDefinition) {
859860
}
860861
}
861862

863+
@Override
864+
public void visit(PackageInfoDefinition packageInfoDefinition) {
865+
statements(packageInfoDefinition.fileHeader().stream().collect(Collectors.toList()));
866+
newline();
867+
statements(
868+
packageInfoDefinition.headerCommentStatements().stream().collect(Collectors.toList()));
869+
newline();
870+
871+
annotations(packageInfoDefinition.annotations());
872+
buffer.append(String.format("package %s;", packageInfoDefinition.pakkage()));
873+
newline();
874+
875+
packageInfoDefinition.accept(importWriterVisitor);
876+
importWriterVisitor.initialize(packageInfoDefinition.pakkage());
877+
buffer.append(importWriterVisitor.write());
878+
879+
// Format code.
880+
buffer.replace(0, buffer.length(), JavaFormatter.format(buffer.toString()));
881+
}
882+
862883
/** =============================== PRIVATE HELPERS =============================== */
863884
private void annotations(List<AnnotationNode> annotations) {
864885
for (AnnotationNode annotation : annotations) {

src/test/java/com/google/api/generator/engine/writer/ImportWriterVisitorTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,24 +19,29 @@
1919
import static junit.framework.Assert.assertFalse;
2020
import static junit.framework.Assert.assertTrue;
2121

22+
import com.google.api.generator.engine.ast.AnnotationNode;
2223
import com.google.api.generator.engine.ast.AnonymousClassExpr;
2324
import com.google.api.generator.engine.ast.ArithmeticOperationExpr;
2425
import com.google.api.generator.engine.ast.AssignmentExpr;
2526
import com.google.api.generator.engine.ast.AstNode;
27+
import com.google.api.generator.engine.ast.BlockComment;
2628
import com.google.api.generator.engine.ast.CastExpr;
2729
import com.google.api.generator.engine.ast.ClassDefinition;
30+
import com.google.api.generator.engine.ast.CommentStatement;
2831
import com.google.api.generator.engine.ast.ConcreteReference;
2932
import com.google.api.generator.engine.ast.EmptyLineStatement;
3033
import com.google.api.generator.engine.ast.EnumRefExpr;
3134
import com.google.api.generator.engine.ast.Expr;
3235
import com.google.api.generator.engine.ast.ExprStatement;
3336
import com.google.api.generator.engine.ast.IfStatement;
3437
import com.google.api.generator.engine.ast.InstanceofExpr;
38+
import com.google.api.generator.engine.ast.JavaDocComment;
3539
import com.google.api.generator.engine.ast.LogicalOperationExpr;
3640
import com.google.api.generator.engine.ast.MethodDefinition;
3741
import com.google.api.generator.engine.ast.MethodInvocationExpr;
3842
import com.google.api.generator.engine.ast.NewObjectExpr;
3943
import com.google.api.generator.engine.ast.NullObjectValue;
44+
import com.google.api.generator.engine.ast.PackageInfoDefinition;
4045
import com.google.api.generator.engine.ast.Reference;
4146
import com.google.api.generator.engine.ast.ReferenceConstructorExpr;
4247
import com.google.api.generator.engine.ast.RelationalOperationExpr;
@@ -64,6 +69,7 @@
6469
import java.util.List;
6570
import java.util.Map;
6671
import java.util.stream.LongStream;
72+
import javax.annotation.Generated;
6773
import org.junit.Before;
6874
import org.junit.Test;
6975

@@ -1029,6 +1035,27 @@ public void writeEmptyLineStatementImports() {
10291035
assertThat(writerVisitor.write()).isEmpty();
10301036
}
10311037

1038+
@Test
1039+
public void writePackageInfoDefinitionImports() {
1040+
PackageInfoDefinition packageInfo =
1041+
PackageInfoDefinition.builder()
1042+
.setPakkage("com.google.example.library.v1")
1043+
.setAnnotations(
1044+
AnnotationNode.withType(
1045+
TypeNode.withReference(ConcreteReference.withClazz(Generated.class))))
1046+
.setFileHeader(
1047+
CommentStatement.withComment(
1048+
BlockComment.withComment("Lorum ipsum dolor sit amet")))
1049+
.setHeaderCommentStatements(
1050+
CommentStatement.withComment(
1051+
JavaDocComment.withComment("Consecteteur adipisping elit")))
1052+
.build();
1053+
1054+
packageInfo.accept(writerVisitor);
1055+
assertEquals(writerVisitor.write(), "import javax.annotation.Generated;\n\n");
1056+
}
1057+
1058+
/** =============================== HELPERS =============================== */
10321059
private static TypeNode createType(Class clazz) {
10331060
return TypeNode.withReference(ConcreteReference.withClazz(clazz));
10341061
}

src/test/java/com/google/api/generator/engine/writer/JavaWriterVisitorTest.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import com.google.api.generator.engine.ast.MethodInvocationExpr;
4545
import com.google.api.generator.engine.ast.NewObjectExpr;
4646
import com.google.api.generator.engine.ast.NullObjectValue;
47+
import com.google.api.generator.engine.ast.PackageInfoDefinition;
4748
import com.google.api.generator.engine.ast.PrimitiveValue;
4849
import com.google.api.generator.engine.ast.Reference;
4950
import com.google.api.generator.engine.ast.ReferenceConstructorExpr;
@@ -73,6 +74,7 @@
7374
import java.util.List;
7475
import java.util.Map;
7576
import java.util.concurrent.TimeoutException;
77+
import javax.annotation.Generated;
7678
import org.junit.Before;
7779
import org.junit.Test;
7880

@@ -2242,6 +2244,39 @@ public void writeEmptyLineStatement() {
22422244
assertEquals(writerVisitor.write(), "\n");
22432245
}
22442246

2247+
@Test
2248+
public void writePackageInfoDefinition() {
2249+
PackageInfoDefinition packageInfo =
2250+
PackageInfoDefinition.builder()
2251+
.setPakkage("com.google.example.library.v1")
2252+
.setAnnotations(
2253+
AnnotationNode.withType(
2254+
TypeNode.withReference(ConcreteReference.withClazz(Generated.class))))
2255+
.setFileHeader(
2256+
CommentStatement.withComment(
2257+
BlockComment.withComment("Lorum ipsum dolor sit amet")))
2258+
.setHeaderCommentStatements(
2259+
CommentStatement.withComment(
2260+
JavaDocComment.withComment("Consecteteur adipisping elit")))
2261+
.build();
2262+
2263+
packageInfo.accept(writerVisitor);
2264+
assertEquals(
2265+
String.format(
2266+
createLines(9),
2267+
"/*\n",
2268+
" * Lorum ipsum dolor sit amet\n",
2269+
" */\n",
2270+
"\n",
2271+
"/** Consecteteur adipisping elit */\n",
2272+
"@Generated\n",
2273+
"package com.google.example.library.v1;\n",
2274+
"\n",
2275+
"import javax.annotation.Generated;\n"),
2276+
writerVisitor.write());
2277+
}
2278+
2279+
/** =============================== HELPERS =============================== */
22452280
private static String createLines(int numLines) {
22462281
return new String(new char[numLines]).replace("\0", "%s");
22472282
}

0 commit comments

Comments
 (0)