From 6c0469cee0e25178dba2e7ce341ee8d93e3b48e3 Mon Sep 17 00:00:00 2001 From: Andrey Uskov Date: Tue, 23 Jul 2019 19:44:38 +0300 Subject: [PATCH] Fix importing transitive dependencies on MPP project Fix importing dependencies of java projects on MPP projects when external dependency is resolved into file collection dependency --- .../KotlinMPPGradleProjectResolver.kt | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 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 0e0061bd291..3f0d4db26f1 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 @@ -121,6 +121,20 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() { } } + private fun ExternalDependency.getDependencyArtifacts(): Collection = + when (this) { + is ExternalProjectDependency -> this.projectDependencyArtifacts + is FileCollectionDependency -> this.files + else -> emptyList() + } + + private fun ExternalDependency.addDependencyArtifactInternal(file: File) { + when (this) { + is ExternalProjectDependency -> this.projectDependencyArtifacts.add(file) + is FileCollectionDependency -> this.files.add(file) + } + } + override fun populateModuleDependencies(gradleModule: IdeaModule, ideModule: DataNode, ideProject: DataNode) { if (resolverCtx.getExtraProject(gradleModule, KotlinMPPGradleModel::class.java) == null) { // Add mpp-artifacts into map used for dependency substitution @@ -130,15 +144,14 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() { // processing case when one artifact could be produced by several (actualized!)source sets if (mppArtifacts.isNotEmpty() && resolverCtx.isResolveModulePerSourceSet) { val externalProject = resolverCtx.getExtraProject(gradleModule, ExternalProject::class.java) - val artifactToDependency = HashMap() + val artifactToDependency = HashMap() externalProject?.sourceSets?.values?.forEach { sourceSet -> sourceSet.dependencies.forEach { dependency -> - if (dependency is ExternalProjectDependency) { - dependency.projectDependencyArtifacts.map { toCanonicalPath(it.absolutePath) } - .filter { mppArtifacts.keys.contains(it) }.forEach { - artifactToDependency[it] = dependency - } - } + dependency.getDependencyArtifacts().map { toCanonicalPath(it.absolutePath) } + .filter { mppArtifacts.keys.contains(it) }.forEach { + artifactToDependency[it] = dependency + } + } } // create 'fake' dependency artifact files and put them into dependency substitution map @@ -147,7 +160,7 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() { for ((index, module) in v.withIndex()) { val fakeArtifact = "$k-MPP-$index" configArtifacts[fakeArtifact] = module - this.projectDependencyArtifacts.add(File(fakeArtifact)) + this.addDependencyArtifactInternal(File(fakeArtifact)) } } }