Skip to content

Commit 58d3875

Browse files
ShikaSDkotlin-safe-merge[bot]
authored andcommitted
Fix mergeReleaseComposeMapping task failure when build cache is enabled
`@OutputFiles` assumes that the provided file is not a directory which is not the case for the `outputDir` property. Changing it to `@OutputDirectory` fixes the issue. The task was also failing when the files from previous runs were already present in the file system, this change fixes that by overwriting old files on copy. Test: ComposeIT
1 parent 56e0a79 commit 58d3875

2 files changed

Lines changed: 12 additions & 4 deletions

File tree

  • libraries/tools
    • kotlin-compose-compiler/src/common/kotlin/org/jetbrains/kotlin/compose/compiler/gradle/internal
    • kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle

libraries/tools/kotlin-compose-compiler/src/common/kotlin/org/jetbrains/kotlin/compose/compiler/gradle/internal/ComposeAgpMappingFile.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import org.gradle.api.model.ObjectFactory
1919
import org.gradle.api.provider.ListProperty
2020
import org.gradle.api.provider.Property
2121
import org.gradle.api.provider.Provider
22+
import org.gradle.api.provider.ProviderFactory
2223
import org.gradle.api.tasks.*
2324
import org.gradle.kotlin.dsl.findByType
2425
import org.gradle.kotlin.dsl.register
@@ -220,7 +221,10 @@ internal abstract class ReportMappingErrorsTask : DefaultTask() {
220221

221222

222223
@CacheableTask
223-
internal abstract class MergeMappingFileTask @Inject constructor(objects: ObjectFactory) : DefaultTask() {
224+
internal abstract class MergeMappingFileTask @Inject constructor(
225+
objects: ObjectFactory,
226+
providers: ProviderFactory
227+
) : DefaultTask() {
224228

225229
@get:InputFile
226230
@get:PathSensitive(PathSensitivity.RELATIVE)
@@ -239,8 +243,8 @@ internal abstract class MergeMappingFileTask @Inject constructor(objects: Object
239243
@get:OutputFile
240244
abstract val output: RegularFileProperty
241245

242-
@get:OutputFiles
243-
val outputDir: Provider<File> = output.asFile.map { it.parentFile }
246+
@get:OutputDirectory
247+
val outputDir: Provider<File> = providers.provider { output.get().asFile.parentFile }
244248

245249
@TaskAction
246250
fun taskAction() {
@@ -253,6 +257,8 @@ internal abstract class MergeMappingFileTask @Inject constructor(objects: Object
253257

254258
val outputFile = output.get().asFile
255259
val outputDir = outputDir.get()
260+
261+
outputDir.deleteRecursively()
256262
outputDir.mkdirs()
257263

258264
outputFile.bufferedWriter().use { writer ->

libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ComposeIT.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import org.gradle.kotlin.dsl.getByType
1212
import org.gradle.util.GradleVersion
1313
import org.jetbrains.kotlin.compose.compiler.gradle.ComposeCompilerGradlePluginExtension
1414
import org.jetbrains.kotlin.gradle.testbase.*
15+
import org.jetbrains.kotlin.gradle.testbase.BuildOptions.ConfigurationCacheValue.ENABLED
1516
import org.jetbrains.kotlin.gradle.uklibs.applyMultiplatform
1617
import org.jetbrains.kotlin.test.TestMetadata
1718
import org.junit.jupiter.api.DisplayName
@@ -642,6 +643,7 @@ class ComposeIT : KGPBaseTest() {
642643
@DisplayName("Minified app contains Compose mapping file")
643644
@AndroidGradlePluginTests
644645
@GradleAndroidTest
646+
@GradleTestVersions(maxVersion = TestVersions.Gradle.G_9_0)
645647
@DisabledOnOs(
646648
OS.WINDOWS, disabledReason = "AGP contains a bug that prevents test output files from being cleaned up on Windows. " +
647649
"See: https://issuetracker.google.com/issues/445967244"
@@ -656,7 +658,7 @@ class ComposeIT : KGPBaseTest() {
656658
projectName = "AndroidSimpleComposeApp",
657659
gradleVersion = gradleVersion,
658660
buildJdk = providedJdk.location,
659-
buildOptions = defaultBuildOptions.copy(androidVersion = agpVersion)
661+
buildOptions = defaultBuildOptions.copy(androidVersion = agpVersion, buildCacheEnabled = true, configurationCache = ENABLED)
660662
) {
661663
buildScriptInjection {
662664
val appExtension = project.extensions.getByType<ApplicationAndroidComponentsExtension>()

0 commit comments

Comments
 (0)