Oleksandr Karpovich 2 weeks ago committed by GitHub
parent
commit
bf1f5f6fdf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 17
      gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/ComposePlugin.kt
  2. 6
      gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/experimental/internal/configureExperimental.kt
  3. 32
      gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/experimental/web/internal/configureExperimentalWebApplication.kt
  4. 16
      gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/tests/integration/GradlePluginTest.kt
  5. 4
      gradle-plugins/compose/src/test/test-projects/misc/skikoWasm/build.gradle
  6. 2
      gradle-plugins/compose/src/test/test-projects/misc/skikoWasm/gradle.properties

17
gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/ComposePlugin.kt

@ -82,6 +82,23 @@ abstract class ComposePlugin : Plugin<Project> {
disableSignatureClashCheck(project)
}
// TODO: this is needed for now to run the gradle plugin tests when using compose 1.6.0
// which depends on coroutines 1.7.3
project.configurations.all {
val isWeb = it.name.startsWith("wasmJs") || it.name.startsWith("js")
if (isWeb) {
it.resolutionStrategy.eachDependency {
if (it.requested.group.startsWith("org.jetbrains.kotlinx") &&
it.requested.name.startsWith("kotlinx-coroutines-")) {
if (it.requested.version?.startsWith("1.7") == true) {
it.useVersion("1.8.0-RC2")
}
}
}
}
}
}
private fun disableSignatureClashCheck(project: Project) {

6
gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/experimental/internal/configureExperimental.kt

@ -9,16 +9,12 @@ import org.gradle.api.Project
import org.jetbrains.compose.ComposeExtension
import org.jetbrains.compose.experimental.dsl.ExperimentalExtension
import org.jetbrains.compose.experimental.web.internal.configureExperimentalWebApplication
import org.jetbrains.compose.web.WebExtension
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
internal fun Project.configureExperimental(
composeExt: ComposeExtension,
experimentalExt: ExperimentalExtension
) {
if (experimentalExt.web._isApplicationInitialized) {
val webExt = composeExt.extensions.getByType(WebExtension::class.java)
webExt.targetsToConfigure(project)
.configureExperimentalWebApplication(project, experimentalExt.web.application)
configureExperimentalWebApplication(project, experimentalExt.web.application)
}
}

32
gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/experimental/web/internal/configureExperimentalWebApplication.kt

@ -15,10 +15,9 @@ import org.jetbrains.compose.experimental.dsl.ExperimentalWebApplication
import org.jetbrains.compose.experimental.web.tasks.ExperimentalUnpackSkikoWasmRuntimeTask
import org.jetbrains.compose.internal.utils.*
import org.jetbrains.compose.internal.utils.registerTask
import org.jetbrains.compose.internal.utils.uppercaseFirstChar
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
import org.jetbrains.kotlin.gradle.tasks.IncrementalSyncTask
internal fun Collection<KotlinJsIrTarget>.configureExperimentalWebApplication(
internal fun configureExperimentalWebApplication(
project: Project,
app: ExperimentalWebApplication
) {
@ -29,24 +28,17 @@ internal fun Collection<KotlinJsIrTarget>.configureExperimentalWebApplication(
skikoJsWasmRuntimeConfiguration.defaultDependencies {
it.addLater(skikoJsWasmRuntimeDependency)
}
forEach {
val mainCompilation = it.compilations.getByName("main")
val testCompilation = it.compilations.getByName("test")
val unpackedRuntimeDir = project.layout.buildDirectory.dir("compose/skiko-wasm/${it.targetName}")
val taskName = "unpackSkikoWasmRuntime${it.targetName.uppercaseFirstChar()}"
mainCompilation.defaultSourceSet.resources.srcDir(unpackedRuntimeDir)
testCompilation.defaultSourceSet.resources.srcDir(unpackedRuntimeDir)
val unpackedRuntimeDir = project.layout.buildDirectory.dir("compose/skiko-wasm/")
val taskName = "unpackSkikoWasmRuntime"
val unpackRuntime = project.registerTask<ExperimentalUnpackSkikoWasmRuntimeTask>(taskName) {
skikoRuntimeFiles = skikoJsWasmRuntimeConfiguration
outputDir.set(unpackedRuntimeDir)
}
project.tasks.named(mainCompilation.processResourcesTaskName).configure { processResourcesTask ->
processResourcesTask.dependsOn(unpackRuntime)
}
project.tasks.named(testCompilation.processResourcesTaskName).configure { processResourcesTask ->
processResourcesTask.dependsOn(unpackRuntime)
}
val unpackRuntime = project.registerTask<ExperimentalUnpackSkikoWasmRuntimeTask>(taskName) {
skikoRuntimeFiles = skikoJsWasmRuntimeConfiguration
outputDir.set(unpackedRuntimeDir)
}
// According to https://youtrack.jetbrains.com/issue/COMPOSE-1114
project.tasks.withType(IncrementalSyncTask::class.java) {
it.dependsOn(unpackRuntime)
it.from.from(unpackedRuntimeDir)
}
}

16
gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/tests/integration/GradlePluginTest.kt

@ -24,8 +24,6 @@ import java.util.concurrent.atomic.AtomicBoolean
import java.util.concurrent.atomic.AtomicInteger
import kotlin.concurrent.thread
import org.junit.jupiter.api.Test
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.MethodSource
import java.io.File
class GradlePluginTest : GradlePluginTestBase() {
@ -125,20 +123,20 @@ class GradlePluginTest : GradlePluginTestBase() {
testEnvironment = defaultTestEnvironment.copy(useGradleConfigurationCache = false)
)
) {
fun jsCanvasEnabled(value: Boolean) {
modifyGradleProperties { put("org.jetbrains.compose.experimental.jscanvas.enabled", value.toString()) }
fun wasmCanvasEnabled(value: Boolean) {
modifyGradleProperties { put("org.jetbrains.compose.experimental.wasm.enabled", value.toString()) }
}
jsCanvasEnabled(false)
wasmCanvasEnabled(false)
gradleFailure(":build").checks {
check.logContains("ERROR: Compose targets '[jscanvas]' are experimental and may have bugs!")
check.logContains("ERROR: Compose targets '[wasm]' are experimental and may have bugs!")
}
jsCanvasEnabled(true)
wasmCanvasEnabled(true)
gradle(":build").checks {
check.taskSuccessful(":unpackSkikoWasmRuntimeJs")
check.taskSuccessful(":compileKotlinJs")
check.taskSuccessful(":unpackSkikoWasmRuntime")
check.taskSuccessful(":compileKotlinWasmJs")
}
}

4
gradle-plugins/compose/src/test/test-projects/misc/skikoWasm/build.gradle

@ -6,7 +6,7 @@ plugins {
}
kotlin {
js(IR) {
wasmJs {
browser()
binaries.executable()
}
@ -29,6 +29,6 @@ compose.experimental {
// test for https://github.com/JetBrains/compose-multiplatform/issues/3169
afterEvaluate {
afterEvaluate {
dependencies.add(kotlin.targets.js.compilations.main.compileDependencyConfigurationName, "org.jetbrains.kotlin:kotlin-stdlib")
dependencies.add(kotlin.targets.wasmJs.compilations.main.compileDependencyConfigurationName, "org.jetbrains.kotlin:kotlin-stdlib")
}
}

2
gradle-plugins/compose/src/test/test-projects/misc/skikoWasm/gradle.properties

@ -1 +1 @@
org.jetbrains.compose.experimental.jscanvas.enabled=true
org.jetbrains.compose.experimental.wasm.enabled=true

Loading…
Cancel
Save