Restore the ability to generate several parameters with the same name

This commit fixes the handling of configuration parameters so that
nested groups can be reused when requested with the same parameter
name. However, single parameters are additive.

Closes gh-867
This commit is contained in:
Stephane Nicoll
2019-03-14 17:33:59 +01:00
parent 0805345e85
commit 0ecdf3097a
7 changed files with 103 additions and 67 deletions

View File

@@ -41,9 +41,9 @@ public class KotlinJpaMavenBuildCustomizer implements BuildCustomizer<MavenBuild
if (this.buildMetadataResolver.hasFacet(build, "jpa")) {
MavenPlugin kotlinNoArgPlugin = build.plugin("org.jetbrains.kotlin",
"kotlin-maven-noarg", "${kotlin.version}");
kotlinNoArgPlugin.configuration((configuration) -> configuration.parameter(
"compilerPlugins",
(compilerPlugins) -> compilerPlugins.parameter("plugin", "jpa")));
kotlinNoArgPlugin.configuration(
(configuration) -> configuration.configure("compilerPlugins",
(compilerPlugins) -> compilerPlugins.add("plugin", "jpa")));
}
}

View File

@@ -45,10 +45,10 @@ class KotlinMavenBuildCustomizer implements BuildCustomizer<MavenBuild> {
MavenPlugin kotlinMavenPlugin = build.plugin("org.jetbrains.kotlin",
"kotlin-maven-plugin");
kotlinMavenPlugin.configuration((configuration) -> {
configuration.parameter("args", (args) -> this.settings.getCompilerArgs()
.forEach((arg) -> args.parameter("arg", arg)));
configuration.parameter("compilerPlugins",
(compilerPlugins) -> compilerPlugins.parameter("plugin", "spring"));
configuration.configure("args", (args) -> this.settings.getCompilerArgs()
.forEach((arg) -> args.add("arg", arg)));
configuration.configure("compilerPlugins",
(compilerPlugins) -> compilerPlugins.add("plugin", "spring"));
});
kotlinMavenPlugin.dependency("org.jetbrains.kotlin", "kotlin-maven-allopen",
"${kotlin.version}");

View File

@@ -42,11 +42,11 @@ class KotlinMavenFullBuildCustomizer implements BuildCustomizer<MavenBuild> {
MavenPlugin kotlinMavenPlugin = build.plugin("org.jetbrains.kotlin",
"kotlin-maven-plugin", "${kotlin.version}");
kotlinMavenPlugin.configuration((configuration) -> {
configuration.parameter("args", (args) -> this.settings.getCompilerArgs()
.forEach((arg) -> args.parameter("arg", arg)));
configuration.parameter("compilerPlugins",
(compilerPlugins) -> compilerPlugins.parameter("plugin", "spring"));
configuration.parameter("jvmTarget", this.settings.getJvmTarget());
configuration.configure("args", (args) -> this.settings.getCompilerArgs()
.forEach((arg) -> args.add("arg", arg)));
configuration.configure("compilerPlugins",
(compilerPlugins) -> compilerPlugins.add("plugin", "spring"));
configuration.add("jvmTarget", this.settings.getJvmTarget());
});
kotlinMavenPlugin.execution("compile",
(compile) -> compile.phase("compile").goal("compile"));

View File

@@ -16,6 +16,9 @@
package io.spring.initializr.generator.spring.code.kotlin;
import java.util.Arrays;
import java.util.List;
import io.spring.initializr.generator.buildsystem.maven.MavenBuild;
import io.spring.initializr.generator.buildsystem.maven.MavenPlugin;
import io.spring.initializr.generator.buildsystem.maven.MavenPlugin.Configuration;
@@ -85,4 +88,33 @@ class KotlinMavenBuildCustomizerTests {
assertThat(allOpen.getVersion()).isEqualTo("${kotlin.version}");
}
@Test
void kotlinMavenPluginWithSeveralArgs() {
MavenBuild build = new MavenBuild();
new KotlinMavenBuildCustomizer(new TestKotlinProjectSettings()).customize(build);
Configuration configuration = build.getPlugins().get(0).getConfiguration();
Setting args = configuration.getSettings().get(0);
assertThat(args.getName()).isEqualTo("args");
assertThat(args.getValue()).asList().hasSize(2);
assertThat(args.getValue()).asList().element(0)
.hasFieldOrPropertyWithValue("name", "arg")
.hasFieldOrPropertyWithValue("value", "-Done=1");
assertThat(args.getValue()).asList().element(1)
.hasFieldOrPropertyWithValue("name", "arg")
.hasFieldOrPropertyWithValue("value", "-Dtwo=2");
}
private static class TestKotlinProjectSettings extends SimpleKotlinProjectSettings {
TestKotlinProjectSettings() {
super("1.3.20");
}
@Override
public List<String> getCompilerArgs() {
return Arrays.asList("-Done=1", "-Dtwo=2");
}
}
}