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 ?: continue
val classifier = dependency.classifier ?: return dependency val targetModuleNode = ExternalSystemApiUtil.findFirstRecursively(ideProject) {
val targetModuleNode = ExternalSystemApiUtil.findFirstRecursively(ideProject) { (it.data as? ModuleData)?.id == projectPath
(it.data as? ModuleData)?.id == projectPath } ?: continue
} ?: return dependency val candidateDataNodes = ExternalSystemApiUtil.getChildren(targetModuleNode, GradleSourceSetData.KEY)
val targetCompilation = ExternalSystemApiUtil if (classifier != KotlinTarget.METADATA_TARGET_NAME) {
.getChildren(targetModuleNode, GradleSourceSetData.KEY) val compilationName = candidateDataNodes
.mapNotNull { sourceSetNode -> .mapNotNull { sourceSetNode ->
sourceSetNode.kotlinSourceSet?.kotlinModule as? KotlinCompilation sourceSetNode.kotlinSourceSet?.kotlinModule as? KotlinCompilation
}
.firstOrNull {
it.name == KotlinCompilation.MAIN_COMPILATION_NAME && it.target.disambiguationClassifier == classifier
}
?.fullName() ?: continue
result += DefaultExternalProjectDependency(dependency).also {
it.configurationName = compilationName
}
} }
.firstOrNull {
it.name == KotlinCompilation.MAIN_COMPILATION_NAME && it.target.disambiguationClassifier == classifier result += DefaultExternalProjectDependency(dependency).also {
} ?: return dependency it.configurationName = KotlinSourceSet.COMMON_MAIN_SOURCE_SET_NAME
return DefaultExternalProjectDependency(dependency).also { }
it.configurationName = targetCompilation.fullName()
result -= dependency
} }
return result.toList()
} }
private fun addDependency(fromModule: DataNode<*>, toModule: DataNode<*>) { private fun addDependency(fromModule: DataNode<*>, toModule: DataNode<*>) {