From befb6d19d1323d67950f1041da1ea09f58497257 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Thu, 6 Sep 2018 21:26:44 +0300 Subject: [PATCH] MPP: Use all transitively reachable modules as compilation source sets #KT-26254 Fixed --- .../KotlinMPPGradleProjectResolver.kt | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPGradleProjectResolver.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPGradleProjectResolver.kt index 8dd4d2db45e..5c6e0ac43f5 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPGradleProjectResolver.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPGradleProjectResolver.kt @@ -350,6 +350,7 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() { ?.let { ideModule.findChildModuleByInternalName(it) } ?.kotlinSourceSet ?.kotlinModule + ?.toSourceSet(mppModel) if (productionSourceSet != null) { sourceSetGraph.putEdge(sourceSet, productionSourceSet) } @@ -366,6 +367,15 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() { val toDataNode = getSiblingKotlinModuleData(dependeeSourceSet, gradleModule, ideModule, resolverCtx) ?: continue addDependency(fromDataNode, toDataNode) } + val sourceSetInfo = fromDataNode.kotlinSourceSet + if (sourceSetInfo != null && sourceSetInfo.kotlinModule is KotlinCompilation) { + val selfName = sourceSetInfo.kotlinModule.fullName() + sourceSetInfo.sourceSetIdsByName = dependeeSourceSets + .asSequence() + .filter { it.fullName() != selfName } + .map { it.name to getKotlinModuleId(gradleModule, it, resolverCtx) } + .toMap() + } if (processedModuleIds.add(getKotlinModuleId(gradleModule, sourceSet, resolverCtx))) { val mergedDependencies = LinkedHashSet().apply { addAll(sourceSet.dependencies) @@ -383,6 +393,12 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() { } } + private fun KotlinModule.toSourceSet(mppModel: KotlinMPPGradleModel) = when (this) { + is KotlinSourceSet -> this + is KotlinCompilation -> mppModel.sourceSets[fullName()] + else -> null + } + private fun preprocessDependencies( dependencies: Set, ideProject: DataNode @@ -613,11 +629,6 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() { } it.dependencyClasspath = compilation.dependencyClasspath it.defaultCompilerArguments = createCompilerArguments(compilation.arguments.defaultArguments, compilation.platform) - it.sourceSetIdsByName = compilation.sourceSets - .asSequence() - .filter { it.fullName() != compilation.fullName() } - .map { it.name to getKotlinModuleId(gradleModule, it, resolverCtx) } - .toMap() } }