From 868b41d0e7d681101aa63dfc6693607fd3dc1e44 Mon Sep 17 00:00:00 2001 From: summerji Date: Mon, 16 Nov 2020 16:55:22 -0800 Subject: [PATCH 1/6] Add writeSampleCode method --- .../gapic/composer/samplecode/BUILD.bazel | 2 + .../composer/samplecode/SampleCodeWriter.java | 20 ++++++ .../gapic/composer/samplecode/BUILD.bazel | 3 + .../samplecode/SampleCodeWriterTest.java | 70 +++++++++++++++++++ 4 files changed, 95 insertions(+) create mode 100644 src/main/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriter.java create mode 100644 src/test/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriterTest.java diff --git a/src/main/java/com/google/api/generator/gapic/composer/samplecode/BUILD.bazel b/src/main/java/com/google/api/generator/gapic/composer/samplecode/BUILD.bazel index bd0cb6f812..aec2640ec0 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/samplecode/BUILD.bazel +++ b/src/main/java/com/google/api/generator/gapic/composer/samplecode/BUILD.bazel @@ -13,6 +13,8 @@ java_library( ":samplecode_files", ], deps = [ + "//src/main/java/com/google/api/generator/engine/ast", + "//src/main/java/com/google/api/generator/engine/writer", "@google_java_format_all_deps//jar", ], ) diff --git a/src/main/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriter.java b/src/main/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriter.java new file mode 100644 index 0000000000..055ed43e3a --- /dev/null +++ b/src/main/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriter.java @@ -0,0 +1,20 @@ +package com.google.api.generator.gapic.composer.samplecode; + +import com.google.api.generator.engine.ast.Expr; +import com.google.api.generator.engine.ast.ExprStatement; +import com.google.api.generator.engine.ast.Statement; +import com.google.api.generator.engine.writer.JavaWriterVisitor; +import com.google.common.collect.ImmutableList; +import java.util.List; +import java.util.stream.Collectors; + +public class SampleCodeWriter { + + public static String writeSampleCode(List statements) { + JavaWriterVisitor visitor = new JavaWriterVisitor(); + for (Statement statement : statements) { + statement.accept(visitor); + } + return SampleCodeJavaFormatter.format(visitor.write()); + } +} diff --git a/src/test/java/com/google/api/generator/gapic/composer/samplecode/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/composer/samplecode/BUILD.bazel index 3365024d68..5aeb7703c4 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/samplecode/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/composer/samplecode/BUILD.bazel @@ -4,6 +4,7 @@ package(default_visibility = ["//visibility:public"]) TESTS = [ "SampleCodeJavaFormatterTest", + "SampleCodeWriterTest" ] filegroup( @@ -19,7 +20,9 @@ filegroup( "//src/main/java/com/google/api/generator/engine/ast", "//src/main/java/com/google/api/generator/engine/writer", "//src/main/java/com/google/api/generator/gapic/composer/samplecode", + "//src/main/java/com/google/api/generator/gapic/model", "@com_google_truth_truth//jar", "@junit_junit//jar", + "@com_google_api_gax_java//gax", ], ) for test_name in TESTS] diff --git a/src/test/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriterTest.java b/src/test/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriterTest.java new file mode 100644 index 0000000000..c96dd53890 --- /dev/null +++ b/src/test/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriterTest.java @@ -0,0 +1,70 @@ +package com.google.api.generator.gapic.composer.samplecode; + +import static junit.framework.TestCase.assertEquals; + +import com.google.api.gax.rpc.ClientSettings; +import com.google.api.generator.engine.ast.AssignmentExpr; +import com.google.api.generator.engine.ast.ConcreteReference; +import com.google.api.generator.engine.ast.Expr; +import com.google.api.generator.engine.ast.ExprStatement; +import com.google.api.generator.engine.ast.MethodInvocationExpr; +import com.google.api.generator.engine.ast.PrimitiveValue; +import com.google.api.generator.engine.ast.Reference; +import com.google.api.generator.engine.ast.TypeNode; +import com.google.api.generator.engine.ast.Statement; +import com.google.api.generator.engine.ast.TryCatchStatement; +import com.google.api.generator.engine.ast.ValueExpr; +import com.google.api.generator.engine.ast.Variable; +import com.google.api.generator.engine.ast.VariableExpr; +import com.google.api.generator.gapic.model.Method; +import java.lang.reflect.Array; +import java.util.Arrays; +import org.junit.Test; + +public class SampleCodeWriterTest { + @Test + public void writeSampleCode_statements() { + TypeNode settingType = TypeNode.withReference(ConcreteReference.withClazz(ClientSettings.class)); + Variable aVar = Variable.builder().setName("clientSettings").setType(settingType).build(); + VariableExpr aVarExpr = VariableExpr.withVariable(aVar); + MethodInvocationExpr aValueExpr = MethodInvocationExpr.builder() + .setExprReferenceExpr(MethodInvocationExpr.builder() + .setMethodName("newBuilder") + .setStaticReferenceType(settingType) + .build()) + .setReturnType(settingType) + .setMethodName("build") + .build(); + AssignmentExpr assignmentExpr = AssignmentExpr.builder() + .setVariableExpr(aVarExpr.toBuilder().setIsDecl(true).build()) + .setValueExpr(aValueExpr) + .build(); + Statement sampleStatement = TryCatchStatement.builder() + .setTryResourceExpr(createAssignmentExpr("aBool", "false", TypeNode.BOOLEAN)) + .setTryBody(Arrays.asList(ExprStatement.withExpr(createAssignmentExpr("x", "3", TypeNode.INT)))) + .setIsSampleCode(true) + .build(); + String result = SampleCodeWriter.writeSampleCode( + Arrays.asList(ExprStatement.withExpr(assignmentExpr), + sampleStatement)); + String expected = "ClientSettings clientSettings = ClientSettings.newBuilder().build();\n" + + "try (boolean aBool = false) {\n" + + " int x = 3;\n" + + "}"; + assertEquals(expected, result); + } + + private AssignmentExpr createAssignmentExpr(String varName, String varValue, TypeNode type) { + Variable variable = Variable.builder().setName(varName).setType(type).build(); + VariableExpr variableExpr = + VariableExpr.builder() + .setVariable(variable) + .setIsDecl(true) + .build(); + return AssignmentExpr.builder() + .setVariableExpr(variableExpr) + .setValueExpr(ValueExpr.withValue(PrimitiveValue.builder().setType(type).setValue(varValue).build())) + .build(); + } + +} From 433014b970078bc00af7f4df511b40180c186f65 Mon Sep 17 00:00:00 2001 From: summerji Date: Mon, 16 Nov 2020 16:58:31 -0800 Subject: [PATCH 2/6] add license --- .../composer/samplecode/SampleCodeWriter.java | 18 ++++++++++++++---- .../samplecode/SampleCodeWriterTest.java | 14 ++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriter.java b/src/main/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriter.java index 055ed43e3a..52f35010d5 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriter.java +++ b/src/main/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriter.java @@ -1,12 +1,22 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package com.google.api.generator.gapic.composer.samplecode; -import com.google.api.generator.engine.ast.Expr; -import com.google.api.generator.engine.ast.ExprStatement; import com.google.api.generator.engine.ast.Statement; import com.google.api.generator.engine.writer.JavaWriterVisitor; -import com.google.common.collect.ImmutableList; import java.util.List; -import java.util.stream.Collectors; public class SampleCodeWriter { diff --git a/src/test/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriterTest.java b/src/test/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriterTest.java index c96dd53890..11ad9a2854 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriterTest.java +++ b/src/test/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriterTest.java @@ -1,3 +1,17 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package com.google.api.generator.gapic.composer.samplecode; import static junit.framework.TestCase.assertEquals; From d9a74a760cb49baa516ee3f7576e01bfbe19b6ea Mon Sep 17 00:00:00 2001 From: summerji Date: Mon, 16 Nov 2020 21:26:43 -0800 Subject: [PATCH 3/6] Enable single statement as input --- .../composer/samplecode/SampleCodeWriter.java | 5 +++++ .../composer/samplecode/SampleCodeWriterTest.java | 14 ++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/main/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriter.java b/src/main/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriter.java index 52f35010d5..7e553fb0d8 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriter.java +++ b/src/main/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriter.java @@ -16,10 +16,15 @@ import com.google.api.generator.engine.ast.Statement; import com.google.api.generator.engine.writer.JavaWriterVisitor; +import java.util.Arrays; import java.util.List; public class SampleCodeWriter { + public static String writeSampleCode(Statement ... statement) { + return writeSampleCode(Arrays.asList(statement)); + } + public static String writeSampleCode(List statements) { JavaWriterVisitor visitor = new JavaWriterVisitor(); for (Statement statement : statements) { diff --git a/src/test/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriterTest.java b/src/test/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriterTest.java index 11ad9a2854..7599efc05e 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriterTest.java +++ b/src/test/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriterTest.java @@ -36,6 +36,20 @@ import org.junit.Test; public class SampleCodeWriterTest { + @Test + public void writeSampleCode_singleStatements() { + Statement sampleStatement = TryCatchStatement.builder() + .setTryResourceExpr(createAssignmentExpr("aBool", "false", TypeNode.BOOLEAN)) + .setTryBody(Arrays.asList(ExprStatement.withExpr(createAssignmentExpr("x", "3", TypeNode.INT)))) + .setIsSampleCode(true) + .build(); + String result = SampleCodeWriter.writeSampleCode(sampleStatement); + String expected = "try (boolean aBool = false) {\n" + + " int x = 3;\n" + + "}"; + assertEquals(expected, result); + } + @Test public void writeSampleCode_statements() { TypeNode settingType = TypeNode.withReference(ConcreteReference.withClazz(ClientSettings.class)); From bf3fb8df9da4f1f5473c3859a9952b85e29c2225 Mon Sep 17 00:00:00 2001 From: summerji Date: Mon, 16 Nov 2020 21:29:19 -0800 Subject: [PATCH 4/6] combine unit test --- .../samplecode/SampleCodeWriterTest.java | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/src/test/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriterTest.java b/src/test/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriterTest.java index 7599efc05e..4102ed1163 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriterTest.java +++ b/src/test/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriterTest.java @@ -36,20 +36,6 @@ import org.junit.Test; public class SampleCodeWriterTest { - @Test - public void writeSampleCode_singleStatements() { - Statement sampleStatement = TryCatchStatement.builder() - .setTryResourceExpr(createAssignmentExpr("aBool", "false", TypeNode.BOOLEAN)) - .setTryBody(Arrays.asList(ExprStatement.withExpr(createAssignmentExpr("x", "3", TypeNode.INT)))) - .setIsSampleCode(true) - .build(); - String result = SampleCodeWriter.writeSampleCode(sampleStatement); - String expected = "try (boolean aBool = false) {\n" - + " int x = 3;\n" - + "}"; - assertEquals(expected, result); - } - @Test public void writeSampleCode_statements() { TypeNode settingType = TypeNode.withReference(ConcreteReference.withClazz(ClientSettings.class)); @@ -73,8 +59,8 @@ public void writeSampleCode_statements() { .setIsSampleCode(true) .build(); String result = SampleCodeWriter.writeSampleCode( - Arrays.asList(ExprStatement.withExpr(assignmentExpr), - sampleStatement)); + ExprStatement.withExpr(assignmentExpr), + sampleStatement); String expected = "ClientSettings clientSettings = ClientSettings.newBuilder().build();\n" + "try (boolean aBool = false) {\n" + " int x = 3;\n" From a1d956da2f34449b80d64721f0a5935f0710825e Mon Sep 17 00:00:00 2001 From: summerji Date: Mon, 16 Nov 2020 21:31:01 -0800 Subject: [PATCH 5/6] add final in class --- .../generator/gapic/composer/samplecode/SampleCodeWriter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriter.java b/src/main/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriter.java index 7e553fb0d8..f38bac5438 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriter.java +++ b/src/main/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriter.java @@ -19,7 +19,7 @@ import java.util.Arrays; import java.util.List; -public class SampleCodeWriter { +public final class SampleCodeWriter { public static String writeSampleCode(Statement ... statement) { return writeSampleCode(Arrays.asList(statement)); From 0645521de96c3bf9fc6e81919434ca3094d29fd1 Mon Sep 17 00:00:00 2001 From: summerji Date: Tue, 17 Nov 2020 11:35:27 -0800 Subject: [PATCH 6/6] refactor method name --- .../gapic/composer/samplecode/SampleCodeWriter.java | 6 +++--- .../gapic/composer/samplecode/SampleCodeWriterTest.java | 6 +----- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriter.java b/src/main/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriter.java index f38bac5438..1a6e4be89c 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriter.java +++ b/src/main/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriter.java @@ -21,11 +21,11 @@ public final class SampleCodeWriter { - public static String writeSampleCode(Statement ... statement) { - return writeSampleCode(Arrays.asList(statement)); + public static String write(Statement ... statement) { + return write(Arrays.asList(statement)); } - public static String writeSampleCode(List statements) { + public static String write(List statements) { JavaWriterVisitor visitor = new JavaWriterVisitor(); for (Statement statement : statements) { statement.accept(visitor); diff --git a/src/test/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriterTest.java b/src/test/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriterTest.java index 4102ed1163..4e5be8cd19 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriterTest.java +++ b/src/test/java/com/google/api/generator/gapic/composer/samplecode/SampleCodeWriterTest.java @@ -19,19 +19,15 @@ import com.google.api.gax.rpc.ClientSettings; import com.google.api.generator.engine.ast.AssignmentExpr; import com.google.api.generator.engine.ast.ConcreteReference; -import com.google.api.generator.engine.ast.Expr; import com.google.api.generator.engine.ast.ExprStatement; import com.google.api.generator.engine.ast.MethodInvocationExpr; import com.google.api.generator.engine.ast.PrimitiveValue; -import com.google.api.generator.engine.ast.Reference; import com.google.api.generator.engine.ast.TypeNode; import com.google.api.generator.engine.ast.Statement; import com.google.api.generator.engine.ast.TryCatchStatement; import com.google.api.generator.engine.ast.ValueExpr; import com.google.api.generator.engine.ast.Variable; import com.google.api.generator.engine.ast.VariableExpr; -import com.google.api.generator.gapic.model.Method; -import java.lang.reflect.Array; import java.util.Arrays; import org.junit.Test; @@ -58,7 +54,7 @@ public void writeSampleCode_statements() { .setTryBody(Arrays.asList(ExprStatement.withExpr(createAssignmentExpr("x", "3", TypeNode.INT)))) .setIsSampleCode(true) .build(); - String result = SampleCodeWriter.writeSampleCode( + String result = SampleCodeWriter.write( ExprStatement.withExpr(assignmentExpr), sampleStatement); String expected = "ClientSettings clientSettings = ClientSettings.newBuilder().build();\n"