From 17dec7b389a2cf2a7cf0a22bacb3ffd200a6e306 Mon Sep 17 00:00:00 2001 From: Andrey Uskov Date: Wed, 24 Jul 2019 13:04:43 +0300 Subject: [PATCH] Add transitive test dependencies on MPP with jvmWithJava on import Fixed case when production and test source sets depend on MPP module with jvmWithJava involved and have dependency on the same jar artifact. --- .../KotlinMPPGradleProjectResolver.kt | 14 +++++++++----- .../gradle/NewMultiplatformProjectImportingTest.kt | 2 +- 2 files changed, 10 insertions(+), 6 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 3f0d4db26f1..fc0738c55f8 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 @@ -144,23 +144,27 @@ 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() + + //Note! Should not use MultiValuesMap as it contains Set of values, but we need comparision === instead of == + val artifactToDependency = HashMap>() externalProject?.sourceSets?.values?.forEach { sourceSet -> sourceSet.dependencies.forEach { dependency -> dependency.getDependencyArtifacts().map { toCanonicalPath(it.absolutePath) } - .filter { mppArtifacts.keys.contains(it) }.forEach { - artifactToDependency[it] = dependency + .filter { mppArtifacts.keys.contains(it) }.forEach {filePath -> + (artifactToDependency[filePath] ?: ArrayList().also { newCollection -> + artifactToDependency[filePath] = newCollection + }).add(dependency) } } } // create 'fake' dependency artifact files and put them into dependency substitution map mppArtifacts.forEach { (k, v) -> - artifactToDependency[k]?.apply { + artifactToDependency[k]?.forEach { externalDependency -> for ((index, module) in v.withIndex()) { val fakeArtifact = "$k-MPP-$index" configArtifacts[fakeArtifact] = module - this.addDependencyArtifactInternal(File(fakeArtifact)) + externalDependency.addDependencyArtifactInternal(File(fakeArtifact)) } } } diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/NewMultiplatformProjectImportingTest.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/NewMultiplatformProjectImportingTest.kt index 7e56f0ac288..da1ebe0dc47 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/NewMultiplatformProjectImportingTest.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/NewMultiplatformProjectImportingTest.kt @@ -586,7 +586,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin checkProjectStructure(false, false, false ) { module("project.javaModule.test") { moduleDependency("project.mppModule.jvmTest", DependencyScope.TEST, true) - moduleDependency("project.mppModule.jvmMain", DependencyScope.TEST, false) + moduleDependency("project.mppModule.jvmMain", DependencyScope.COMPILE, false) } } }