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..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 @@ -26,6 +26,7 @@ import static org.assertj.core.api.Assertions.assertThat; * Tests for {@link InitializrConfiguration}. * * @author Stephane Nicoll + * @author Chris Bono */ class InitializrConfigurationTests { @@ -171,6 +172,26 @@ class InitializrConfigurationTests { assertThat(this.properties.cleanPackageName("org.springframework", "com.example")).isEqualTo("com.example"); } + @Test + void generatePackageNameReservedKeywordsMiddleOfPackageName() { + assertThat(this.properties.cleanPackageName("com.return.foo", "com.example")).isEqualTo("com.example"); + } + + @Test + void generatePackageNameReservedKeywordsStartOfPackageName() { + assertThat(this.properties.cleanPackageName("false.com.foo", "com.example")).isEqualTo("com.example"); + } + + @Test + void generatePackageNameReservedKeywordsEndOfPackageName() { + assertThat(this.properties.cleanPackageName("com.foo.null", "com.example")).isEqualTo("com.example"); + } + + @Test + void generatePackageNameReservedKeywordsEntirePackageName() { + assertThat(this.properties.cleanPackageName("public", "com.example")).isEqualTo("com.example"); + } + @Test void validateArtifactRepository() { this.properties.getEnv().setArtifactRepository("http://foo/bar");