From 5e2726f896b1ef77a9e43b3e275a6df6b806d608 Mon Sep 17 00:00:00 2001 From: Rui Figueira Date: Tue, 27 Mar 2018 00:45:40 +0100 Subject: [PATCH 1/2] Configure Kotlin compiler to use -java-parameters by default See gh-12641 --- .../asciidoc/production-ready-features.adoc | 9 +++---- .../spring-boot-parent/pom.xml | 1 + .../spring-boot-starter-parent/pom.xml | 1 + .../src/main/asciidoc/reacting.adoc | 2 +- .../gradle/plugin/KotlinPluginAction.java | 8 ++++++ .../KotlinPluginActionIntegrationTests.java | 13 ++++++++++ ...anOverrideDefaultJavaParametersFlag.gradle | 25 +++++++++++++++++++ ...TasksUseJavaParametersFlagByDefault.gradle | 21 ++++++++++++++++ 8 files changed, 74 insertions(+), 6 deletions(-) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinCompileTasksCanOverrideDefaultJavaParametersFlag.gradle create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinCompileTasksUseJavaParametersFlagByDefault.gradle diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc b/spring-boot-project/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc index 4eaced7005..3092da2d73 100644 --- a/spring-boot-project/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc +++ b/spring-boot-project/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc @@ -532,11 +532,10 @@ JSON request body. When exposed via JMX, the parameters are mapped to the parame the MBean's operations. Parameters are required by default. They can be made optional by annotating them with `@org.springframework.lang.Nullable`. -NOTE: To allow the input to be mapped to the operation method's parameters, code -implementing an endpoint should be compiled with `-parameters`. This will happen -automatically if you are using Spring Boot's Gradle plugin or if you are using Maven -and `spring-boot-starter-parent`. - +NOTE: To allow the input to be mapped to the operation method's parameters, java code +implementing an endpoint should be compiled with `-parameters`, and kotlin code should +be compiled with `-java-parameters`. This will happen automatically if you are using +Spring Boot's Gradle plugin or if you are using Maven and `spring-boot-starter-parent`. [[production-ready-endpoints-custom-input-conversion]] diff --git a/spring-boot-project/spring-boot-parent/pom.xml b/spring-boot-project/spring-boot-parent/pom.xml index 2b7aa47837..72c31c2c59 100644 --- a/spring-boot-project/spring-boot-parent/pom.xml +++ b/spring-boot-project/spring-boot-parent/pom.xml @@ -294,6 +294,7 @@ ${java.version} 1.1 1.1 + true diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-parent/pom.xml b/spring-boot-project/spring-boot-starters/spring-boot-starter-parent/pom.xml index c9a8e67685..393a528e35 100644 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-parent/pom.xml +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-parent/pom.xml @@ -51,6 +51,7 @@ ${kotlin.version} ${java.version} + true diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/reacting.adoc b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/reacting.adoc index 942af60367..063d55b459 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/reacting.adoc +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/reacting.adoc @@ -24,7 +24,7 @@ plugin: the `bootJar` task. 6. Configures any `JavaCompile` tasks with no configured encoding to use `UTF-8`. 7. Configures any `JavaCompile` tasks to use the `-parameters` compiler argument. - +8. Configures any `KotlinCompile` tasks to use the `-java-parameters` compiler argument. [[reacting-to-other-plugins-kotlin]] diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/KotlinPluginAction.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/KotlinPluginAction.java index 13c6e213ec..700c5ce6d3 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/KotlinPluginAction.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/KotlinPluginAction.java @@ -20,6 +20,7 @@ import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.plugins.ExtraPropertiesExtension; import org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper; +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile; /** * {@link PluginApplicationAction} that reacts to Kotlin's Gradle plugin being applied by @@ -39,6 +40,13 @@ class KotlinPluginAction implements PluginApplicationAction { if (!extraProperties.has("kotlin.version")) { extraProperties.set("kotlin.version", kotlinVersion); } + enableJavaParametersOption(project); + } + + private void enableJavaParametersOption(Project project) { + project.getTasks().withType(KotlinCompile.class, (compile) -> { + compile.getKotlinOptions().setJavaParameters(true); + }); } @Override diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests.java index 3f877315f0..97b8322c5f 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests.java @@ -52,4 +52,17 @@ public class KotlinPluginActionIntegrationTests { .containsPattern("org.jetbrains.kotlin:kotlin-stdlib-jdk8:* -> 1.2.10"); } + @Test + public void kotlinCompileTasksUseJavaParametersFlagByDefault() { + assertThat(this.gradleBuild.build("kotlinCompileTasksJavaParameters").getOutput()) + .contains("compileKotlin java parameters: true") + .contains("compileTestKotlin java parameters: true"); + } + + @Test + public void kotlinCompileTasksCanOverrideDefaultJavaParametersFlag() { + assertThat(this.gradleBuild.build("kotlinCompileTasksJavaParameters").getOutput()) + .contains("compileKotlin java parameters: false") + .contains("compileTestKotlin java parameters: false"); + } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinCompileTasksCanOverrideDefaultJavaParametersFlag.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinCompileTasksCanOverrideDefaultJavaParametersFlag.gradle new file mode 100644 index 0000000000..fc6b58756f --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinCompileTasksCanOverrideDefaultJavaParametersFlag.gradle @@ -0,0 +1,25 @@ +buildscript { + dependencies { + classpath files(pluginClasspath.split(',')) + } +} + +plugins { + id 'org.jetbrains.kotlin.jvm' version '1.2.10' +} + +apply plugin: 'org.springframework.boot' + +import org.jetbrains.kotlin.gradle.dsl.KotlinCompile + +tasks.withType(KotlinCompile) { + kotlinOptions.javaParameters = false +} + +task('kotlinCompileTasksJavaParameters') { + doFirst { + tasks.withType(KotlinCompile) { + println "$name java parameters: ${kotlinOptions.javaParameters}" + } + } +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinCompileTasksUseJavaParametersFlagByDefault.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinCompileTasksUseJavaParametersFlagByDefault.gradle new file mode 100644 index 0000000000..bce41d11bd --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests-kotlinCompileTasksUseJavaParametersFlagByDefault.gradle @@ -0,0 +1,21 @@ +buildscript { + dependencies { + classpath files(pluginClasspath.split(',')) + } +} + +plugins { + id 'org.jetbrains.kotlin.jvm' version '1.2.10' +} + +apply plugin: 'org.springframework.boot' + +import org.jetbrains.kotlin.gradle.dsl.KotlinCompile + +task('kotlinCompileTasksJavaParameters') { + doFirst { + tasks.withType(KotlinCompile) { + println "$name java parameters: ${kotlinOptions.javaParameters}" + } + } +} From 1f35abacd6958ecf4f68a30ed6dc072f1fec71cf Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 28 Mar 2018 12:21:22 +0100 Subject: [PATCH 2/2] =?UTF-8?q?Polish=20=E2=80=9CConfigure=20Kotlin=20comp?= =?UTF-8?q?iler=20to=20use=20-java-parameters=20by=20default=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes gh-12641 --- .../src/main/asciidoc/production-ready-features.adoc | 10 ++++++---- .../src/main/asciidoc/reacting.adoc | 3 ++- .../boot/gradle/plugin/KotlinPluginAction.java | 5 ++--- .../plugin/KotlinPluginActionIntegrationTests.java | 1 + 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc b/spring-boot-project/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc index 3092da2d73..c9e637ee91 100644 --- a/spring-boot-project/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc +++ b/spring-boot-project/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc @@ -532,10 +532,12 @@ JSON request body. When exposed via JMX, the parameters are mapped to the parame the MBean's operations. Parameters are required by default. They can be made optional by annotating them with `@org.springframework.lang.Nullable`. -NOTE: To allow the input to be mapped to the operation method's parameters, java code -implementing an endpoint should be compiled with `-parameters`, and kotlin code should -be compiled with `-java-parameters`. This will happen automatically if you are using -Spring Boot's Gradle plugin or if you are using Maven and `spring-boot-starter-parent`. +NOTE: To allow the input to be mapped to the operation method's parameters, Java code +implementing an endpoint should be compiled with `-parameters`, and Kotlin code +implementing an endpoint should be compiled with `-java-parameters`. This will happen +automatically if you are using Spring Boot's Gradle plugin or if you are using Maven and +`spring-boot-starter-parent`. + [[production-ready-endpoints-custom-input-conversion]] diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/reacting.adoc b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/reacting.adoc index 063d55b459..e7c730f9f5 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/reacting.adoc +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/reacting.adoc @@ -24,7 +24,7 @@ plugin: the `bootJar` task. 6. Configures any `JavaCompile` tasks with no configured encoding to use `UTF-8`. 7. Configures any `JavaCompile` tasks to use the `-parameters` compiler argument. -8. Configures any `KotlinCompile` tasks to use the `-java-parameters` compiler argument. + [[reacting-to-other-plugins-kotlin]] @@ -36,6 +36,7 @@ plugin: 1. Aligns the Kotlin version used in Spring Boot's dependency management with the version of the plugin. This is achieved by setting the `kotlin.version` property with a value that matches the version of the Kotlin plugin. +2. Configures any `KotlinCompile` tasks to use the `-java-parameters` compiler argument. diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/KotlinPluginAction.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/KotlinPluginAction.java index 700c5ce6d3..65dd533974 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/KotlinPluginAction.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/KotlinPluginAction.java @@ -44,9 +44,8 @@ class KotlinPluginAction implements PluginApplicationAction { } private void enableJavaParametersOption(Project project) { - project.getTasks().withType(KotlinCompile.class, (compile) -> { - compile.getKotlinOptions().setJavaParameters(true); - }); + project.getTasks().withType(KotlinCompile.class, + (compile) -> compile.getKotlinOptions().setJavaParameters(true)); } @Override diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests.java index 97b8322c5f..fcb5356d3a 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests.java @@ -65,4 +65,5 @@ public class KotlinPluginActionIntegrationTests { .contains("compileKotlin java parameters: false") .contains("compileTestKotlin java parameters: false"); } + }