diff --git a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/preview/internal/configurePreview.kt b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/preview/internal/configurePreview.kt index f652865c73..83f06a9805 100644 --- a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/preview/internal/configurePreview.kt +++ b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/preview/internal/configurePreview.kt @@ -34,6 +34,7 @@ private fun registerConfigurePreviewTask( ) { previewTask -> runtimeFiles.configureUsageBy(previewTask) { (runtimeJars, _) -> previewClasspath = runtimeJars + skikoRuntime = tryGetSkikoRuntimeIfNeeded() } } } diff --git a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/preview/tasks/AbstractConfigureDesktopPreviewTask.kt b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/preview/tasks/AbstractConfigureDesktopPreviewTask.kt index 673e7b3a2d..02bab85264 100644 --- a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/preview/tasks/AbstractConfigureDesktopPreviewTask.kt +++ b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/preview/tasks/AbstractConfigureDesktopPreviewTask.kt @@ -18,6 +18,9 @@ abstract class AbstractConfigureDesktopPreviewTask : AbstractComposeDesktopTask( @get:InputFiles internal lateinit var previewClasspath: FileCollection + @get:InputFiles + internal lateinit var skikoRuntime: FileCollection + @get:Internal internal val javaHome: Property = objects.notNullProperty().apply { set(providers.systemProperty("java.home")) @@ -58,7 +61,7 @@ abstract class AbstractConfigureDesktopPreviewTask : AbstractComposeDesktopTask( val previewClasspathString = (previewClasspath.files.asSequence() + uiTooling.files.asSequence() + - tryGetSkikoRuntimeFilesIfNeeded().asSequence() + skikoRuntime.files.asSequence() ).pathString() val gradleLogger = logger @@ -78,7 +81,7 @@ abstract class AbstractConfigureDesktopPreviewTask : AbstractComposeDesktopTask( } } - private fun tryGetSkikoRuntimeFilesIfNeeded(): Collection { + internal fun tryGetSkikoRuntimeIfNeeded(): FileCollection { try { var hasSkikoJvm = false var hasSkikoJvmRuntime = false @@ -96,21 +99,20 @@ abstract class AbstractConfigureDesktopPreviewTask : AbstractComposeDesktopTask( } } } - if (hasSkikoJvmRuntime) return emptyList() + if (hasSkikoJvmRuntime) return project.files() if (hasSkikoJvm && !skikoVersion.isNullOrBlank()) { - val skikoRuntimeConfig = project.detachedDependency( + return project.detachedDependency( groupId = "org.jetbrains.skiko", artifactId = "skiko-awt-runtime-${currentTarget.id}", version = skikoVersion ).excludeTransitiveDependencies() - return skikoRuntimeConfig.files } } catch (e: Exception) { // OK } - return emptyList() + return project.files() } private fun Sequence.pathString(): String = diff --git a/gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/tests/integration/GradlePluginTest.kt b/gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/tests/integration/GradlePluginTest.kt index 3d81cf7047..e0d6c12e2f 100644 --- a/gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/tests/integration/GradlePluginTest.kt +++ b/gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/tests/integration/GradlePluginTest.kt @@ -288,9 +288,9 @@ class GradlePluginTest : GradlePluginTestBase() { connectionThread.join(5000) } - val expectedReceivedConfigCount = 2 + val expectedReceivedConfigCount = 3 val actualReceivedConfigCount = receivedConfigCount.get() - check(actualReceivedConfigCount == 2) { + check(actualReceivedConfigCount == expectedReceivedConfigCount) { "Expected to receive $expectedReceivedConfigCount preview configs, got $actualReceivedConfigCount" } } @@ -309,6 +309,11 @@ class GradlePluginTest : GradlePluginTestBase() { gradle(mppTask, portProperty, previewTargetProperty).checks { check.taskSuccessful(mppTask) } + + val commonTask = ":common:configureDesktopPreviewDesktop" + gradle(commonTask, portProperty, previewTargetProperty).checks { + check.taskSuccessful(commonTask) + } } } diff --git a/gradle-plugins/compose/src/test/test-projects/misc/jvmPreview/common/build.gradle b/gradle-plugins/compose/src/test/test-projects/misc/jvmPreview/common/build.gradle new file mode 100644 index 0000000000..af37d00512 --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/jvmPreview/common/build.gradle @@ -0,0 +1,17 @@ +plugins { + id 'org.jetbrains.kotlin.multiplatform' + id 'org.jetbrains.compose' +} + +kotlin { + jvm('desktop') {} + + sourceSets { + commonMain.dependencies { + api compose.runtime + api compose.foundation + api compose.material + api compose.uiTooling + } + } +} diff --git a/gradle-plugins/compose/src/test/test-projects/misc/jvmPreview/common/src/commonMain/kotlin/composable.kt b/gradle-plugins/compose/src/test/test-projects/misc/jvmPreview/common/src/commonMain/kotlin/composable.kt new file mode 100644 index 0000000000..7a7b773f5b --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/jvmPreview/common/src/commonMain/kotlin/composable.kt @@ -0,0 +1,21 @@ +/* + * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. + * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. + */ + +import androidx.compose.material.Text +import androidx.compose.material.Button +import androidx.compose.runtime.* + +@Composable +fun ExampleComposable() { + var text by remember { mutableStateOf("Hello, World!") } + + Button(onClick = { + text = "Hello, $platformName!" + }) { + Text(text) + } +} + +val platformName: String = "Desktop" diff --git a/gradle-plugins/compose/src/test/test-projects/misc/jvmPreview/common/src/commonMain/kotlin/preview.kt b/gradle-plugins/compose/src/test/test-projects/misc/jvmPreview/common/src/commonMain/kotlin/preview.kt new file mode 100644 index 0000000000..1b1dd433f3 --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/jvmPreview/common/src/commonMain/kotlin/preview.kt @@ -0,0 +1,8 @@ +import androidx.compose.runtime.Composable +import androidx.compose.desktop.ui.tooling.preview.Preview + +@Preview +@Composable +fun ExamplePreview() { + ExampleComposable() +} diff --git a/gradle-plugins/compose/src/test/test-projects/misc/jvmPreview/settings.gradle b/gradle-plugins/compose/src/test/test-projects/misc/jvmPreview/settings.gradle index b5adbc29ea..11b571ba96 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/jvmPreview/settings.gradle +++ b/gradle-plugins/compose/src/test/test-projects/misc/jvmPreview/settings.gradle @@ -25,4 +25,4 @@ dependencyResolutionManagement { } } rootProject.name = 'jvmPreview' -include(':jvm', ':mpp') \ No newline at end of file +include(':common', ':jvm', ':mpp')