diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidDependencyResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidDependencyResolver.kt index 641d5b59420..cec099a278c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidDependencyResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidDependencyResolver.kt @@ -33,6 +33,9 @@ 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.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.lowerCamelCaseName import java.io.File @@ -126,7 +129,7 @@ object AndroidDependencyResolver { return versions[0].toInt() >= 4 || versions[0].toInt() >= 3 && versions[1].toInt() >= 6 } - private data class SourceSetConfigs(val implConfig: Configuration, val compileConfigs: MutableList = ArrayList()) + private data class SourceSetConfigs(val implConfigs: List, val compileConfigs: MutableList = ArrayList()) fun getAndroidSourceSetDependencies(project: Project): Map?> { val androidPluginVersions = getAndroidPluginVersions() ?: return emptyMap() @@ -138,11 +141,14 @@ object AndroidDependencyResolver { project.forAllAndroidVariants { variant -> val compileConfig = variant.compileConfiguration - variant.sourceSets.filterIsInstance(AndroidSourceSet::class.java).map { - val implConfig = project.configurations.getByName(it.implementationConfigurationName) - allImplConfigs.add(implConfig) + variant.sourceSets.filterIsInstance(AndroidSourceSet::class.java).map { androidSourceSet -> + val implConfigs = listOf(project.configurations.getByName(androidSourceSet.implementationConfigurationName)) + + project.findKotlinSourceSet(androidSourceSet)?.internal?.compilations.orEmpty().map { compilation -> + compilation.internal.configurations.implementationConfiguration + } + allImplConfigs.addAll(implConfigs) val sourceSetConfigs = - sourceSet2Impl.computeIfAbsent(lowerCamelCaseName("android", it.name)) { SourceSetConfigs(implConfig) } + sourceSet2Impl.computeIfAbsent(lowerCamelCaseName("android", androidSourceSet.name)) { SourceSetConfigs(implConfigs) } // The same sourceset can be included into multiple variants (e.g. androidMain) sourceSetConfigs.compileConfigs.add(compileConfig) } @@ -179,7 +185,6 @@ object AndroidDependencyResolver { }.toMap() } - @Suppress("UnstableApiUsage") private fun collectDependencies( dependencies: List, compileClasspathConfigs: List @@ -224,7 +229,6 @@ object AndroidDependencyResolver { } } - @Suppress("UnstableApiUsage") private tailrec fun doCollectDependencies( modules: List, resolutionResults: Map, @@ -246,7 +250,7 @@ object AndroidDependencyResolver { val attributes = sourceSetConfigs.compileConfigs.first().attributes return HashSet().also { - doFindDependencies(implConfigs, listOf(sourceSetConfigs.implConfig), attributes, attributesSchema, it) + doFindDependencies(implConfigs, sourceSetConfigs.implConfigs, attributes, attributesSchema, it) } }