From 58a24e6ea6a903867c536a6d8b22310c8fb8188b Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Wed, 16 Feb 2022 10:32:31 +0300 Subject: [PATCH] Support org.jetbrains.kotlin.js plugin Resolves #1821 --- .../org/jetbrains/compose/ComposePlugin.kt | 11 ----- .../compose/internal/projectExtensions.kt | 4 ++ .../org/jetbrains/compose/web/WebExtension.kt | 44 ++++++++++++++----- 3 files changed, 37 insertions(+), 22 deletions(-) diff --git a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/ComposePlugin.kt b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/ComposePlugin.kt index 1d92a423d92..d63469eabbe 100644 --- a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/ComposePlugin.kt +++ b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/ComposePlugin.kt @@ -137,17 +137,6 @@ class ComposePlugin : Plugin { } } } - - checkAndWarnAboutUsingJsPlugin(project) - } - - private fun checkAndWarnAboutUsingJsPlugin(project: Project) { - val msg = "'$COMPOSE_PLUGIN_ID' plugin is not compatible with '$KOTLIN_JS_PLUGIN_ID' plugin. " + - "Use '$KOTLIN_MPP_PLUGIN_ID' instead" - - project.plugins.withId(KOTLIN_JS_PLUGIN_ID) { - project.logger.error(msg) - } } class RedirectAndroidVariants : ComponentMetadataRule { diff --git a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/internal/projectExtensions.kt b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/internal/projectExtensions.kt index 7df1d4f07f5..048078d6cf1 100644 --- a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/internal/projectExtensions.kt +++ b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/internal/projectExtensions.kt @@ -12,6 +12,7 @@ import org.gradle.api.tasks.SourceSetContainer import org.gradle.util.GradleVersion import org.jetbrains.compose.ComposeExtension import org.jetbrains.compose.web.WebExtension +import org.jetbrains.kotlin.gradle.dsl.KotlinJsProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension internal val Project.composeExt: ComposeExtension? @@ -26,6 +27,9 @@ internal val Project.mppExt: KotlinMultiplatformExtension internal val Project.mppExtOrNull: KotlinMultiplatformExtension? get() = extensions.findByType(KotlinMultiplatformExtension::class.java) +internal val Project.kotlinJsExtOrNull: KotlinJsProjectExtension? + get() = extensions.findByType(KotlinJsProjectExtension::class.java) + internal val Project.javaSourceSets: SourceSetContainer get() = if (GradleVersion.current() < GradleVersion.version("7.1")) { convention.getPlugin(JavaPluginConvention::class.java).sourceSets diff --git a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/web/WebExtension.kt b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/web/WebExtension.kt index 4f91e2b1126..571a2792ce1 100644 --- a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/web/WebExtension.kt +++ b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/web/WebExtension.kt @@ -7,8 +7,10 @@ package org.jetbrains.compose.web import org.gradle.api.Project import org.gradle.api.plugins.ExtensionAware +import org.jetbrains.compose.internal.kotlinJsExtOrNull import org.jetbrains.compose.internal.mppExt import org.jetbrains.compose.internal.mppExtOrNull +import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.plugin.KotlinTarget import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget @@ -46,16 +48,36 @@ abstract class WebExtension : ExtensionAware { } private fun defaultJsTargetsToConfigure(project: Project): Set { - val mppTargets = project.mppExtOrNull?.targets?.asMap?.values ?: emptySet() - val jsIRTargets = mppTargets.filterIsInstanceTo(LinkedHashSet()) - - return if (jsIRTargets.size > 1) { - project.logger.error( - "w: Default configuration for Compose Web is disabled: " + - "multiple Kotlin JS IR targets are defined. " + - "Specify Compose Web Kotlin targets by using `compose.web.targets()`" - ) - emptySet() - } else jsIRTargets + val mppExt = project.mppExtOrNull + + if (mppExt != null) { + val mppTargets = mppExt.targets.asMap.values + val jsIRTargets = mppTargets.filterIsInstanceTo(LinkedHashSet()) + + return if (jsIRTargets.size > 1) { + project.logger.error( + "w: Default configuration for Compose for Web is disabled: " + + "multiple Kotlin JS IR targets are defined. " + + "Specify Compose for Web Kotlin targets by using `compose.web.targets()`" + ) + emptySet() + } else jsIRTargets + } + + val jsExt = project.kotlinJsExtOrNull + if (jsExt != null) { + val target = jsExt.target + return if (target is KotlinJsIrTarget) { + setOf(target) + } else { + project.logger.error( + "w: Default configuration for Compose for Web is disabled: " + + "Compose for Web does not support legacy (non-IR) JS targets" + ) + emptySet() + } + } + + return emptySet() } } \ No newline at end of file