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 4eaced70057..c9e637ee911 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,11 @@ 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
+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`.
diff --git a/spring-boot-project/spring-boot-parent/pom.xml b/spring-boot-project/spring-boot-parent/pom.xml
index 2b7aa47837c..72c31c2c59f 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 c9a8e676859..393a528e353 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 942af60367c..e7c730f9f59 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
@@ -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 13c6e213ec1..65dd5339741 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,12 @@ 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 3f877315f0d..fcb5356d3a3 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,18 @@ 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 00000000000..fc6b58756f4
--- /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 00000000000..bce41d11bd0
--- /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}"
+ }
+ }
+}