Skip to content

Commit ad1ac55

Browse files
fix: force kotlin-stdlib to 2.0.
1 parent d38cede commit ad1ac55

File tree

4 files changed

+83
-46
lines changed

4 files changed

+83
-46
lines changed

build-logic/convention/src/main/kotlin/com/autonomousapps/convention/LibKotlinConventionPlugin.kt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,27 @@
22
// SPDX-License-Identifier: Apache-2.0
33
package com.autonomousapps.convention
44

5-
import com.autonomousapps.convention.internal.kotlin.configureDokka
6-
import com.autonomousapps.convention.internal.kotlin.configureKotlin
5+
import com.autonomousapps.convention.internal.kotlin.KotlinConfigurer
76
import com.vanniktech.maven.publish.JavadocJar
87
import com.vanniktech.maven.publish.KotlinJvm
98
import com.vanniktech.maven.publish.MavenPublishBaseExtension
109
import org.gradle.api.Plugin
1110
import org.gradle.api.Project
12-
import org.gradle.api.artifacts.VersionCatalogsExtension
1311

1412
public abstract class LibKotlinConventionPlugin : Plugin<Project> {
1513

1614
override fun apply(target: Project): Unit = target.run {
1715
pluginManager.apply("org.jetbrains.kotlin.jvm")
1816
BaseConventionPlugin(this).configure()
1917

20-
val versionCatalog = extensions.getByType(VersionCatalogsExtension::class.java).named("libs")
21-
22-
configureDokka(versionCatalog)
23-
configureKotlin(versionCatalog)
18+
configureKotlin()
2419
configurePublishing()
2520
}
2621

22+
private fun Project.configureKotlin() {
23+
KotlinConfigurer(this).configure()
24+
}
25+
2726
private fun Project.configurePublishing() {
2827
extensions.getByType(MavenPublishBaseExtension::class.java).run {
2928
configure(

build-logic/convention/src/main/kotlin/com/autonomousapps/convention/PluginConventionPlugin.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
// SPDX-License-Identifier: Apache-2.0
33
package com.autonomousapps.convention
44

5-
import com.autonomousapps.convention.internal.kotlin.configureDokka
6-
import com.autonomousapps.convention.internal.kotlin.configureKotlin
5+
import com.autonomousapps.convention.internal.kotlin.KotlinConfigurer
76
import com.gradle.publish.PublishTask
87
import com.vanniktech.maven.publish.GradlePublishPlugin
98
import com.vanniktech.maven.publish.MavenPublishBaseExtension
@@ -27,9 +26,8 @@ public abstract class PluginConventionPlugin : Plugin<Project> {
2726

2827
val versionCatalog = extensions.getByType(VersionCatalogsExtension::class.java).named("libs")
2928

30-
configureDokka(versionCatalog)
3129
configureGroovy(versionCatalog)
32-
configureKotlin(versionCatalog)
30+
configureKotlin()
3331
configurePlugins()
3432
configurePublishing()
3533
disableConfigurationCache()
@@ -45,6 +43,10 @@ public abstract class PluginConventionPlugin : Plugin<Project> {
4543
}
4644
}
4745

46+
private fun Project.configureKotlin() {
47+
KotlinConfigurer(this).configure()
48+
}
49+
4850
/**
4951
* @see <a href="https://github.com/gradle/gradle/issues/22600">Enable stricter validation of plugins by default for validatePlugins task</a>
5052
*/
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
// Copyright (c) 2025. Tony Robalik.
2+
// SPDX-License-Identifier: Apache-2.0
3+
package com.autonomousapps.convention.internal.kotlin
4+
5+
import org.gradle.api.Project
6+
import org.gradle.api.artifacts.VersionCatalogsExtension
7+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
8+
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
9+
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
10+
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
11+
12+
internal class KotlinConfigurer(private val project: Project) {
13+
14+
private val versionCatalog = project.extensions.getByType(VersionCatalogsExtension::class.java).named("libs")
15+
16+
private val dokka = versionCatalog.findLibrary("kotlin.dokka").get()
17+
private val javaTarget = versionCatalog.findVersion("javaTarget").orElseThrow().requiredVersion
18+
private val kotlin = versionCatalog.findVersion("kotlin").get().requiredVersion
19+
20+
// this function expects strings of the form 2.x, not 2.x.y
21+
private val kotlinVersion = KotlinVersion.fromVersion(kotlin.substringBeforeLast('.'))
22+
23+
private val kotlinJvmExtension = project.extensions.getByType(KotlinJvmProjectExtension::class.java)
24+
25+
fun configure(): Unit = project.run {
26+
kotlinJvmExtension.explicitApi()
27+
28+
configureDokka()
29+
configureKotlinTarget()
30+
configureKotlinVersion()
31+
}
32+
33+
private fun Project.configureDokka() {
34+
dependencies.add("dokkaHtmlPlugin", dokka)
35+
}
36+
37+
private fun Project.configureKotlinTarget() {
38+
tasks.withType(KotlinCompile::class.java).configureEach { t ->
39+
t.compilerOptions {
40+
// Ensure compatibility with Gradle 8.x. See https://docs.gradle.org/9.0.0/userguide/compatibility.html.
41+
apiVersion.set(kotlinVersion)
42+
languageVersion.set(kotlinVersion)
43+
jvmTarget.set(JvmTarget.fromTarget(javaTarget))
44+
freeCompilerArgs.add(
45+
// equivalent to JavaCompile's `options.release`
46+
"-Xjdk-release=$javaTarget",
47+
)
48+
}
49+
}
50+
}
51+
52+
/**
53+
* @see <a href="https://github.com/autonomousapps/dependency-analysis-gradle-plugin/issues/1537#issuecomment-3293306966">Issue 1537</a>
54+
*/
55+
private fun Project.configureKotlinVersion() {
56+
configurations.configureEach { c ->
57+
if (c.isCanBeResolved) {
58+
c.resolutionStrategy { r ->
59+
r.eachDependency { details ->
60+
val requested = details.requested
61+
62+
if (requested.group == "org.jetbrains.kotlin" && requested.name == "kotlin-stdlib") {
63+
details.useVersion(kotlin)
64+
details.because("Downgrading the stdlib for enhanced compatibility")
65+
}
66+
}
67+
}
68+
}
69+
}
70+
}
71+
}

build-logic/convention/src/main/kotlin/com/autonomousapps/convention/internal/kotlin/configureKotlin.kt

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

0 commit comments

Comments
 (0)