[Gradle] Add Gradle & task property to set compiler execution strategy

#KT-49299 Fixed
This commit is contained in:
Alexander Likhachev
2021-10-14 20:23:57 +03:00
committed by Space
parent b4cb7f3610
commit e9c8135dfa
11 changed files with 137 additions and 54 deletions
@@ -1,5 +1,6 @@
package org.jetbrains.kotlin.gradle
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy
import org.jetbrains.kotlin.gradle.util.checkedReplace
import org.jetbrains.kotlin.gradle.util.getFileByName
import org.jetbrains.kotlin.gradle.util.modify
@@ -45,46 +46,67 @@ class ExecutionStrategyJvmIT : ExecutionStrategyIT() {
abstract class ExecutionStrategyIT : BaseGradleIT() {
@Test
fun testDaemon() {
doTestExecutionStrategy("daemon", addHeapDumpOptions = false)
doTestExecutionStrategy(KotlinCompilerExecutionStrategy.DAEMON, addHeapDumpOptions = false)
}
@Test
fun testDaemonViaSystemProperty() {
doTestExecutionStrategy(KotlinCompilerExecutionStrategy.DAEMON, addHeapDumpOptions = false, viaSystemProperty = true)
}
@Test
fun testInProcess() {
doTestExecutionStrategy("in-process")
doTestExecutionStrategy(KotlinCompilerExecutionStrategy.IN_PROCESS)
}
@Test
fun testInProcessViaSystemProperty() {
doTestExecutionStrategy(KotlinCompilerExecutionStrategy.IN_PROCESS, viaSystemProperty = true)
}
@Test
fun testOutOfProcess() {
doTestExecutionStrategy("out-of-process")
doTestExecutionStrategy(KotlinCompilerExecutionStrategy.OUT_OF_PROCESS)
}
private fun doTestExecutionStrategy(executionStrategy: String, addHeapDumpOptions: Boolean = true) {
val project = Project("kotlinBuiltins", addHeapDumpOptions = addHeapDumpOptions)
setupProject(project)
@Test
fun testOutOfProcessViaSystemProperty() {
doTestExecutionStrategy(KotlinCompilerExecutionStrategy.OUT_OF_PROCESS, viaSystemProperty = true)
}
val strategyCLIArg = "-Dkotlin.compiler.execution.strategy=$executionStrategy"
val finishMessage = "Finished executing kotlin compiler using $executionStrategy strategy"
private fun doTestExecutionStrategy(
executionStrategy: KotlinCompilerExecutionStrategy,
addHeapDumpOptions: Boolean = true,
viaSystemProperty: Boolean = false
) {
with(Project("kotlinBuiltins", addHeapDumpOptions = addHeapDumpOptions)) {
setupProject(this)
project.build("build", strategyCLIArg) {
assertSuccessful()
assertContains(finishMessage)
checkOutput()
assertNoWarnings()
val cliArgPrefix = if (viaSystemProperty) "-D" else "-P"
val strategyCLIArg = "${cliArgPrefix}kotlin.compiler.execution.strategy=${executionStrategy.propertyValue}"
val finishMessage = "Finished executing kotlin compiler using $executionStrategy strategy"
if (executionStrategy == "daemon") {
checkCompileDaemon()
build("build", strategyCLIArg) {
assertSuccessful()
assertContains(finishMessage)
checkOutput()
assertNoWarnings()
if (executionStrategy == KotlinCompilerExecutionStrategy.DAEMON) {
checkCompileDaemon()
}
}
}
val classesKt = project.projectDir.getFileByName("classes.kt")
classesKt.modify {
it.checkedReplace("class B", "//class B")
}
project.build("build", strategyCLIArg) {
assertSuccessful()
assertContains(finishMessage)
checkOutputAfterChange()
assertNoWarnings()
val classesKt = projectDir.getFileByName("classes.kt")
classesKt.modify {
it.checkedReplace("class B", "//class B")
}
build("build", strategyCLIArg) {
assertSuccessful()
assertContains(finishMessage)
checkOutputAfterChange()
assertNoWarnings()
}
}
}
@@ -3,6 +3,7 @@ package org.jetbrains.kotlin.gradle
import org.gradle.api.logging.LogLevel
import org.gradle.api.logging.configuration.WarningMode
import org.gradle.util.GradleVersion
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy
import org.jetbrains.kotlin.gradle.testbase.*
import org.junit.jupiter.api.DisplayName
@@ -19,7 +20,7 @@ class SimpleKotlinGradleIT : KGPBaseTest() {
buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG),
) {
build("compileDeployKotlin", "build") {
assertOutputContains("Finished executing kotlin compiler using daemon strategy")
assertOutputContains("Finished executing kotlin compiler using ${KotlinCompilerExecutionStrategy.DAEMON} strategy")
assertFileInProjectExists("build/reports/tests/test/classes/demo.TestSource.html")
assertTasksExecuted(":compileKotlin", ":compileTestKotlin", ":compileDeployKotlin")
}