Skip to content

Commit 3d70429

Browse files
author
xeruf
committed
build(gradle): migrate jvm conventions to kotlin dsl
1 parent 56319cd commit 3d70429

4 files changed

Lines changed: 28 additions & 79 deletions

File tree

gradle/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ if (!javaRuntimeVersion.isCompatibleWith(JavaVersion.VERSION_17)) {
5555

5656
// == Split script modules ==
5757
// JVM conventions are kept in a dedicated applied script for readability.
58-
apply(from = "gradle/jvm-conventions.gradle")
58+
apply(from = "gradle/jvm-conventions.gradle.kts")
5959
apply(from = "gradle/integration-tasks.gradle.kts")
6060
apply(from = "gradle/release-task.gradle.kts")
6161

gradle/jvm-conventions-maintainership-comparison.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# JVM Conventions: Groovy vs Kotlin DSL
22

3-
This document compares the existing `gradle/jvm-conventions.gradle` with the side-by-side Kotlin DSL alternative `gradle/jvm-conventions.gradle.kts`.
3+
This document compares the historical Groovy script `gradle/jvm-conventions.gradle` with the active Kotlin DSL script `gradle/jvm-conventions.gradle.kts`.
44

55
## Side-by-side Summary
66

gradle/jvm-conventions.gradle

Lines changed: 0 additions & 60 deletions
This file was deleted.

gradle/jvm-conventions.gradle.kts

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,24 @@
11
/*
22
* Shared JVM conventions for all subprojects.
3-
*
4-
* Kotlin DSL alternative to gradle/jvm-conventions.gradle.
5-
* Not wired into the build by default.
63
*/
74

85
import org.gradle.api.JavaVersion
6+
import org.gradle.api.plugins.JavaPluginExtension
97
import org.gradle.api.tasks.compile.JavaCompile
108
import org.gradle.jvm.toolchain.JavaLanguageVersion
119
import org.gradle.api.tasks.testing.Test
12-
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
1310

1411
val javaToolchainVersion = rootProject.extra["javaToolchainVersion"] as Int
1512
val javaTargetVersion = rootProject.extra["javaTargetVersion"] as JavaVersion
13+
val kotlinCompileTaskNames = setOf("compileKotlin", "compileTestKotlin")
1614

1715
subprojects {
1816
apply(plugin = "java-library")
1917
apply(plugin = "kotlin")
2018
apply(plugin = "com.github.ben-manes.versions")
2119
apply(plugin = "se.patrikerdes.use-latest-versions")
2220

23-
java {
21+
extensions.configure(JavaPluginExtension::class.java) {
2422
toolchain {
2523
languageVersion.set(JavaLanguageVersion.of(javaToolchainVersion))
2624
}
@@ -43,19 +41,30 @@ subprojects {
4341
}
4442
}
4543

46-
tasks.withType(KotlinJvmCompile::class.java).configureEach {
47-
compilerOptions {
48-
jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.fromTarget(javaTargetVersion.toString()))
44+
tasks
45+
.matching { it.name in kotlinCompileTaskNames }
46+
.configureEach {
47+
val kotlinOptions = if (hasProperty("kotlinOptions")) property("kotlinOptions") else null
48+
if (kotlinOptions != null) {
49+
kotlinOptions.javaClass.getMethod("setJvmTarget", String::class.java)
50+
.invoke(kotlinOptions, javaTargetVersion.toString())
4951

50-
val current = freeCompilerArgs.get().toMutableList()
51-
current.removeAll { it == "-Xjvm-default=all" }
52-
if (!current.contains("-jvm-default=no-compatibility")) {
53-
current.add("-jvm-default=no-compatibility")
54-
}
55-
if (!current.contains("-Xconsistent-data-class-copy-visibility")) {
56-
current.add("-Xconsistent-data-class-copy-visibility")
52+
@Suppress("UNCHECKED_CAST")
53+
val args = (kotlinOptions.javaClass.getMethod("getFreeCompilerArgs").invoke(kotlinOptions) as? List<String>).orEmpty()
54+
val updated = args
55+
.filterNot { it == "-Xjvm-default=all" }
56+
.toMutableList()
57+
.also {
58+
if (!it.contains("-jvm-default=no-compatibility")) {
59+
it.add("-jvm-default=no-compatibility")
60+
}
61+
if (!it.contains("-Xconsistent-data-class-copy-visibility")) {
62+
it.add("-Xconsistent-data-class-copy-visibility")
63+
}
64+
}
65+
66+
kotlinOptions.javaClass.getMethod("setFreeCompilerArgs", List::class.java)
67+
.invoke(kotlinOptions, updated)
5768
}
58-
freeCompilerArgs.set(current)
5969
}
60-
}
6170
}

0 commit comments

Comments
 (0)