From e65f2e465eb28bd08126c925a0214dfe44e6556f Mon Sep 17 00:00:00 2001 From: Svyatoslav Scherbina Date: Sat, 28 Aug 2021 01:15:52 +0300 Subject: [PATCH] [Gradle] Fix switching in-process to Native embeddable compiler jar Compiler runner used incorrect cache key for isolated classloader: it didn't take the actually used compiler jar into account, only the K/N home dir. Fix this by using the entire classpath as a key. --- .../native/NativeEmbeddableCompilerJarIT.kt | 21 +++++++++++++++++++ .../compilerRunner/nativeToolRunners.kt | 5 ++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeEmbeddableCompilerJarIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeEmbeddableCompilerJarIT.kt index dedde5c5184..c9ff2fb6452 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeEmbeddableCompilerJarIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativeEmbeddableCompilerJarIT.kt @@ -55,4 +55,25 @@ class NativeEmbeddableCompilerJarIT : BaseGradleIT() { } } } + + @Test + fun testSwitch() = with(transformNativeTestProjectWithPluginDsl("executables", directoryPrefix = "native-binaries")) { + build(":runDebugExecutableHost") { + assertSuccessful() + checkNativeCompilerClasspath(":linkDebugExecutableHost", ":compileKotlinHost") { + assertTrue(it.includesRegularJar()) + assertFalse(it.includesEmbeddableJar()) + } + } + + build(":clean") {} // Ensure the tasks aren't up-to-date. + + build(":runDebugExecutableHost", "-Pkotlin.native.useEmbeddableCompilerJar=true") { + assertSuccessful() + checkNativeCompilerClasspath(":linkDebugExecutableHost", ":compileKotlinHost") { + assertFalse(it.includesRegularJar()) + assertTrue(it.includesEmbeddableJar()) + } + } + } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/nativeToolRunners.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/nativeToolRunners.kt index 6b0e3d354ed..1d2177de3d5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/nativeToolRunners.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/nativeToolRunners.kt @@ -99,7 +99,10 @@ internal abstract class KotlinNativeToolRunner( """.trimIndent() } - final override val isolatedClassLoaderCacheKey get() = project.konanHome + data class IsolatedClassLoaderCacheKey(val classpath: Set) + + // TODO: can't we use this for other implementations too? + final override val isolatedClassLoaderCacheKey get() = IsolatedClassLoaderCacheKey(classpath) override fun transformArgs(args: List) = listOf(toolName) + args