[Gradle, JS] Js default compiler type for mpp

This commit is contained in:
Ilya Goncharov
2020-02-18 19:13:24 +03:00
parent 3d30598774
commit 37b3b3ec56
5 changed files with 22 additions and 11 deletions
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.generators.gradle.dsl
import groovy.lang.Closure
import org.gradle.util.ConfigureUtil
import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerTypeHolder
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetsContainerWithPresets
import java.io.File
@@ -14,7 +15,10 @@ fun main() {
generateKotlinTargetContainerWithPresetFunctionsInterface()
}
private val parentInterface = KotlinTargetsContainerWithPresets::class
private val parentInterfaces = listOf(
KotlinTargetsContainerWithPresets::class,
KotlinJsCompilerTypeHolder::class
)
private val presetsProperty = KotlinTargetsContainerWithPresets::presets.name
@@ -24,15 +28,16 @@ private fun generateKotlinTargetContainerWithPresetFunctionsInterface() {
it.generatePresetFunctions(presetsProperty, "configureOrCreate")
}
val parentInterfaceName =
typeName(parentInterface.java.canonicalName)
val parentInterfaceNames =
parentInterfaces.map { typeName(it.java.canonicalName) }
val className =
typeName("org.jetbrains.kotlin.gradle.dsl.KotlinTargetContainerWithPresetFunctions")
val imports = allPresetEntries
.flatMap { it.typeNames() }
.plus(parentInterfaceName)
.plus(parentInterfaceNames)
.plus(typeName(ConfigureUtil::class.java.canonicalName))
.plus(typeName(Closure::class.java.canonicalName))
.filter { it.packageName() != className.packageName() }
@@ -46,7 +51,7 @@ private fun generateKotlinTargetContainerWithPresetFunctionsInterface() {
"package ${className.packageName()}",
imports,
generatedCodeWarning,
"interface ${className.renderShort()} : ${parentInterfaceName.renderShort()} {",
"interface ${className.renderShort()} : ${parentInterfaceNames.joinToString { it.renderShort() }} {",
functions.joinToString("\n\n") { it.indented(4) },
"}"
).joinToString("\n\n")
@@ -69,7 +69,7 @@ internal class KotlinJsPresetEntry(
return """
fun $presetName(
name: String = "$presetName",
compiler: JsCompilerType = JsCompilerType.legacy,
compiler: JsCompilerType = defaultJsCompilerType,
configure: ${targetType.renderShort()}.() -> Unit = { }
): ${targetType.renderShort()} =
$configureOrCreateFunctionName(
@@ -86,7 +86,7 @@ internal class KotlinJsPresetEntry(
fun $presetName(
name: String = "$presetName",
configure: ${targetType.renderShort()}.() -> Unit = { }
) = $presetName(name = "$presetName", compiler = JsCompilerType.legacy, configure = configure)
) = $presetName(name = "$presetName", compiler = defaultJsCompilerType, configure = configure)
fun $presetName(
compiler: JsCompilerType,
@@ -25,6 +25,9 @@ open class KotlinMultiplatformExtension :
override lateinit var targets: NamedDomainObjectCollection<KotlinTarget>
internal set
override lateinit var defaultJsCompilerType: JsCompilerType
internal set
@Suppress("unused") // DSL
val testableTargets: NamedDomainObjectCollection<KotlinTargetWithTests<*, *>>
get() = targets.withType(KotlinTargetWithTests::class.java)
@@ -3,6 +3,7 @@ package org.jetbrains.kotlin.gradle.dsl
import groovy.lang.Closure
import org.gradle.util.ConfigureUtil
import org.jetbrains.kotlin.gradle.plugin.JsCompilerType
import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerTypeHolder
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetPreset
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetsContainerWithPresets
import org.jetbrains.kotlin.gradle.plugin.mpp.*
@@ -12,7 +13,7 @@ import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
// DO NOT EDIT MANUALLY! Generated by org.jetbrains.kotlin.generators.gradle.dsl.MppPresetFunctionsCodegenKt
interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithPresets {
interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithPresets, KotlinJsCompilerTypeHolder {
fun jvm(
name: String = "jvm",
@@ -31,11 +32,11 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP
fun js(
name: String = "js",
compiler: JsCompilerType = JsCompilerType.legacy,
compiler: JsCompilerType = defaultJsCompilerType,
configure: KotlinJsTargetDsl.() -> Unit = { }
): KotlinJsTargetDsl =
configureOrCreate(
lowerCamelCaseName(name, if (compiler == JsCompilerType.both) JsCompilerType.legacy.name else ""),
lowerCamelCaseName(name, if (compiler == JsCompilerType.both) JsCompilerType.legacy.name else null),
presets.getByName(
lowerCamelCaseName(
"js",
@@ -48,7 +49,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP
fun js(
name: String = "js",
configure: KotlinJsTargetDsl.() -> Unit = { }
) = js(name = "js", compiler = JsCompilerType.legacy, configure = configure)
) = js(name = "js", compiler = defaultJsCompilerType, configure = configure)
fun js(
compiler: JsCompilerType,
@@ -73,6 +73,8 @@ class KotlinMultiplatformPlugin(
presets = project.container(KotlinTargetPreset::class.java)
addExtension("presets", presets)
defaultJsCompilerType = PropertiesProvider(project).jsCompiler
isGradleMetadataAvailable =
featurePreviews.activeFeatures.find { it.name == "GRADLE_METADATA" }?.let { metadataFeature ->
isGradleMetadataExperimental = true