Skip to content

Commit a48e5ba

Browse files
sdeleuzewilkinsona
authored andcommitted
Upgrade to Kotlin 2.2.0
This commit leverages Kotlin 2.2 which is expected to be the new baseline for Spring Boot 4.0, so API and language versions are upgraded to KOTLIN_2_2 as well. It also enables the -Xannotation-default-target=param-property compiler flag, mainly for test purpose, in order to avoid the related warnings and to use what will likely be the default in an upcoming Kotlin version short term. For more details see https://youtrack.jetbrains.com/issue/KT-73255. KotlinPlatformJvmPlugin was a class from an old KMP plugin, deprecated for a long time and now removed. So its usage in PluginClasspathGradleBuild has been removed as well. Signed-off-by: Sébastien Deleuze <[email protected]> See gh-46238
1 parent 95ba981 commit a48e5ba

File tree

4 files changed

+10
-12
lines changed

4 files changed

+10
-12
lines changed

buildSrc/src/main/java/org/springframework/boot/build/KotlinConventions.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class KotlinConventions {
5454

5555
private static final JvmTarget JVM_TARGET = JvmTarget.JVM_17;
5656

57-
private static final KotlinVersion KOTLIN_VERSION = KotlinVersion.KOTLIN_2_1;
57+
private static final KotlinVersion KOTLIN_VERSION = KotlinVersion.KOTLIN_2_2;
5858

5959
void apply(Project project) {
6060
project.getPlugins().withId("org.jetbrains.kotlin.jvm", (plugin) -> {
@@ -70,7 +70,8 @@ private void configure(KotlinCompile compile) {
7070
compilerOptions.getLanguageVersion().set(KOTLIN_VERSION);
7171
compilerOptions.getJvmTarget().set(JVM_TARGET);
7272
compilerOptions.getAllWarningsAsErrors().set(true);
73-
compilerOptions.getFreeCompilerArgs().addAll("-Xsuppress-version-warnings");
73+
compilerOptions.getFreeCompilerArgs()
74+
.addAll("-Xsuppress-version-warnings", "-Xannotation-default-target=param-property");
7475
}
7576

7677
private void configureDokkatoo(Project project) {

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ hamcrestVersion=3.0
1414
jacksonVersion=2.19.1
1515
javaFormatVersion=0.0.47
1616
junitJupiterVersion=5.13.1
17-
kotlinVersion=2.1.0
17+
kotlinVersion=2.2.0
1818
mavenVersion=3.9.10
1919
mockitoVersion=5.17.0
2020
nativeBuildToolsVersion=0.10.6

spring-boot-project/spring-boot-docs/src/docs/antora/modules/reference/pages/features/kotlin.adoc

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@ Feel free to join the #spring channel of https://slack.kotlinlang.org/[Kotlin Sl
1515
[[features.kotlin.requirements]]
1616
== Requirements
1717

18-
Spring Boot requires at least Kotlin 2.1.x and manages a suitable Kotlin version through dependency management.
18+
Spring Boot requires at least Kotlin 2.2.x and manages a suitable Kotlin version through dependency management.
1919
To use Kotlin, `org.jetbrains.kotlin:kotlin-stdlib` and `org.jetbrains.kotlin:kotlin-reflect` must be present on the classpath.
20-
The `kotlin-stdlib` variants `kotlin-stdlib-jdk7` and `kotlin-stdlib-jdk8` can also be used.
20+
21+
Kotlin 2.2.x introduces https://kotlinlang.org/docs/whatsnew22.html#new-defaulting-rules-for-use-site-annotation-targets[new defaulting rules for propagating annotations to parameters, fields, and properties]. In order to avoid related warnings and use what will likely become the Kotlin default behavior in an upcoming version, it is recommended to configure the `-Xannotation-default-target=param-property` compiler flag.
2122

2223
Since https://discuss.kotlinlang.org/t/classes-final-by-default/166[Kotlin classes are final by default], you are likely to want to configure {url-kotlin-docs}/compiler-plugins.html#spring-support[kotlin-spring] plugin in order to automatically open Spring-annotated classes so that they can be proxied.
2324

@@ -39,15 +40,13 @@ Kotlin also allows using functional constructs with nullable values as described
3940

4041
Although Java does not allow one to express null-safety in its type system, Spring Framework, Spring Data, and Reactor now provide null-safety of their API through tooling-friendly annotations.
4142
By default, types from Java APIs used in Kotlin are recognized as {url-kotlin-docs}/java-interop.html#null-safety-and-platform-types[platform types] for which null-checks are relaxed.
42-
{url-kotlin-docs}/java-interop.html#jsr-305-support[Kotlin's support for JSR 305 annotations] combined with nullability annotations provide null-safety for the related Spring API in Kotlin.
43+
{url-kotlin-docs}/java-interop.html#nullability-annotations[Kotlin's support for nullability annotations] provides null-safety for the annotated APIs like Spring's one in Kotlin.
4344

44-
The JSR 305 checks can be configured by adding the `-Xjsr305` compiler flag with the following options: `-Xjsr305={strict|warn|ignore}`.
45+
The https://jspecify.dev[JSpecify] strict checks are https://kotlinlang.org/docs/whatsnew21.html#change-of-jspecify-nullability-mismatch-diagnostics-severity-to-strict[enabled by default], while the JSR 305 checks can be configured by adding the `-Xjsr305` compiler flag with the following options: `-Xjsr305={strict|warn|ignore}`.
4546
The default behavior is the same as `-Xjsr305=warn`.
4647
The `strict` value is required to have null-safety taken in account in Kotlin types inferred from Spring API but should be used with the knowledge that Spring API nullability declaration could evolve even between minor releases and more checks may be added in the future).
4748

48-
WARNING: Generic type arguments, varargs and array elements nullability are not yet supported.
49-
See https://jira.spring.io/browse/SPR-15942[SPR-15942] for up-to-date information.
50-
Also be aware that Spring Boot's own API is {url-github-issues}/10712[not yet annotated].
49+
WARNING: Be aware that Spring Boot's own API is {url-github-issues}/10712[not yet annotated].
5150

5251

5352

spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/testkit/PluginClasspathGradleBuild.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import org.gradle.testkit.runner.GradleRunner;
3636
import org.jetbrains.kotlin.gradle.model.KotlinProject;
3737
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerPluginSupportPlugin;
38-
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformJvmPlugin;
3938
import org.jetbrains.kotlin.project.model.LanguageSettings;
4039
import org.jetbrains.kotlin.tooling.core.KotlinToolingVersion;
4140
import org.tomlj.Toml;
@@ -85,7 +84,6 @@ private List<File> pluginClasspath() {
8584
classpath.add(new File(pathOfJarContaining(DependencyManagementPlugin.class)));
8685
if (this.kotlin) {
8786
classpath.add(new File(pathOfJarContaining("org.jetbrains.kotlin.cli.common.PropertiesKt")));
88-
classpath.add(new File(pathOfJarContaining(KotlinPlatformJvmPlugin.class)));
8987
classpath.add(new File(pathOfJarContaining(KotlinProject.class)));
9088
classpath.add(new File(pathOfJarContaining(KotlinToolingVersion.class)));
9189
classpath.add(new File(pathOfJarContaining("org.jetbrains.kotlin.build.report.metrics.BuildTime")));

0 commit comments

Comments
 (0)