From e72b187d170d908dc7a977310d30be7cf63ed82f Mon Sep 17 00:00:00 2001 From: bono007 Date: Thu, 17 Oct 2019 22:42:25 -0500 Subject: [PATCH 1/2] Identify reserved keywords in package name See gh-1018 --- .../metadata/InitializrConfiguration.java | 10 +++++ .../InitializrConfigurationTests.java | 45 +++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/initializr-metadata/src/main/java/io/spring/initializr/metadata/InitializrConfiguration.java b/initializr-metadata/src/main/java/io/spring/initializr/metadata/InitializrConfiguration.java index bfb5e4be..ca18ea5d 100644 --- a/initializr-metadata/src/main/java/io/spring/initializr/metadata/InitializrConfiguration.java +++ b/initializr-metadata/src/main/java/io/spring/initializr/metadata/InitializrConfiguration.java @@ -25,6 +25,8 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import javax.lang.model.SourceVersion; + import com.fasterxml.jackson.annotation.JsonIgnore; import io.spring.initializr.generator.version.InvalidVersionException; import io.spring.initializr.generator.version.Version; @@ -38,6 +40,7 @@ import org.springframework.util.StringUtils; * Various configuration options used by the service. * * @author Stephane Nicoll + * @author Chris Bono */ public class InitializrConfiguration { @@ -113,6 +116,9 @@ public class InitializrConfiguration { if (hasInvalidChar(candidate.replace(".", "")) || this.env.invalidPackageNames.contains(candidate)) { return defaultPackageName; } + if (hasReservedKeyword(candidate)) { + return defaultPackageName; + } else { return candidate; } @@ -155,6 +161,10 @@ public class InitializrConfiguration { return false; } + private static boolean hasReservedKeyword(final String packageName) { + return Arrays.stream(packageName.split("\\.")).anyMatch(SourceVersion::isKeyword); + } + /** * Defines additional environment settings. */ diff --git a/initializr-metadata/src/test/java/io/spring/initializr/metadata/InitializrConfigurationTests.java b/initializr-metadata/src/test/java/io/spring/initializr/metadata/InitializrConfigurationTests.java index 523e0e02..054a6717 100755 --- a/initializr-metadata/src/test/java/io/spring/initializr/metadata/InitializrConfigurationTests.java +++ b/initializr-metadata/src/test/java/io/spring/initializr/metadata/InitializrConfigurationTests.java @@ -16,9 +16,14 @@ package io.spring.initializr.metadata; +import java.util.Arrays; +import java.util.stream.Stream; + import io.spring.initializr.generator.version.Version; import io.spring.initializr.metadata.InitializrConfiguration.Env.Kotlin; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import static org.assertj.core.api.Assertions.assertThat; @@ -26,9 +31,18 @@ import static org.assertj.core.api.Assertions.assertThat; * Tests for {@link InitializrConfiguration}. * * @author Stephane Nicoll + * @author Chris Bono */ class InitializrConfigurationTests { + // Taken from https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.9 + private static final String[] RESERVED_KEYWORDS = { "abstract", "assert", "boolean", "break", "byte", "case", + "catch", "char", "class", "const", "continue", "default", "do", "double", "else", "enum", "extends", + "false", "final", "finally", "float", "for", "goto", "if", "implements", "import", "instanceof", "int", + "interface", "long", "native", "new", "null", "package", "private", "protected", "public", "return", + "short", "static", "strictfp", "super", "switch", "synchronized", "this", "throw", "throws", "transient", + "try", "true", "void", "volatile", "while" }; + private final InitializrConfiguration properties = new InitializrConfiguration(); @Test @@ -171,6 +185,37 @@ class InitializrConfigurationTests { assertThat(this.properties.cleanPackageName("org.springframework", "com.example")).isEqualTo("com.example"); } + @ParameterizedTest + @MethodSource("reservedKeywords") + void generatePackageNameReservedKeywordsMiddleOfPackageName(final String keyword) { + final String badPackageName = String.format("com.%s.foo", keyword); + assertThat(this.properties.cleanPackageName(badPackageName, "com.example")).isEqualTo("com.example"); + } + + @ParameterizedTest + @MethodSource("reservedKeywords") + void generatePackageNameReservedKeywordsStartOfPackageName(final String keyword) { + final String badPackageName = String.format("%s.com.foo", keyword); + assertThat(this.properties.cleanPackageName(badPackageName, "com.example")).isEqualTo("com.example"); + } + + @ParameterizedTest + @MethodSource("reservedKeywords") + void generatePackageNameReservedKeywordsEndOfPackageName(final String keyword) { + final String badPackageName = String.format("com.foo.%s", keyword); + assertThat(this.properties.cleanPackageName(badPackageName, "com.example")).isEqualTo("com.example"); + } + + @ParameterizedTest + @MethodSource("reservedKeywords") + void generatePackageNameReservedKeywordsEntirePackageName(final String keyword) { + assertThat(this.properties.cleanPackageName(keyword, "com.example")).isEqualTo("com.example"); + } + + private static Stream reservedKeywords() { + return Arrays.stream(RESERVED_KEYWORDS); + } + @Test void validateArtifactRepository() { this.properties.getEnv().setArtifactRepository("http://foo/bar"); From 9143e96b01802a2f8a6ec95d1060cb059648bd31 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Mon, 21 Oct 2019 10:40:56 +0200 Subject: [PATCH 2/2] Polish "Identify reserved keywords in package name" See gh-1018 --- .../InitializrConfigurationTests.java | 48 +++++-------------- 1 file changed, 12 insertions(+), 36 deletions(-) diff --git a/initializr-metadata/src/test/java/io/spring/initializr/metadata/InitializrConfigurationTests.java b/initializr-metadata/src/test/java/io/spring/initializr/metadata/InitializrConfigurationTests.java index 054a6717..52918ea8 100755 --- a/initializr-metadata/src/test/java/io/spring/initializr/metadata/InitializrConfigurationTests.java +++ b/initializr-metadata/src/test/java/io/spring/initializr/metadata/InitializrConfigurationTests.java @@ -16,14 +16,9 @@ package io.spring.initializr.metadata; -import java.util.Arrays; -import java.util.stream.Stream; - import io.spring.initializr.generator.version.Version; import io.spring.initializr.metadata.InitializrConfiguration.Env.Kotlin; import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.MethodSource; import static org.assertj.core.api.Assertions.assertThat; @@ -35,14 +30,6 @@ import static org.assertj.core.api.Assertions.assertThat; */ class InitializrConfigurationTests { - // Taken from https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.9 - private static final String[] RESERVED_KEYWORDS = { "abstract", "assert", "boolean", "break", "byte", "case", - "catch", "char", "class", "const", "continue", "default", "do", "double", "else", "enum", "extends", - "false", "final", "finally", "float", "for", "goto", "if", "implements", "import", "instanceof", "int", - "interface", "long", "native", "new", "null", "package", "private", "protected", "public", "return", - "short", "static", "strictfp", "super", "switch", "synchronized", "this", "throw", "throws", "transient", - "try", "true", "void", "volatile", "while" }; - private final InitializrConfiguration properties = new InitializrConfiguration(); @Test @@ -185,35 +172,24 @@ class InitializrConfigurationTests { assertThat(this.properties.cleanPackageName("org.springframework", "com.example")).isEqualTo("com.example"); } - @ParameterizedTest - @MethodSource("reservedKeywords") - void generatePackageNameReservedKeywordsMiddleOfPackageName(final String keyword) { - final String badPackageName = String.format("com.%s.foo", keyword); - assertThat(this.properties.cleanPackageName(badPackageName, "com.example")).isEqualTo("com.example"); + @Test + void generatePackageNameReservedKeywordsMiddleOfPackageName() { + assertThat(this.properties.cleanPackageName("com.return.foo", "com.example")).isEqualTo("com.example"); } - @ParameterizedTest - @MethodSource("reservedKeywords") - void generatePackageNameReservedKeywordsStartOfPackageName(final String keyword) { - final String badPackageName = String.format("%s.com.foo", keyword); - assertThat(this.properties.cleanPackageName(badPackageName, "com.example")).isEqualTo("com.example"); + @Test + void generatePackageNameReservedKeywordsStartOfPackageName() { + assertThat(this.properties.cleanPackageName("false.com.foo", "com.example")).isEqualTo("com.example"); } - @ParameterizedTest - @MethodSource("reservedKeywords") - void generatePackageNameReservedKeywordsEndOfPackageName(final String keyword) { - final String badPackageName = String.format("com.foo.%s", keyword); - assertThat(this.properties.cleanPackageName(badPackageName, "com.example")).isEqualTo("com.example"); + @Test + void generatePackageNameReservedKeywordsEndOfPackageName() { + assertThat(this.properties.cleanPackageName("com.foo.null", "com.example")).isEqualTo("com.example"); } - @ParameterizedTest - @MethodSource("reservedKeywords") - void generatePackageNameReservedKeywordsEntirePackageName(final String keyword) { - assertThat(this.properties.cleanPackageName(keyword, "com.example")).isEqualTo("com.example"); - } - - private static Stream reservedKeywords() { - return Arrays.stream(RESERVED_KEYWORDS); + @Test + void generatePackageNameReservedKeywordsEntirePackageName() { + assertThat(this.properties.cleanPackageName("public", "com.example")).isEqualTo("com.example"); } @Test