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 }.files
} }
ResourcesConfiguration -> compilation.internal.configurations.resourcesConfiguration ResourcesConfiguration -> compilation.internal.configurations.resourcesConfiguration?.let { resourcesConfiguration ->
?: return compilation.project.files().also { resourcesConfiguration.incoming.artifactView { it.isLenient = true }.files
compilation.project.reportDiagnostic( } ?: return compilation.project.files().also {
KotlinToolingDiagnostics.MissingResourcesConfigurationForTarget(compilation.target.name) 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.Attribute
import org.gradle.api.attributes.Usage import org.gradle.api.attributes.Usage
import org.gradle.api.internal.project.ProjectInternal import org.gradle.api.internal.project.ProjectInternal
import org.gradle.internal.component.NoMatchingConfigurationSelectionException
import org.gradle.kotlin.dsl.project import org.gradle.kotlin.dsl.project
import org.gradle.testfixtures.ProjectBuilder import org.gradle.testfixtures.ProjectBuilder
import org.jetbrains.kotlin.gradle.dependencyResolutionTests.mavenCentralCacheRedirector 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.plugin.usageByName
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl
import org.jetbrains.kotlin.gradle.util.* import org.jetbrains.kotlin.gradle.util.*
import org.jetbrains.kotlin.gradle.utils.buildOrNull
import org.jetbrains.kotlin.util.assertThrows import org.jetbrains.kotlin.util.assertThrows
import org.junit.Test import org.junit.Test
import java.io.File import java.io.File
@@ -67,17 +65,11 @@ class KotlinTargetVariantResourcesResolutionTests {
@Test @Test
fun `test direct dependency - between different native targets - with resources configuration`() { fun `test direct dependency - between different native targets - with resources configuration`() {
directDependencyOnResourcesProducer( testDirectDependencyOnResourcesProducer(
producerTarget = { linuxX64() }, producerTarget = { linuxX64() },
consumerTarget = { linuxArm64() }, consumerTarget = { linuxArm64() },
strategy = KotlinTargetResourcesResolutionStrategy.ResourcesConfiguration, resolutionStrategy = KotlinTargetResourcesResolutionStrategy.ResourcesConfiguration,
assert = { consumer, _ -> expectedResult = { _, _ -> emptySet() },
assertThrows<ResolveException> {
KotlinTargetResourcesResolutionStrategy.ResourcesConfiguration.resourceArchives(
consumer.multiplatformExtension.linuxArm64().compilations.getByName("main")
).files
}
},
) )
} }
@@ -390,12 +382,11 @@ class KotlinTargetVariantResourcesResolutionTests {
listOf(rootProject, producer, consumer).forEach { it.evaluate() } listOf(rootProject, producer, consumer).forEach { it.evaluate() }
producer.publishFakeResources(producer.multiplatformExtension.linuxArm64()) producer.publishFakeResources(producer.multiplatformExtension.linuxArm64())
assert( assertEquals(
assertThrows<ResolveException> { hashSetOf(producer.buildFile("kotlin-multiplatform-resources/zip-for-publication/linuxArm64/producer.kotlin_resources.zip")),
resolutionStrategy.resourceArchives( resolutionStrategy.resourceArchives(
consumer.multiplatformExtension.linuxArm64().compilations.getByName("main") consumer.multiplatformExtension.linuxArm64().compilations.getByName("main")
).files ).files
}.cause?.cause is NoMatchingConfigurationSelectionException
) )
} }