[Gradle] Workaround KT-55222 via reflection to make the project compilable

This commit is contained in:
Alexander Likhachev
2022-12-01 19:30:07 +01:00
committed by Space Team
parent 9bbdee7817
commit b7ebe77399
@@ -33,6 +33,8 @@ import org.gradle.api.services.BuildService
import org.gradle.api.services.BuildServiceParameters
import org.gradle.api.services.BuildServiceRegistry
import org.gradle.internal.component.model.AttributeConfigurationSelector
import org.gradle.internal.component.model.ConfigurationMetadata
import org.gradle.internal.component.model.IvyArtifactName
import org.jetbrains.kotlin.gradle.plugin.mpp.internal
import org.jetbrains.kotlin.gradle.plugin.sources.android.findKotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.sources.internal
@@ -40,6 +42,8 @@ import org.jetbrains.kotlin.gradle.utils.forAllAndroidVariants
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import java.io.File
import java.nio.file.Path
import kotlin.reflect.KFunction
import kotlin.reflect.full.staticFunctions
data class AndroidDependency(
val name: String? = null,
@@ -290,12 +294,15 @@ object AndroidDependencyResolver {
val rootComponentMetaData = (projectDependency.findProjectConfiguration() as? ConfigurationInternal)?.toRootComponentMetaData()
?: return@mapNotNull null
val matching = AttributeConfigurationSelector.selectConfigurationUsingAttributeMatching(
@Suppress("UNCHECKED_CAST") val selectConfiguration =
AttributeConfigurationSelector::class.staticFunctions.find { it.name == "selectConfigurationUsingAttributeMatching" } as? KFunction<ConfigurationMetadata>
?: error("Static method AttributeConfigurationSelector.selectConfigurationUsingAttributeMatching does not exist")
val matching = selectConfiguration.call(
(attributes as? AttributeContainerInternal)?.asImmutable() ?: return@mapNotNull null,
emptyList<Capability>(),
rootComponentMetaData,
(attributesSchema as? AttributesSchemaInternal) ?: return@mapNotNull null,
emptyList()
emptyList<IvyArtifactName>()
)
projectDependency.dependencyProject.configurations.findByName(matching.name)
}