diff --git a/libraries/tools/kotlin-gradle-plugin-dsl-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/dsl/mppPresetFunctionsCodegen.kt b/libraries/tools/kotlin-gradle-plugin-dsl-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/dsl/mppPresetFunctionsCodegen.kt index 448c4364baf..7ca88bc3953 100644 --- a/libraries/tools/kotlin-gradle-plugin-dsl-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/dsl/mppPresetFunctionsCodegen.kt +++ b/libraries/tools/kotlin-gradle-plugin-dsl-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/dsl/mppPresetFunctionsCodegen.kt @@ -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") diff --git a/libraries/tools/kotlin-gradle-plugin-dsl-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/dsl/presetEntries.kt b/libraries/tools/kotlin-gradle-plugin-dsl-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/dsl/presetEntries.kt index 128fb1d558a..bb8d09adfb6 100644 --- a/libraries/tools/kotlin-gradle-plugin-dsl-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/dsl/presetEntries.kt +++ b/libraries/tools/kotlin-gradle-plugin-dsl-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/dsl/presetEntries.kt @@ -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, diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt index a32324669d8..a5539fdaed0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt @@ -25,6 +25,9 @@ open class KotlinMultiplatformExtension : override lateinit var targets: NamedDomainObjectCollection internal set + override lateinit var defaultJsCompilerType: JsCompilerType + internal set + @Suppress("unused") // DSL val testableTargets: NamedDomainObjectCollection> get() = targets.withType(KotlinTargetWithTests::class.java) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithPresetFunctions.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithPresetFunctions.kt index 742ab4bc855..1c2e80f64a2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithPresetFunctions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithPresetFunctions.kt @@ -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, diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt index f042086b874..93c08b87673 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt @@ -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