diff --git a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/resources/GenerateResClassTask.kt b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/resources/GenerateResClassTask.kt index 1c2d7d581c..130e2a9d71 100644 --- a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/resources/GenerateResClassTask.kt +++ b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/resources/GenerateResClassTask.kt @@ -16,21 +16,17 @@ abstract class GenerateResClassTask : DefaultTask() { @get:Input abstract val packageName: Property - @get:InputDirectory + @get:InputFiles @get:PathSensitive(PathSensitivity.RELATIVE) - abstract val resDir: DirectoryProperty + abstract val resDir: Property @get:OutputDirectory abstract val codeDir: DirectoryProperty - init { - this.onlyIf { resDir.asFile.get().exists() } - } - @TaskAction fun generate() { try { - val rootResDir = resDir.get().asFile + val rootResDir = resDir.get() logger.info("Generate resources for $rootResDir") //get first level dirs diff --git a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/resources/ResourcesGenerator.kt b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/resources/ResourcesGenerator.kt index abeb73ad94..27652ebe17 100644 --- a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/resources/ResourcesGenerator.kt +++ b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/resources/ResourcesGenerator.kt @@ -44,8 +44,6 @@ private fun Project.configureResourceGenerator(commonComposeResourcesDir: File, fun buildDir(path: String) = layout.dir(layout.buildDirectory.map { File(it.asFile, path) }) - val resDir = layout.dir(commonComposeResources) - //lazy check a dependency on the Resources library val shouldGenerateResourceAccessors: Provider = provider { if (ComposeProperties.alwaysGenerateResourceAccessors(providers).get()) { @@ -65,7 +63,7 @@ private fun Project.configureResourceGenerator(commonComposeResourcesDir: File, GenerateResClassTask::class.java ) { it.packageName.set(packageName) - it.resDir.set(resDir) + it.resDir.set(commonComposeResources) it.codeDir.set(buildDir("$RES_GEN_DIR/kotlin")) it.onlyIf { shouldGenerateResourceAccessors.get() } } diff --git a/gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/tests/integration/ResourcesTest.kt b/gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/tests/integration/ResourcesTest.kt index da3cbc3bd2..a3f72fee25 100644 --- a/gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/tests/integration/ResourcesTest.kt +++ b/gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/tests/integration/ResourcesTest.kt @@ -116,4 +116,14 @@ class ResourcesTest : GradlePluginTestBase() { check.taskSuccessful(":copyFontsToAndroidAssets") } } + + @Test + fun testEmptyResClass(): Unit = with(testProject("misc/emptyResources")) { + gradle("generateComposeResClass").checks { + assertEqualTextFiles( + file("build/generated/compose/resourceGenerator/kotlin/app/group/empty_res/generated/resources/Res.kt"), + file("expected/Res.kt") + ) + } + } } \ No newline at end of file diff --git a/gradle-plugins/compose/src/test/test-projects/misc/emptyResources/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/emptyResources/build.gradle.kts new file mode 100644 index 0000000000..699c9aa0f2 --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/emptyResources/build.gradle.kts @@ -0,0 +1,20 @@ +plugins { + kotlin("multiplatform") + id("org.jetbrains.compose") +} + +group = "app.group" + +kotlin { + jvm("desktop") + + sourceSets { + commonMain { + dependencies { + implementation(compose.runtime) + implementation(compose.material) + implementation(compose.components.resources) + } + } + } +} diff --git a/gradle-plugins/compose/src/test/test-projects/misc/emptyResources/expected/Res.kt b/gradle-plugins/compose/src/test/test-projects/misc/emptyResources/expected/Res.kt new file mode 100644 index 0000000000..8a954170b1 --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/emptyResources/expected/Res.kt @@ -0,0 +1,21 @@ +package app.group.empty_res.generated.resources + +import kotlin.ByteArray +import kotlin.OptIn +import kotlin.String +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.readResourceBytes + +@OptIn(org.jetbrains.compose.resources.InternalResourceApi::class) +@ExperimentalResourceApi +internal object Res { + /** + * Reads the content of the resource file at the specified path and returns it as a byte array. + * + * Example: `val bytes = Res.readBytes("files/key.bin")` + * + * @param path The path of the file to read in the compose resource's directory. + * @return The content of the file as a byte array. + */ + public suspend fun readBytes(path: String): ByteArray = readResourceBytes(path) +} \ No newline at end of file diff --git a/gradle-plugins/compose/src/test/test-projects/misc/emptyResources/gradle.properties b/gradle-plugins/compose/src/test/test-projects/misc/emptyResources/gradle.properties new file mode 100644 index 0000000000..c13202c0d5 --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/emptyResources/gradle.properties @@ -0,0 +1 @@ +org.gradle.jvmargs=-Xmx8096M \ No newline at end of file diff --git a/gradle-plugins/compose/src/test/test-projects/misc/emptyResources/settings.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/emptyResources/settings.gradle.kts new file mode 100644 index 0000000000..38898d0d94 --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/emptyResources/settings.gradle.kts @@ -0,0 +1,22 @@ +rootProject.name = "empty_res" +pluginManagement { + repositories { + mavenLocal() + gradlePluginPortal() + google() + maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") + } + plugins { + id("org.jetbrains.kotlin.multiplatform").version("KOTLIN_VERSION_PLACEHOLDER") + id("org.jetbrains.compose").version("COMPOSE_GRADLE_PLUGIN_VERSION_PLACEHOLDER") + } +} +dependencyResolutionManagement { + repositories { + mavenLocal() + maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") + mavenCentral() + gradlePluginPortal() + google() + } +} \ No newline at end of file diff --git a/gradle-plugins/compose/src/test/test-projects/misc/emptyResources/src/commonMain/kotlin/App.kt b/gradle-plugins/compose/src/test/test-projects/misc/emptyResources/src/commonMain/kotlin/App.kt new file mode 100644 index 0000000000..e831ab588a --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/emptyResources/src/commonMain/kotlin/App.kt @@ -0,0 +1,9 @@ +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import app.group.empty_res.generated.resources.Res + +@Composable +fun App() { + val res = Res + Text("text") +}