[Gradle, JS] Rename of property for control compiler type

This commit is contained in:
Ilya Goncharov
2020-02-03 13:55:52 +03:00
parent 8de4966e53
commit d86384225e
16 changed files with 79 additions and 76 deletions
@@ -11,7 +11,7 @@ import org.jdom.output.Format
import org.jdom.output.XMLOutputter import org.jdom.output.XMLOutputter
import org.jetbrains.kotlin.gradle.model.ModelContainer import org.jetbrains.kotlin.gradle.model.ModelContainer
import org.jetbrains.kotlin.gradle.model.ModelFetcherBuildAction import org.jetbrains.kotlin.gradle.model.ModelFetcherBuildAction
import org.jetbrains.kotlin.gradle.plugin.JsMode import org.jetbrains.kotlin.gradle.plugin.JsCompilerType
import org.jetbrains.kotlin.gradle.util.* import org.jetbrains.kotlin.gradle.util.*
import org.jetbrains.kotlin.test.util.trimTrailingWhitespaces import org.jetbrains.kotlin.test.util.trimTrailingWhitespaces
import org.junit.After import org.junit.After
@@ -212,7 +212,7 @@ abstract class BaseGradleIT {
val withBuildCache: Boolean = false, val withBuildCache: Boolean = false,
val kaptOptions: KaptOptions? = null, val kaptOptions: KaptOptions? = null,
val parallelTasksInProject: Boolean? = null, val parallelTasksInProject: Boolean? = null,
val jsMode: JsMode? = null val jsCompilerType: JsCompilerType? = null
) )
data class KaptOptions(val verbose: Boolean, val useWorkers: Boolean, val incrementalKapt: Boolean = false, val includeCompileClasspath: Boolean = true) data class KaptOptions(val verbose: Boolean, val useWorkers: Boolean, val incrementalKapt: Boolean = false, val includeCompileClasspath: Boolean = true)
@@ -764,8 +764,8 @@ Finished executing task ':$taskName'|
add("-Pkotlin.parallel.tasks.in.project=$it") add("-Pkotlin.parallel.tasks.in.project=$it")
} }
options.jsMode?.let { options.jsCompilerType?.let {
add("-Pkotlin.js.mode=$it") add("-Pkotlin.js.compiler=$it")
} }
// Workaround: override a console type set in the user machine gradle.properties (since Gradle 4.3): // Workaround: override a console type set in the user machine gradle.properties (since Gradle 4.3):
@@ -1,7 +1,7 @@
package org.jetbrains.kotlin.gradle package org.jetbrains.kotlin.gradle
import org.gradle.api.logging.LogLevel import org.gradle.api.logging.LogLevel
import org.jetbrains.kotlin.gradle.plugin.JsMode import org.jetbrains.kotlin.gradle.plugin.JsCompilerType
import org.jetbrains.kotlin.gradle.tasks.USING_JS_INCREMENTAL_COMPILATION_MESSAGE import org.jetbrains.kotlin.gradle.tasks.USING_JS_INCREMENTAL_COMPILATION_MESSAGE
import org.jetbrains.kotlin.gradle.tasks.USING_JS_IR_BACKEND_MESSAGE import org.jetbrains.kotlin.gradle.tasks.USING_JS_IR_BACKEND_MESSAGE
import org.jetbrains.kotlin.gradle.util.getFileByName import org.jetbrains.kotlin.gradle.util.getFileByName
@@ -510,7 +510,7 @@ abstract class AbstractKotlin2JsGradlePluginIT(private val irBackend: Boolean) :
gradleSettingsScript().modify(::transformBuildScriptWithPluginsDsl) gradleSettingsScript().modify(::transformBuildScriptWithPluginsDsl)
if (!irBackend) { if (!irBackend) {
gradleProperties().appendText(jsMode(JsMode.LEGACY)) gradleProperties().appendText(jsMode(JsCompilerType.LEGACY))
} }
build("build") { build("build") {
@@ -4,10 +4,9 @@
*/ */
package org.jetbrains.kotlin.gradle package org.jetbrains.kotlin.gradle
import org.gradle.api.logging.LogLevel
import org.jdom.input.SAXBuilder import org.jdom.input.SAXBuilder
import org.jetbrains.kotlin.gradle.internals.* import org.jetbrains.kotlin.gradle.internals.*
import org.jetbrains.kotlin.gradle.plugin.JsMode import org.jetbrains.kotlin.gradle.plugin.JsCompilerType
import org.jetbrains.kotlin.gradle.plugin.ProjectLocalConfigurations import org.jetbrains.kotlin.gradle.plugin.ProjectLocalConfigurations
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmWithJavaTargetPreset import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmWithJavaTargetPreset
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin
@@ -68,48 +67,48 @@ class NewMultiplatformIT : BaseGradleIT() {
fun testLibAndApp() = doTestLibAndApp( fun testLibAndApp() = doTestLibAndApp(
"sample-lib", "sample-lib",
"sample-app", "sample-app",
JsMode.LEGACY JsCompilerType.LEGACY
) )
@Test @Test
fun testLibAndAppJsIr() = doTestLibAndApp( fun testLibAndAppJsIr() = doTestLibAndApp(
"sample-lib", "sample-lib",
"sample-app", "sample-app",
JsMode.IR JsCompilerType.KLIB
) )
@Test @Test
fun testLibAndAppJsMixed() = doTestLibAndApp( fun testLibAndAppJsMixed() = doTestLibAndApp(
"sample-lib", "sample-lib",
"sample-app", "sample-app",
JsMode.MIXED JsCompilerType.BOTH
) )
@Test @Test
fun testLibAndAppWithGradleKotlinDsl() = doTestLibAndApp( fun testLibAndAppWithGradleKotlinDsl() = doTestLibAndApp(
"sample-lib-gradle-kotlin-dsl", "sample-lib-gradle-kotlin-dsl",
"sample-app-gradle-kotlin-dsl", "sample-app-gradle-kotlin-dsl",
JsMode.LEGACY JsCompilerType.LEGACY
) )
@Test @Test
fun testLibAndAppWithGradleKotlinDslJsIr() = doTestLibAndApp( fun testLibAndAppWithGradleKotlinDslJsIr() = doTestLibAndApp(
"sample-lib-gradle-kotlin-dsl", "sample-lib-gradle-kotlin-dsl",
"sample-app-gradle-kotlin-dsl", "sample-app-gradle-kotlin-dsl",
JsMode.IR JsCompilerType.KLIB
) )
@Test @Test
fun testLibAndAppWithGradleKotlinDslJsMixed() = doTestLibAndApp( fun testLibAndAppWithGradleKotlinDslJsMixed() = doTestLibAndApp(
"sample-lib-gradle-kotlin-dsl", "sample-lib-gradle-kotlin-dsl",
"sample-app-gradle-kotlin-dsl", "sample-app-gradle-kotlin-dsl",
JsMode.MIXED JsCompilerType.BOTH
) )
private fun doTestLibAndApp( private fun doTestLibAndApp(
libProjectName: String, libProjectName: String,
appProjectName: String, appProjectName: String,
jsMode: JsMode jsCompilerType: JsCompilerType
) { ) {
val libProject = transformProjectWithPluginsDsl(libProjectName, directoryPrefix = "new-mpp-lib-and-app") val libProject = transformProjectWithPluginsDsl(libProjectName, directoryPrefix = "new-mpp-lib-and-app")
val appProject = transformProjectWithPluginsDsl(appProjectName, directoryPrefix = "new-mpp-lib-and-app") val appProject = transformProjectWithPluginsDsl(appProjectName, directoryPrefix = "new-mpp-lib-and-app")
@@ -121,14 +120,14 @@ class NewMultiplatformIT : BaseGradleIT() {
with(libProject) { with(libProject) {
build( build(
"publish", "publish",
options = defaultBuildOptions().copy(jsMode = jsMode) options = defaultBuildOptions().copy(jsCompilerType = jsCompilerType)
) { ) {
assertSuccessful() assertSuccessful()
assertTasksExecuted(*compileTasksNames.toTypedArray(), ":jvm6Jar", ":nodeJsJar", ":metadataJar") assertTasksExecuted(*compileTasksNames.toTypedArray(), ":jvm6Jar", ":nodeJsJar", ":metadataJar")
val groupDir = projectDir.resolve("repo/com/example") val groupDir = projectDir.resolve("repo/com/example")
val jvmJarName = "sample-lib-jvm6/1.0/sample-lib-jvm6-1.0.jar" val jvmJarName = "sample-lib-jvm6/1.0/sample-lib-jvm6-1.0.jar"
val jsExtension = if (jsMode == JsMode.LEGACY) "jar" else "klib" val jsExtension = if (jsCompilerType == JsCompilerType.LEGACY) "jar" else "klib"
val jsJarName = "sample-lib-nodejs/1.0/sample-lib-nodejs-1.0.$jsExtension" val jsJarName = "sample-lib-nodejs/1.0/sample-lib-nodejs-1.0.$jsExtension"
val metadataJarName = "sample-lib-metadata/1.0/sample-lib-metadata-1.0.jar" val metadataJarName = "sample-lib-metadata/1.0/sample-lib-metadata-1.0.jar"
val wasmKlibName = "sample-lib-wasm32/1.0/sample-lib-wasm32-1.0.klib" val wasmKlibName = "sample-lib-wasm32/1.0/sample-lib-wasm32-1.0.klib"
@@ -157,8 +156,8 @@ class NewMultiplatformIT : BaseGradleIT() {
Assert.assertTrue("com/example/lib/CommonKt.class" in jvmJarEntries) Assert.assertTrue("com/example/lib/CommonKt.class" in jvmJarEntries)
Assert.assertTrue("com/example/lib/MainKt.class" in jvmJarEntries) Assert.assertTrue("com/example/lib/MainKt.class" in jvmJarEntries)
when (jsMode) { when (jsCompilerType) {
JsMode.LEGACY -> { JsCompilerType.LEGACY -> {
val jsJar = ZipFile(groupDir.resolve(jsJarName)) val jsJar = ZipFile(groupDir.resolve(jsJarName))
val compiledJs = jsJar.getInputStream(jsJar.getEntry("sample-lib.js")).reader().readText() val compiledJs = jsJar.getInputStream(jsJar.getEntry("sample-lib.js")).reader().readText()
Assert.assertTrue("function id(" in compiledJs) Assert.assertTrue("function id(" in compiledJs)
@@ -166,7 +165,7 @@ class NewMultiplatformIT : BaseGradleIT() {
Assert.assertTrue("function expectedFun(" in compiledJs) Assert.assertTrue("function expectedFun(" in compiledJs)
Assert.assertTrue("function main(" in compiledJs) Assert.assertTrue("function main(" in compiledJs)
} }
JsMode.IR -> { JsCompilerType.KLIB -> {
groupDir.resolve(jsJarName).exists() groupDir.resolve(jsJarName).exists()
} }
} }
@@ -214,7 +213,7 @@ class NewMultiplatformIT : BaseGradleIT() {
Assert.assertTrue(resolve("com/example/app/AKt.kotlin_metadata").exists()) Assert.assertTrue(resolve("com/example/app/AKt.kotlin_metadata").exists())
} }
if (jsMode == JsMode.LEGACY) { if (jsCompilerType == JsCompilerType.LEGACY) {
projectDir.resolve(targetClassesDir("nodeJs")).resolve("sample-app.js").readText().run { projectDir.resolve(targetClassesDir("nodeJs")).resolve("sample-app.js").readText().run {
Assert.assertTrue(contains("console.info")) Assert.assertTrue(contains("console.info"))
Assert.assertTrue(contains("function nodeJsMain(")) Assert.assertTrue(contains("function nodeJsMain("))
@@ -243,22 +242,22 @@ class NewMultiplatformIT : BaseGradleIT() {
build( build(
"assemble", "assemble",
"resolveRuntimeDependencies", "resolveRuntimeDependencies",
options = defaultBuildOptions().copy(jsMode = jsMode) options = defaultBuildOptions().copy(jsCompilerType = jsCompilerType)
) { ) {
checkAppBuild() checkAppBuild()
assertTasksExecuted(":resolveRuntimeDependencies") // KT-26301 assertTasksExecuted(":resolveRuntimeDependencies") // KT-26301
} }
if (jsMode == JsMode.MIXED) { if (jsCompilerType == JsCompilerType.BOTH) {
listOf( listOf(
JsMode.LEGACY, JsCompilerType.LEGACY,
JsMode.IR JsCompilerType.KLIB
).forEach { ).forEach {
build( build(
"assemble", "assemble",
"resolveRuntimeDependencies", "resolveRuntimeDependencies",
"--rerun-tasks", "--rerun-tasks",
options = defaultBuildOptions().copy(jsMode = it) options = defaultBuildOptions().copy(jsCompilerType = it)
) { ) {
checkAppBuild() checkAppBuild()
assertTasksExecuted(":resolveRuntimeDependencies") // KT-26301 assertTasksExecuted(":resolveRuntimeDependencies") // KT-26301
@@ -279,13 +278,13 @@ class NewMultiplatformIT : BaseGradleIT() {
"clean", "clean",
"assemble", "assemble",
"--rerun-tasks", "--rerun-tasks",
options = defaultBuildOptions().copy(jsMode = jsMode) options = defaultBuildOptions().copy(jsCompilerType = jsCompilerType)
) { ) {
checkAppBuild() checkAppBuild()
} }
} }
if (jsMode != JsMode.LEGACY) return if (jsCompilerType != JsCompilerType.LEGACY) return
with(oldStyleAppProject) { with(oldStyleAppProject) {
setupWorkingDir() setupWorkingDir()
@@ -899,7 +898,7 @@ class NewMultiplatformIT : BaseGradleIT() {
projectDir.resolve("settings.gradle").modify { it.replace("enableFeaturePreview", "// enableFeaturePreview") } projectDir.resolve("settings.gradle").modify { it.replace("enableFeaturePreview", "// enableFeaturePreview") }
build( build(
"publish", "publish",
options = defaultBuildOptions().copy(jsMode = JsMode.LEGACY) options = defaultBuildOptions().copy(jsCompilerType = JsCompilerType.LEGACY)
) { assertSuccessful() } ) { assertSuccessful() }
projectDir.resolve("repo") projectDir.resolve("repo")
} }
@@ -2311,7 +2310,7 @@ class NewMultiplatformIT : BaseGradleIT() {
setupWorkingDir() setupWorkingDir()
gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl) gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl)
if (!jsIr) { if (!jsIr) {
gradleProperties().appendText(jsMode(JsMode.LEGACY)) gradleProperties().appendText(jsMode(JsCompilerType.LEGACY))
} }
val tasks = listOf("jvm", "js", nativeHostTargetName).map { ":compileIntegrationTestKotlin${it.capitalize()}" } val tasks = listOf("jvm", "js", nativeHostTargetName).map { ":compileIntegrationTestKotlin${it.capitalize()}" }
@@ -5,10 +5,9 @@
package org.jetbrains.kotlin.gradle package org.jetbrains.kotlin.gradle
import org.jetbrains.kotlin.gradle.plugin.JsMode import org.jetbrains.kotlin.gradle.plugin.JsCompilerType
import org.jetbrains.kotlin.gradle.util.* import org.jetbrains.kotlin.gradle.util.*
import org.junit.Test import org.junit.Test
import kotlin.test.assertTrue
class VariantAwareDependenciesIT : BaseGradleIT() { class VariantAwareDependenciesIT : BaseGradleIT() {
private val gradleVersion = GradleVersionRequired.None private val gradleVersion = GradleVersionRequired.None
@@ -41,7 +40,7 @@ class VariantAwareDependenciesIT : BaseGradleIT() {
assertContains(">> :${innerProject.projectName}:runtime --> sample-lib-nodejs-1.0.klib") assertContains(">> :${innerProject.projectName}:runtime --> sample-lib-nodejs-1.0.klib")
} }
gradleProperties().appendText(jsMode(JsMode.LEGACY)) gradleProperties().appendText(jsMode(JsCompilerType.LEGACY))
testResolveAllConfigurations( testResolveAllConfigurations(
subproject = innerProject.projectName, subproject = innerProject.projectName,
@@ -5,8 +5,7 @@
package org.jetbrains.kotlin.gradle package org.jetbrains.kotlin.gradle
import org.jetbrains.kotlin.gradle.plugin.JsMode import org.jetbrains.kotlin.gradle.plugin.JsCompilerType
import org.jetbrains.kotlin.gradle.util.jsMode
import org.junit.Test import org.junit.Test
class WorkersIT : BaseGradleIT() { class WorkersIT : BaseGradleIT() {
@@ -14,7 +13,7 @@ class WorkersIT : BaseGradleIT() {
fun testParallelTasks() { fun testParallelTasks() {
parallelTasksImpl( parallelTasksImpl(
isParallel = true, isParallel = true,
jsMode = JsMode.LEGACY jsCompilerType = JsCompilerType.LEGACY
) )
} }
@@ -22,7 +21,7 @@ class WorkersIT : BaseGradleIT() {
fun testParallelTasksJsIr() { fun testParallelTasksJsIr() {
parallelTasksImpl( parallelTasksImpl(
isParallel = true, isParallel = true,
jsMode = JsMode.IR jsCompilerType = JsCompilerType.KLIB
) )
} }
@@ -30,7 +29,7 @@ class WorkersIT : BaseGradleIT() {
fun testNoParallelTasks() { fun testNoParallelTasks() {
parallelTasksImpl( parallelTasksImpl(
isParallel = false, isParallel = false,
jsMode = JsMode.LEGACY jsCompilerType = JsCompilerType.LEGACY
) )
} }
@@ -38,19 +37,19 @@ class WorkersIT : BaseGradleIT() {
fun testNoParallelTasksJsIr() { fun testNoParallelTasksJsIr() {
parallelTasksImpl( parallelTasksImpl(
isParallel = false, isParallel = false,
jsMode = JsMode.IR jsCompilerType = JsCompilerType.KLIB
) )
} }
private fun parallelTasksImpl( private fun parallelTasksImpl(
isParallel: Boolean, isParallel: Boolean,
jsMode: JsMode jsCompilerType: JsCompilerType
) = ) =
with(Project("new-mpp-parallel")) { with(Project("new-mpp-parallel")) {
val options = defaultBuildOptions().copy( val options = defaultBuildOptions().copy(
parallelTasksInProject = isParallel, parallelTasksInProject = isParallel,
withDaemon = false, withDaemon = false,
jsMode = jsMode jsCompilerType = jsCompilerType
) )
val traceLoading = "-Dorg.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.trace.loading=true" val traceLoading = "-Dorg.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.trace.loading=true"
build("assemble", traceLoading, options = options) { build("assemble", traceLoading, options = options) {
@@ -65,7 +64,7 @@ class WorkersIT : BaseGradleIT() {
kotlinClassesDir(sourceSet = "metadata/main") + "common/A.kotlin_metadata", kotlinClassesDir(sourceSet = "metadata/main") + "common/A.kotlin_metadata",
kotlinClassesDir(sourceSet = "jvm/main") + "common/A.class", kotlinClassesDir(sourceSet = "jvm/main") + "common/A.class",
kotlinClassesDir(sourceSet = "js/main") + kotlinClassesDir(sourceSet = "js/main") +
if (jsMode == JsMode.IR) "default/manifest" else "new-mpp-parallel.js" if (jsCompilerType == JsCompilerType.KLIB) "default/manifest" else "new-mpp-parallel.js"
) )
expectedKotlinOutputFiles.forEach { assertFileExists(it) } expectedKotlinOutputFiles.forEach { assertFileExists(it) }
assertSubstringCount("Loaded GradleKotlinCompilerWork", 1) assertSubstringCount("Loaded GradleKotlinCompilerWork", 1)
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.gradle.util package org.jetbrains.kotlin.gradle.util
import org.jetbrains.kotlin.gradle.plugin.JsMode import org.jetbrains.kotlin.gradle.plugin.JsCompilerType
fun jsMode(mode: JsMode) = fun jsMode(compilerType: JsCompilerType) =
"\n${JsMode.jsModeProp}=$mode" "\n${JsCompilerType.jsCompilerProperty}=$compilerType"
@@ -1,3 +1,3 @@
kotlin.tests.individualTaskReports=true kotlin.tests.individualTaskReports=true
#because of dependency (kotlinx-html) which is not klib yet #because of dependency (kotlinx-html) which is not klib yet
kotlin.js.mode=legacy kotlin.js.compiler=legacy
@@ -1 +1 @@
kotlin.js.mode=legacy kotlin.js.compiler=legacy
@@ -1 +1 @@
kotlin.js.mode=legacy kotlin.js.compiler=legacy
@@ -1 +1 @@
kotlin.js.mode=legacy kotlin.js.compiler=legacy
@@ -166,10 +166,10 @@ open class KotlinJsPluginWrapper @Inject constructor(
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> { override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> {
val propertiesProvider = PropertiesProvider(project) val propertiesProvider = PropertiesProvider(project)
return when (propertiesProvider.jsMode) { return when (propertiesProvider.jsCompiler) {
JsMode.IR -> KotlinJsIrPlugin(kotlinPluginVersion) JsCompilerType.KLIB -> KotlinJsIrPlugin(kotlinPluginVersion)
JsMode.LEGACY -> KotlinJsPlugin(kotlinPluginVersion, false) JsCompilerType.LEGACY -> KotlinJsPlugin(kotlinPluginVersion, false)
JsMode.MIXED -> KotlinJsPlugin(kotlinPluginVersion, true) JsCompilerType.BOTH -> KotlinJsPlugin(kotlinPluginVersion, true)
} }
} }
@@ -178,9 +178,9 @@ open class KotlinJsPluginWrapper @Inject constructor(
override fun defineExtension(project: Project) { override fun defineExtension(project: Project) {
val propertiesProvider = PropertiesProvider(project) val propertiesProvider = PropertiesProvider(project)
projectExtensionClass = when (propertiesProvider.jsMode) { projectExtensionClass = when (propertiesProvider.jsCompiler) {
JsMode.IR -> KotlinJsIrProjectExtension::class JsCompilerType.KLIB -> KotlinJsIrProjectExtension::class
JsMode.LEGACY, JsMode.MIXED -> KotlinJsProjectExtension::class JsCompilerType.LEGACY, JsCompilerType.BOTH -> KotlinJsProjectExtension::class
} }
} }
@@ -16,16 +16,18 @@
package org.jetbrains.kotlin.gradle.plugin package org.jetbrains.kotlin.gradle.plugin
import org.gradle.api.Named
import org.gradle.api.Project import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.dsl.Coroutines import org.jetbrains.kotlin.gradle.dsl.Coroutines
import org.jetbrains.kotlin.gradle.dsl.NativeCacheKind import org.jetbrains.kotlin.gradle.dsl.NativeCacheKind
import org.jetbrains.kotlin.gradle.plugin.JsMode.Companion.jsModeProp import org.jetbrains.kotlin.gradle.plugin.JsCompilerType.Companion.jsCompilerProperty
import org.jetbrains.kotlin.gradle.targets.native.DisabledNativeTargetsReporter import org.jetbrains.kotlin.gradle.targets.native.DisabledNativeTargetsReporter
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.gradle.utils.SingleWarningPerBuild import org.jetbrains.kotlin.gradle.utils.SingleWarningPerBuild
import java.io.File import java.io.File
import java.io.Serializable
import java.util.* import java.util.*
internal fun PropertiesProvider.mapKotlinTaskProperties(task: AbstractKotlinCompile<*>) { internal fun PropertiesProvider.mapKotlinTaskProperties(task: AbstractKotlinCompile<*>) {
@@ -172,8 +174,8 @@ internal class PropertiesProvider private constructor(private val project: Proje
/** /**
* Use Kotlin/JS backend mode * Use Kotlin/JS backend mode
*/ */
val jsMode: JsMode val jsCompiler: JsCompilerType
get() = property(jsModeProp)?.let { JsMode.byCompilerArgument(it) } ?: JsMode.IR get() = property(jsCompilerProperty)?.let { JsCompilerType.byArgument(it) } ?: JsCompilerType.KLIB
private fun propertyWithDeprecatedVariant(propName: String, deprecatedPropName: String): String? { private fun propertyWithDeprecatedVariant(propName: String, deprecatedPropName: String): String? {
val deprecatedProperty = property(deprecatedPropName) val deprecatedProperty = property(deprecatedPropName)
@@ -209,15 +211,21 @@ internal class PropertiesProvider private constructor(private val project: Proje
} }
} }
enum class JsMode { enum class JsCompilerType : Named, Serializable {
LEGACY, LEGACY,
IR, KLIB,
MIXED; BOTH;
override fun getName(): String =
name.toLowerCase()
override fun toString(): String =
getName()
companion object { companion object {
const val jsModeProp = "kotlin.js.mode" const val jsCompilerProperty = "kotlin.js.compiler"
fun byCompilerArgument(argument: String): JsMode? = fun byArgument(argument: String): JsCompilerType? =
JsMode.values().firstOrNull { it.name.equals(argument, ignoreCase = true) } JsCompilerType.values().firstOrNull { it.name.equals(argument, ignoreCase = true) }
} }
} }
@@ -450,11 +450,11 @@ fun Configuration.usesPlatformOf(target: KotlinTarget): Configuration {
attributes.attribute(KotlinPlatformType.attribute, target.platformType) attributes.attribute(KotlinPlatformType.attribute, target.platformType)
if (target is KotlinJsTarget) { if (target is KotlinJsTarget) {
attributes.attribute(KotlinJsTarget.jsModeAttribute, LEGACY) attributes.attribute(KotlinJsTarget.jsCompilerAttribute, LEGACY)
} }
if (target is KotlinJsIrTarget) { if (target is KotlinJsIrTarget) {
attributes.attribute(KotlinJsTarget.jsModeAttribute, IR) attributes.attribute(KotlinJsTarget.jsCompilerAttribute, IR)
} }
// TODO: Provide an universal way to copy attributes from the target. // TODO: Provide an universal way to copy attributes from the target.
@@ -157,10 +157,10 @@ class KotlinMultiplatformPlugin(
with(project.multiplatformExtension.presets) { with(project.multiplatformExtension.presets) {
add(KotlinJvmTargetPreset(project, kotlinPluginVersion)) add(KotlinJvmTargetPreset(project, kotlinPluginVersion))
when (propertiesProvider.jsMode) { when (propertiesProvider.jsCompiler) {
JsMode.LEGACY -> add(KotlinJsTargetPreset(project, kotlinPluginVersion, null)) JsCompilerType.LEGACY -> add(KotlinJsTargetPreset(project, kotlinPluginVersion, null))
JsMode.IR -> add(KotlinJsIrTargetPreset(project, kotlinPluginVersion, false)) JsCompilerType.KLIB -> add(KotlinJsIrTargetPreset(project, kotlinPluginVersion, false))
JsMode.MIXED -> add( JsCompilerType.BOTH -> add(
KotlinJsTargetPreset( KotlinJsTargetPreset(
project, project,
kotlinPluginVersion, kotlinPluginVersion,
@@ -185,8 +185,8 @@ constructor(
} }
companion object { companion object {
val jsModeAttribute = Attribute.of( val jsCompilerAttribute = Attribute.of(
"org.jetbrains.kotlin.js.mode", "org.jetbrains.kotlin.js.compiler",
String::class.java String::class.java
) )
@@ -194,7 +194,7 @@ constructor(
const val LEGACY = "legacy" const val LEGACY = "legacy"
fun setupAttributesMatchingStrategy(attributesSchema: AttributesSchema) { fun setupAttributesMatchingStrategy(attributesSchema: AttributesSchema) {
attributesSchema.attribute(jsModeAttribute) attributesSchema.attribute(jsCompilerAttribute)
} }
} }
} }
@@ -6,10 +6,8 @@
package org.jetbrains.kotlin.gradle.targets.js.ir package org.jetbrains.kotlin.gradle.targets.js.ir
import org.gradle.api.Project import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.plugin.JsMode
import org.jetbrains.kotlin.gradle.plugin.KotlinOnlyTargetConfigurator import org.jetbrains.kotlin.gradle.plugin.KotlinOnlyTargetConfigurator
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCompilationFactory import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCompilationFactory
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTargetPreset import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTargetPreset