[Gradle] Copy user-defined attributes to android variants...

when they are grouped by flavor.

In such case a different implementation of SoftwareComponents is used
And originally only KotlinComponents were covered.
This commit is contained in:
Anton Lakotka
2022-11-29 14:40:54 +01:00
committed by teamcity
parent 8e85e556ce
commit a093527b8d
@@ -206,18 +206,28 @@ internal fun applyUserDefinedAttributes(target: AbstractKotlinTarget) {
project.whenEvaluated {
// To copy the attributes to the output configurations, find those output configurations and their producing compilations
// based on the target's components:
val outputConfigurationsWithCompilations =
target.kotlinComponents.filterIsInstance<KotlinVariant>().flatMap { kotlinVariant ->
val outputConfigurationsWithCompilations = target.kotlinComponents.filterIsInstance<KotlinVariant>().flatMap { kotlinVariant ->
kotlinVariant.usages.mapNotNull { usageContext ->
project.configurations.findByName(usageContext.dependencyConfigurationName)?.let { configuration ->
configuration to usageContext.compilation
}
}
} + listOfNotNull(
target.compilations.findByName(KotlinCompilation.MAIN_COMPILATION_NAME)?.let { mainCompilation ->
project.configurations.findByName(target.defaultConfigurationName)?.to(mainCompilation)
}
)
}.toMutableList()
val mainCompilation = target.compilations.findByName(KotlinCompilation.MAIN_COMPILATION_NAME)
val defaultTargetConfiguration = project.configurations.findByName(target.defaultConfigurationName)
if (mainCompilation != null && defaultTargetConfiguration != null) {
outputConfigurationsWithCompilations += defaultTargetConfiguration to mainCompilation
}
// Add usages of android library when its variants are grouped by flavor
outputConfigurationsWithCompilations += target.kotlinComponents
.filterIsInstance<JointAndroidKotlinTargetComponent>()
.flatMap { variant -> variant.usages }
.mapNotNull { usage ->
val configuration = project.configurations.findByName(usage.dependencyConfigurationName) ?: return@mapNotNull null
configuration to usage.compilation
}
outputConfigurationsWithCompilations.forEach { (configuration, compilation) ->
copyAttributes(compilation.attributes, configuration.attributes)