Make resources configuration lenient

This prevents resolution failures if resources configuration ends up
selecting java-api variants

^KT-66393
This commit is contained in:
Timofey Solonin
2024-03-07 16:10:39 +01:00
committed by Space Team
parent 947d4c57e7
commit 1a4eaf796d
2 changed files with 15 additions and 23 deletions
@@ -41,12 +41,13 @@ enum class KotlinTargetResourcesResolutionStrategy {
}.files
}
ResourcesConfiguration -> compilation.internal.configurations.resourcesConfiguration
?: return compilation.project.files().also {
compilation.project.reportDiagnostic(
KotlinToolingDiagnostics.MissingResourcesConfigurationForTarget(compilation.target.name)
)
}
ResourcesConfiguration -> compilation.internal.configurations.resourcesConfiguration?.let { resourcesConfiguration ->
resourcesConfiguration.incoming.artifactView { it.isLenient = true }.files
} ?: return compilation.project.files().also {
compilation.project.reportDiagnostic(
KotlinToolingDiagnostics.MissingResourcesConfigurationForTarget(compilation.target.name)
)
}
}
}
@@ -14,7 +14,6 @@ import org.gradle.api.artifacts.ResolveException
import org.gradle.api.attributes.Attribute
import org.gradle.api.attributes.Usage
import org.gradle.api.internal.project.ProjectInternal
import org.gradle.internal.component.NoMatchingConfigurationSelectionException
import org.gradle.kotlin.dsl.project
import org.gradle.testfixtures.ProjectBuilder
import org.jetbrains.kotlin.gradle.dependencyResolutionTests.mavenCentralCacheRedirector
@@ -30,7 +29,6 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.resources.resourcesPublicationExte
import org.jetbrains.kotlin.gradle.plugin.usageByName
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl
import org.jetbrains.kotlin.gradle.util.*
import org.jetbrains.kotlin.gradle.utils.buildOrNull
import org.jetbrains.kotlin.util.assertThrows
import org.junit.Test
import java.io.File
@@ -67,17 +65,11 @@ class KotlinTargetVariantResourcesResolutionTests {
@Test
fun `test direct dependency - between different native targets - with resources configuration`() {
directDependencyOnResourcesProducer(
testDirectDependencyOnResourcesProducer(
producerTarget = { linuxX64() },
consumerTarget = { linuxArm64() },
strategy = KotlinTargetResourcesResolutionStrategy.ResourcesConfiguration,
assert = { consumer, _ ->
assertThrows<ResolveException> {
KotlinTargetResourcesResolutionStrategy.ResourcesConfiguration.resourceArchives(
consumer.multiplatformExtension.linuxArm64().compilations.getByName("main")
).files
}
},
resolutionStrategy = KotlinTargetResourcesResolutionStrategy.ResourcesConfiguration,
expectedResult = { _, _ -> emptySet() },
)
}
@@ -390,12 +382,11 @@ class KotlinTargetVariantResourcesResolutionTests {
listOf(rootProject, producer, consumer).forEach { it.evaluate() }
producer.publishFakeResources(producer.multiplatformExtension.linuxArm64())
assert(
assertThrows<ResolveException> {
resolutionStrategy.resourceArchives(
consumer.multiplatformExtension.linuxArm64().compilations.getByName("main")
).files
}.cause?.cause is NoMatchingConfigurationSelectionException
assertEquals(
hashSetOf(producer.buildFile("kotlin-multiplatform-resources/zip-for-publication/linuxArm64/producer.kotlin_resources.zip")),
resolutionStrategy.resourceArchives(
consumer.multiplatformExtension.linuxArm64().compilations.getByName("main")
).files
)
}