MPP: Add commonMain as a part of inter-project dependency

#KT-26383 Fixed
This commit is contained in:
Alexey Sedunov
2018-09-12 13:53:53 +03:00
parent 469b11e0aa
commit 4970e90412
@@ -408,30 +408,40 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
.mapValues { it.value.firstOrNull { it.scope == "COMPILE" } ?: it.value.lastOrNull() } .mapValues { it.value.firstOrNull { it.scope == "COMPILE" } ?: it.value.lastOrNull() }
.values .values
.filterNotNull() .filterNotNull()
.map { adjustDependency(it, ideProject) } .adjustDependencies(ideProject)
} }
private fun adjustDependency( private fun List<ExternalDependency>.adjustDependencies(ideProject: DataNode<ProjectData>): List<ExternalDependency> {
dependency: ExternalDependency, val result = LinkedHashSet(this)
ideProject: DataNode<ProjectData> for (dependency in this) {
): ExternalDependency { if (dependency !is ExternalProjectDependency) continue
if (dependency !is ExternalProjectDependency) return dependency
val projectPath = dependency.projectPath val projectPath = dependency.projectPath
val classifier = dependency.classifier ?: return dependency val classifier = dependency.classifier ?: continue
val targetModuleNode = ExternalSystemApiUtil.findFirstRecursively(ideProject) { val targetModuleNode = ExternalSystemApiUtil.findFirstRecursively(ideProject) {
(it.data as? ModuleData)?.id == projectPath (it.data as? ModuleData)?.id == projectPath
} ?: return dependency } ?: continue
val targetCompilation = ExternalSystemApiUtil val candidateDataNodes = ExternalSystemApiUtil.getChildren(targetModuleNode, GradleSourceSetData.KEY)
.getChildren(targetModuleNode, GradleSourceSetData.KEY) if (classifier != KotlinTarget.METADATA_TARGET_NAME) {
val compilationName = candidateDataNodes
.mapNotNull { sourceSetNode -> .mapNotNull { sourceSetNode ->
sourceSetNode.kotlinSourceSet?.kotlinModule as? KotlinCompilation sourceSetNode.kotlinSourceSet?.kotlinModule as? KotlinCompilation
} }
.firstOrNull { .firstOrNull {
it.name == KotlinCompilation.MAIN_COMPILATION_NAME && it.target.disambiguationClassifier == classifier it.name == KotlinCompilation.MAIN_COMPILATION_NAME && it.target.disambiguationClassifier == classifier
} ?: return dependency
return DefaultExternalProjectDependency(dependency).also {
it.configurationName = targetCompilation.fullName()
} }
?.fullName() ?: continue
result += DefaultExternalProjectDependency(dependency).also {
it.configurationName = compilationName
}
}
result += DefaultExternalProjectDependency(dependency).also {
it.configurationName = KotlinSourceSet.COMMON_MAIN_SOURCE_SET_NAME
}
result -= dependency
}
return result.toList()
} }
private fun addDependency(fromModule: DataNode<*>, toModule: DataNode<*>) { private fun addDependency(fromModule: DataNode<*>, toModule: DataNode<*>) {