From 7da722eab4562b81db079226d00ba9ff1900427f Mon Sep 17 00:00:00 2001 From: Mira Leung Date: Thu, 21 May 2020 21:00:50 +0000 Subject: [PATCH] feat: add reserved language keywords --- .../api/generator/engine/lexicon/BUILD.bazel | 16 +++++ .../api/generator/engine/lexicon/Keyword.java | 64 +++++++++++++++++++ .../api/generator/engine/lexicon/BUILD.bazel | 15 +++++ .../generator/engine/lexicon/KeywordTest.java | 29 +++++++++ 4 files changed, 124 insertions(+) create mode 100644 src/main/java/com/google/api/generator/engine/lexicon/BUILD.bazel create mode 100644 src/main/java/com/google/api/generator/engine/lexicon/Keyword.java create mode 100644 src/test/java/com/google/api/generator/engine/lexicon/BUILD.bazel create mode 100644 src/test/java/com/google/api/generator/engine/lexicon/KeywordTest.java diff --git a/src/main/java/com/google/api/generator/engine/lexicon/BUILD.bazel b/src/main/java/com/google/api/generator/engine/lexicon/BUILD.bazel new file mode 100644 index 0000000000..27b3723c04 --- /dev/null +++ b/src/main/java/com/google/api/generator/engine/lexicon/BUILD.bazel @@ -0,0 +1,16 @@ +package(default_visibility = ["//visibility:public"]) + +filegroup( + name = "lexicon_files", + srcs = glob(["*.java"]), +) + +java_library( + name = "lexicon", + srcs = [ + ":lexicon_files", + ], + deps = [ + "@com_google_guava_guava__com_google_api_codegen//jar", + ], +) diff --git a/src/main/java/com/google/api/generator/engine/lexicon/Keyword.java b/src/main/java/com/google/api/generator/engine/lexicon/Keyword.java new file mode 100644 index 0000000000..e2827b0863 --- /dev/null +++ b/src/main/java/com/google/api/generator/engine/lexicon/Keyword.java @@ -0,0 +1,64 @@ +package com.google.api.generator.engine.lexicon; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.ImmutableList; + +public class Keyword { + @VisibleForTesting + static final ImmutableList KEYWORDS = + ImmutableList.of( + "abstract", + "continue", + "for", + "new", + "switch", + "assert", + "default", + "if", + "package", + "synchronized", + "boolean", + "do", + "goto", + "private", + "this", + "break", + "double", + "implements", + "protected", + "throw", + "byte", + "else", + "import", + "public", + "throws", + "case", + "enum", + "instanceof", + "return", + "transient", + "catch", + "extends", + "int", + "short", + "try", + "char", + "final", + "interface", + "static", + "void", + "class", + "finally", + "long", + "strictfp", + "volatile", + "const", + "float", + "native", + "super", + "while"); + + public static boolean isKeyword(String s) { + return KEYWORDS.contains(s); + } +} diff --git a/src/test/java/com/google/api/generator/engine/lexicon/BUILD.bazel b/src/test/java/com/google/api/generator/engine/lexicon/BUILD.bazel new file mode 100644 index 0000000000..8ded23627c --- /dev/null +++ b/src/test/java/com/google/api/generator/engine/lexicon/BUILD.bazel @@ -0,0 +1,15 @@ +package(default_visibility = ["//visibility:public"]) + +TESTS = [ + "KeywordTest", +] + +[java_test( + name = test_name, + srcs = ["{0}.java".format(test_name)], + test_class = "com.google.api.generator.engine.lexicon.{0}".format(test_name), + deps = [ + "//src/main/java/com/google/api/generator/engine/lexicon", + "@com_google_truth_truth//jar", + ], +) for test_name in TESTS] diff --git a/src/test/java/com/google/api/generator/engine/lexicon/KeywordTest.java b/src/test/java/com/google/api/generator/engine/lexicon/KeywordTest.java new file mode 100644 index 0000000000..e3db52569a --- /dev/null +++ b/src/test/java/com/google/api/generator/engine/lexicon/KeywordTest.java @@ -0,0 +1,29 @@ +package com.google.api.generator.engine.lexicon; + +import static com.google.common.truth.Truth.assertThat; + +import org.junit.Test; + +public class KeywordTest { + @Test + public void keywordTest() { + // Modifiers. + assertThat(Keyword.isKeyword("static")).isTrue(); + assertThat(Keyword.isKeyword("private")).isTrue(); + + // Other semantic blocks.. + assertThat(Keyword.isKeyword("throws")).isTrue(); + assertThat(Keyword.isKeyword("try")).isTrue(); + assertThat(Keyword.isKeyword("for")).isTrue(); + + // Primitive types. + assertThat(Keyword.isKeyword("int")).isTrue(); + assertThat(Keyword.isKeyword("char")).isTrue(); + + // Literal values. + assertThat(Keyword.isKeyword("false")).isFalse(); + assertThat(Keyword.isKeyword("null")).isFalse(); + assertThat(Keyword.isKeyword("asdf")).isFalse(); + assertThat(Keyword.isKeyword("12345")).isFalse(); + } +}