Skip to content

Commit 78adde6

Browse files
wojtek-kalicinskiSpace Team
authored andcommitted
[KGP] Align daemon classpath between BTA and non-BTA compilations
Otherwise, compiling JVM with BTA and JS without BTA will spin up two daemons, possibly affecting performance. ^KT-81415 Fixed
1 parent 4d117cf commit 78adde6

File tree

3 files changed

+53
-6
lines changed

3 files changed

+53
-6
lines changed

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

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66
package org.jetbrains.kotlin.gradle
77

88
import org.gradle.api.logging.LogLevel
9+
import org.gradle.kotlin.dsl.kotlin
910
import org.gradle.util.GradleVersion
11+
import org.jetbrains.kotlin.gradle.internals.asFinishLogMessage
12+
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy
1013
import org.jetbrains.kotlin.gradle.testbase.*
1114
import org.junit.jupiter.api.DisplayName
1215
import kotlin.io.path.writeText
@@ -196,4 +199,39 @@ class KotlinDaemonJvmArgsTest : KGPDaemonsBaseTest() {
196199
}
197200
}
198201
}
202+
203+
@GradleTest
204+
@DisplayName("Ensures that only one Kotlin compiler daemon is started for both JVM and JavaScript compilation")
205+
fun ensureOnlyOneDaemonStartedForJvmAndJsWithBta(gradleVersion: GradleVersion) {
206+
ensureOnlyOneDaemonStartedForJvmAndJs(gradleVersion, withBta = true)
207+
}
208+
209+
@GradleTest
210+
@DisplayName("Ensures that only one Kotlin compiler daemon is started for both JVM and JavaScript compilation when BTA disabled")
211+
fun ensureOnlyOneDaemonStartedForJvmAndJsWithoutBta(gradleVersion: GradleVersion) {
212+
ensureOnlyOneDaemonStartedForJvmAndJs(gradleVersion, withBta = false)
213+
}
214+
215+
fun ensureOnlyOneDaemonStartedForJvmAndJs(gradleVersion: GradleVersion, withBta: Boolean) {
216+
project("emptyKts", gradleVersion) {
217+
plugins {
218+
kotlin("multiplatform")
219+
}
220+
buildScriptInjection {
221+
kotlinMultiplatform.jvm()
222+
kotlinMultiplatform.js()
223+
kotlinMultiplatform.sourceSets.getByName("commonMain").compileSource("class Common")
224+
}
225+
build(
226+
"assemble",
227+
buildOptions = buildOptions.copy(
228+
configurationCache = BuildOptions.ConfigurationCacheValue.DISABLED,
229+
runViaBuildToolsApi = withBta
230+
)
231+
) {
232+
assertOutputContains(KotlinCompilerExecutionStrategy.DAEMON.asFinishLogMessage)
233+
assertOutputContainsExactlyTimes("starting the daemon as", 1)
234+
}
235+
}
236+
}
199237
}

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

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,18 @@ abstract class DefaultKotlinBasePlugin : KotlinBasePlugin {
110110
.configurations
111111
.maybeCreateResolvable(COMPILER_CLASSPATH_CONFIGURATION_NAME)
112112
.defaultDependencies {
113-
it.add(
114-
project.dependencies.create("$KOTLIN_MODULE_GROUP:$KOTLIN_COMPILER_EMBEDDABLE:${project.getKotlinPluginVersion()}")
115-
)
113+
if (project.kotlinPropertiesProvider.runKotlinCompilerViaBuildToolsApi.get()) {
114+
it.add(
115+
project.dependencies.create("$KOTLIN_MODULE_GROUP:$KOTLIN_BUILD_TOOLS_API_COMPAT:$pluginVersion")
116+
)
117+
it.add(
118+
project.dependencies.create("$KOTLIN_MODULE_GROUP:$KOTLIN_BUILD_TOOLS_API_IMPL:$pluginVersion")
119+
)
120+
} else {
121+
it.add(
122+
project.dependencies.create("$KOTLIN_MODULE_GROUP:$KOTLIN_COMPILER_EMBEDDABLE:${project.getKotlinPluginVersion()}")
123+
)
124+
}
116125
}
117126
project
118127
.configurations

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import org.gradle.api.tasks.compile.JavaCompile
1010
import org.jetbrains.kotlin.gradle.dsl.ExplicitApiMode
1111
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
1212
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions
13-
import org.jetbrains.kotlin.gradle.internal.KOTLIN_COMPILER_EMBEDDABLE
13+
import org.jetbrains.kotlin.gradle.internal.KOTLIN_BUILD_TOOLS_API_IMPL
1414
import org.jetbrains.kotlin.gradle.internal.KOTLIN_MODULE_GROUP
1515
import org.jetbrains.kotlin.gradle.plugin.COMPILER_CLASSPATH_CONFIGURATION_NAME
1616
import org.jetbrains.kotlin.gradle.plugin.KotlinApiPlugin
@@ -183,10 +183,10 @@ class KotlinCompileApiTest {
183183
.getByName(COMPILER_CLASSPATH_CONFIGURATION_NAME)
184184
.incoming
185185
.dependencies
186-
.single()
186+
.single { it.name == KOTLIN_BUILD_TOOLS_API_IMPL }
187187

188188
assertEquals(
189-
"$KOTLIN_MODULE_GROUP:$KOTLIN_COMPILER_EMBEDDABLE:${plugin.pluginVersion}",
189+
"$KOTLIN_MODULE_GROUP:$KOTLIN_BUILD_TOOLS_API_IMPL:${plugin.pluginVersion}",
190190
"${compilerDependency.group}:${compilerDependency.name}:${compilerDependency.version}"
191191
)
192192
}

0 commit comments

Comments
 (0)