Fix JavaVersion constant writer to handle recent Java versions

Closes gh-1160
This commit is contained in:
Stephane Nicoll
2020-12-04 15:35:21 +01:00
parent e77aca2211
commit 8cef356bcf
2 changed files with 48 additions and 28 deletions

View File

@@ -17,7 +17,6 @@
package io.spring.initializr.generator.buildsystem.gradle;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -38,21 +37,7 @@ import io.spring.initializr.generator.version.VersionReference;
*/
public class KotlinDslGradleBuildWriter extends GradleBuildWriter {
private static final Map<String, String> sourceCompatibilitiesToJavaVersion = createSourceCompatibilitiesToJavaVersion();
private static Map<String, String> createSourceCompatibilitiesToJavaVersion() {
Map<String, String> result = new HashMap<>();
for (int version = 6; version <= 10; version++) {
result.put(Integer.toString(version), "VERSION_1_" + version);
result.put("1." + version, "VERSION_1_" + version);
}
for (int version = 11; version <= 12; version++) {
result.put(Integer.toString(version), "VERSION_" + version);
result.put("1." + version, "VERSION_" + version);
}
return Collections.unmodifiableMap(result);
}
private final Map<String, String> sourceCompatibilitiesToJavaVersion = new HashMap<>();
@Override
protected void writeBuildscript(IndentingWriter writer, GradleBuild build) {
@@ -97,8 +82,28 @@ public class KotlinDslGradleBuildWriter extends GradleBuildWriter {
@Override
protected void writeJavaSourceCompatibility(IndentingWriter writer, GradleBuildSettings settings) {
writer.println("java.sourceCompatibility = JavaVersion."
+ sourceCompatibilitiesToJavaVersion.get(settings.getSourceCompatibility()));
writer.println("java.sourceCompatibility = " + getJavaVersionConstant(settings.getSourceCompatibility()));
}
private String getJavaVersionConstant(String jvmVersion) {
return this.sourceCompatibilitiesToJavaVersion.computeIfAbsent(jvmVersion, (key) -> {
StringBuilder sb = new StringBuilder("JavaVersion.");
if (jvmVersion == null) {
return sb.append("VERSION_11").toString();
}
int generation = (jvmVersion.startsWith("1.") ? Integer.parseInt(jvmVersion.substring(2))
: Integer.parseInt(jvmVersion));
if (generation >= 1 && generation <= 10) {
sb.append("VERSION_1_").append(generation);
}
else if (generation <= 17) {
sb.append("VERSION_").append(generation);
}
else {
sb.append("VERSION_HIGHER");
}
return sb.toString();
});
}
private String configurationReference(String configurationName, Collection<String> customConfigurations) {

View File

@@ -20,6 +20,7 @@ import java.io.StringWriter;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Stream;
import io.spring.initializr.generator.buildsystem.BillOfMaterials;
import io.spring.initializr.generator.buildsystem.Dependency;
@@ -30,6 +31,9 @@ import io.spring.initializr.generator.io.IndentingWriter;
import io.spring.initializr.generator.version.VersionProperty;
import io.spring.initializr.generator.version.VersionReference;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
@@ -49,20 +53,31 @@ class KotlinDslGradleBuildWriterTests {
assertThat(lines).contains("group = \"com.example\"", "version = \"1.0.1-SNAPSHOT\"");
}
@Test
void gradleBuildWithSourceCompatibility11() {
@ParameterizedTest
@MethodSource("sourceCompatibilityParameters")
void gradleBuildWithSourceCompatibility15(String sourceCompatibility, String javaVersionConstant) {
GradleBuild build = new GradleBuild();
build.settings().sourceCompatibility("11");
build.settings().sourceCompatibility(sourceCompatibility);
List<String> lines = generateBuild(build);
assertThat(lines).contains("java.sourceCompatibility = JavaVersion.VERSION_11");
assertThat(lines).contains("java.sourceCompatibility = " + javaVersionConstant);
}
@Test
void gradleBuildWithSourceCompatibility1Dot8() {
GradleBuild build = new GradleBuild();
build.settings().sourceCompatibility("1.8");
List<String> lines = generateBuild(build);
assertThat(lines).contains("java.sourceCompatibility = JavaVersion.VERSION_1_8");
static Stream<Arguments> sourceCompatibilityParameters() {
return Stream.of(Arguments.arguments("1.8", "JavaVersion.VERSION_1_8"),
Arguments.arguments("8", "JavaVersion.VERSION_1_8"),
Arguments.arguments("1.9", "JavaVersion.VERSION_1_9"),
Arguments.arguments("9", "JavaVersion.VERSION_1_9"),
Arguments.arguments("1.10", "JavaVersion.VERSION_1_10"),
Arguments.arguments("10", "JavaVersion.VERSION_1_10"),
Arguments.arguments(null, "JavaVersion.VERSION_11"),
Arguments.arguments("11", "JavaVersion.VERSION_11"),
Arguments.arguments("12", "JavaVersion.VERSION_12"),
Arguments.arguments("13", "JavaVersion.VERSION_13"),
Arguments.arguments("14", "JavaVersion.VERSION_14"),
Arguments.arguments("15", "JavaVersion.VERSION_15"),
Arguments.arguments("16", "JavaVersion.VERSION_16"),
Arguments.arguments("17", "JavaVersion.VERSION_17"),
Arguments.arguments("18", "JavaVersion.VERSION_HIGHER"));
}
@Test