Skip to content

Commit a07119b

Browse files
TapchicomaSpace Team
authored and
Space Team
committed
[Gradle] Fix task created by KotlinJvmApi is not configuration cache compatible
In this case, "kotlin" extension is missing on the project, which leads to inaccessible "compilerVersion" property. Now logic fallbacks to the current plugin version. ^KT-67685 Verification Pending
1 parent 4fc80c1 commit a07119b

File tree

3 files changed

+23
-4
lines changed

3 files changed

+23
-4
lines changed

libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinJvmApiTest.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ import kotlin.io.path.writeText
1515

1616
@DisplayName("JVM API validation")
1717
class KotlinJvmApiTest : KGPBaseTest() {
18+
override val defaultBuildOptions: BuildOptions = super.defaultBuildOptions.copy(
19+
configurationCache = true
20+
)
21+
1822
@DisplayName("Kotlin compilation can be set up using APIs")
1923
@JvmGradlePluginTests
2024
@GradleTest

libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ abstract class DefaultKotlinBasePlugin : KotlinBasePlugin {
113113
.withType<ExternalDependency>()
114114
.configureEach { dependency ->
115115
dependency.version { versionConstraint ->
116-
versionConstraint.strictly(project.kotlinExtension.compilerVersion.get())
116+
versionConstraint.strictly(project.kotlinExtensionOrNull?.compilerVersion?.get() ?: pluginVersion)
117117
}
118118
}
119119
}

libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinCompileApiTest.kt

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ package org.jetbrains.kotlin.gradle.unitTests
77

88
import org.gradle.api.internal.project.ProjectInternal
99
import org.jetbrains.kotlin.gradle.dsl.ExplicitApiMode
10+
import org.jetbrains.kotlin.gradle.internal.KOTLIN_COMPILER_EMBEDDABLE
11+
import org.jetbrains.kotlin.gradle.internal.KOTLIN_MODULE_GROUP
12+
import org.jetbrains.kotlin.gradle.plugin.COMPILER_CLASSPATH_CONFIGURATION_NAME
1013
import org.jetbrains.kotlin.gradle.plugin.KotlinApiPlugin
11-
import org.jetbrains.kotlin.gradle.plugin.KotlinJvmFactory
1214
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
1315
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
1416
import org.jetbrains.kotlin.gradle.util.buildProject
@@ -17,15 +19,14 @@ import org.junit.Rule
1719
import org.junit.Test
1820
import org.junit.rules.TemporaryFolder
1921
import kotlin.test.assertEquals
20-
import kotlin.test.assertTrue
2122

2223
class KotlinCompileApiTest {
2324

2425
@get:Rule
2526
val tmpDir = TemporaryFolder()
2627

2728
private lateinit var project: ProjectInternal
28-
private lateinit var plugin: KotlinJvmFactory
29+
private lateinit var plugin: KotlinApiPlugin
2930
private lateinit var taskApi: KotlinJvmCompile
3031
private lateinit var taskImpl: KotlinCompile
3132

@@ -143,4 +144,18 @@ class KotlinCompileApiTest {
143144
project.evaluate()
144145
assertEquals(ExplicitApiMode.Strict, taskImpl.explicitApiMode.orNull)
145146
}
147+
148+
@Test
149+
fun testBuiltToolsApiVersion() {
150+
val compilerDependency = project.configurations
151+
.getByName(COMPILER_CLASSPATH_CONFIGURATION_NAME)
152+
.incoming
153+
.dependencies
154+
.single()
155+
156+
assertEquals(
157+
"$KOTLIN_MODULE_GROUP:$KOTLIN_COMPILER_EMBEDDABLE:${plugin.pluginVersion}",
158+
"${compilerDependency.group}:${compilerDependency.name}:${compilerDependency.version}"
159+
)
160+
}
146161
}

0 commit comments

Comments
 (0)