[JS IR] Pass forward -Xir-property-lazy-initialization option

Pass forward -Xir-property-lazy-initialization option
for the incremental cache.

^KT-50175 Fixed
This commit is contained in:
Alexander Korepanov
2022-01-13 20:59:21 +03:00
committed by Space
parent 2f853175c7
commit 59173baf5a
17 changed files with 156 additions and 43 deletions
@@ -124,6 +124,51 @@ class Kotlin2JsIrGradlePluginIT : AbstractKotlin2JsGradlePluginIT(true) {
build("assemble")
}
}
@DisplayName("Check IR incremental cache invalidation by compiler args")
@GradleTest
fun testJsIrIncrementalCacheInvalidationByArgs(gradleVersion: GradleVersion) {
project("kotlin2JsIrICProject", gradleVersion) {
val buildConfig = buildGradleKts.readText()
fun setLazyInitializationArg(value: Boolean) {
buildGradleKts.writeText(buildConfig)
buildGradleKts.appendText(
"""
|
|tasks.named<org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrLink>("compileDevelopmentExecutableKotlinJs") {
| kotlinOptions {
| freeCompilerArgs += "-Xir-property-lazy-initialization=$value"
| }
|}
""".trimMargin()
)
}
fun String.testScriptOutLines() = this.lines().mapNotNull {
val trimmed = it.removePrefix(">>> TEST OUT: ")
if (trimmed == it) null else trimmed
}
// -Xir-property-lazy-initialization default is true
build("nodeRun") {
assertTasksExecuted(":compileDevelopmentExecutableKotlinJs")
assertEquals(listOf("Hello, Gradle."), output.testScriptOutLines())
}
setLazyInitializationArg(false)
build("nodeRun") {
assertTasksExecuted(":compileDevelopmentExecutableKotlinJs")
assertEquals(listOf("TOP LEVEL!", "Hello, Gradle."), output.testScriptOutLines())
}
setLazyInitializationArg(true)
build("nodeRun") {
assertTasksExecuted(":compileDevelopmentExecutableKotlinJs")
assertEquals(listOf("Hello, Gradle."), output.testScriptOutLines())
}
}
}
}
@JsGradlePluginTests
@@ -0,0 +1,19 @@
plugins {
kotlin("js")
}
group = "com.example"
version = "1.0"
repositories {
mavenCentral()
mavenLocal()
}
kotlin {
js(IR) {
binaries.executable()
nodejs {}
}
}
@@ -0,0 +1,3 @@
kotlin.code.style=official
kotlin.incremental.js.ir=true
kotlin.incremental.js.klib=true
@@ -0,0 +1,5 @@
fun main() {
println(greeting("Gradle"))
}
fun greeting(name: String) = ">>> TEST OUT: Hello, $name."
@@ -0,0 +1,2 @@
@JsExport
val topLevelForLazy = { println(">>> TEST OUT: TOP LEVEL!"); 0 }()