[Gradle] Migrate AndroidDependencyResolver to the new variants selection API
#KT-55222 Fixed Co-authored-by: Vyacheslav Karpukhin <vyacheslav.karpukhin@jetbrains.com>
This commit is contained in:
committed by
Space Team
parent
6bbc577942
commit
cb53d0c388
+48
-17
@@ -32,6 +32,7 @@ import org.gradle.api.provider.Provider
|
||||
import org.gradle.api.services.BuildService
|
||||
import org.gradle.api.services.BuildServiceParameters
|
||||
import org.gradle.api.services.BuildServiceRegistry
|
||||
import org.gradle.internal.component.local.model.DefaultLocalComponentGraphResolveState
|
||||
import org.gradle.internal.component.model.AttributeConfigurationSelector
|
||||
import org.gradle.internal.component.model.ConfigurationMetadata
|
||||
import org.gradle.internal.component.model.IvyArtifactName
|
||||
@@ -39,6 +40,7 @@ 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
|
||||
import org.jetbrains.kotlin.gradle.utils.forAllAndroidVariants
|
||||
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
|
||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||
import java.io.File
|
||||
import java.nio.file.Path
|
||||
@@ -54,6 +56,9 @@ data class AndroidDependency(
|
||||
val collection: Set<File>? = null
|
||||
)
|
||||
|
||||
/**
|
||||
* Used in KMM
|
||||
*/
|
||||
@Suppress("unused")
|
||||
object AndroidDependencyResolver {
|
||||
private fun getAndroidSdkJar(project: Project, versions: List<String>): AndroidDependency? {
|
||||
@@ -288,24 +293,50 @@ object AndroidDependencyResolver {
|
||||
private fun selectConfigurations(
|
||||
projectDependencies: List<ProjectDependencyInternal>,
|
||||
attributes: AttributeContainer,
|
||||
attributesSchema: AttributesSchema
|
||||
): List<Configuration> {
|
||||
return projectDependencies.mapNotNull { projectDependency ->
|
||||
val rootComponentMetaData = (projectDependency.findProjectConfiguration() as? ConfigurationInternal)?.toRootComponentMetaData()
|
||||
?: return@mapNotNull null
|
||||
attributesSchema: AttributesSchema,
|
||||
): List<Configuration> = if (isGradleVersionAtLeast(7, 6)) {
|
||||
selectConfigurationsGradle76(projectDependencies, attributes, attributesSchema)
|
||||
} else {
|
||||
selectConfigurationsGradleLegacy(projectDependencies, attributes, attributesSchema)
|
||||
}
|
||||
|
||||
@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<IvyArtifactName>()
|
||||
)
|
||||
projectDependency.dependencyProject.configurations.findByName(matching.name)
|
||||
}
|
||||
private fun selectConfigurationsGradle76(
|
||||
projectDependencies: List<ProjectDependencyInternal>,
|
||||
attributes: AttributeContainer,
|
||||
attributesSchema: AttributesSchema,
|
||||
) = projectDependencies.flatMap { projectDependency ->
|
||||
val rootComponentMetaData = (projectDependency.findProjectConfiguration() as? ConfigurationInternal)?.toRootComponentMetaData()
|
||||
?: return@flatMap emptyList()
|
||||
|
||||
val matching = AttributeConfigurationSelector.selectVariantsUsingAttributeMatching(
|
||||
(attributes as? AttributeContainerInternal)?.asImmutable() ?: return@flatMap emptyList(),
|
||||
emptyList<Capability>(),
|
||||
DefaultLocalComponentGraphResolveState(rootComponentMetaData),
|
||||
(attributesSchema as? AttributesSchemaInternal) ?: return@flatMap emptyList(),
|
||||
emptyList()
|
||||
)
|
||||
matching.variants.mapNotNull { projectDependency.dependencyProject.configurations.findByName(it.name) }
|
||||
}
|
||||
|
||||
private fun selectConfigurationsGradleLegacy(
|
||||
projectDependencies: List<ProjectDependencyInternal>,
|
||||
attributes: AttributeContainer,
|
||||
attributesSchema: AttributesSchema,
|
||||
) = projectDependencies.mapNotNull { projectDependency ->
|
||||
val rootComponentMetaData = (projectDependency.findProjectConfiguration() as? ConfigurationInternal)?.toRootComponentMetaData()
|
||||
?: return@mapNotNull null
|
||||
|
||||
@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<IvyArtifactName>()
|
||||
)
|
||||
projectDependency.dependencyProject.configurations.findByName(matching.name)
|
||||
}
|
||||
|
||||
private inline fun <E, K> MutableSet<E>.addOrRetainAll(c: Collection<E>, crossinline selector: (E) -> K) {
|
||||
|
||||
Reference in New Issue
Block a user