From 5901c2163f1ad0edbcd0fffc61afc22c2d15b5ad Mon Sep 17 00:00:00 2001 From: Sergey Igushkin Date: Tue, 20 Feb 2018 15:35:16 +0300 Subject: [PATCH] Add the expectedBy dependency to the compile configuration Enable its propagation through transitive dependencies (including POMs generated by Gradle) Issue #KT-22824 Fixed --- .../kotlin/gradle/MultiplatformGradleIT.kt | 21 +++++++++++++++++++ .../plugin/KotlinMultiplatformPlugin.kt | 4 ++++ 2 files changed, 25 insertions(+) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MultiplatformGradleIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MultiplatformGradleIT.kt index ecf225ccbbd..12c27c9e40e 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MultiplatformGradleIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MultiplatformGradleIT.kt @@ -201,4 +201,25 @@ class MultiplatformGradleIT : BaseGradleIT() { assertTasksExecuted(listOf(":lib:compileKotlinCommon", ":libJvm:compileKotlin", ":libJs:compileKotlin2Js")) } } + + @Test + fun testCommonModuleAsTransitiveDependency() = with(Project("multiplatformProject")) { + setupWorkingDir() + gradleBuildScript("libJvm").appendText(""" + ${'\n'} + task printCompileConfiguration(type: DefaultTask) { + doFirst { + configurations.compile.resolvedConfiguration.resolvedArtifacts.each { + println("Dependency: '" + it.name + "'") + } + } + } + """.trimIndent()) + + build("printCompileConfiguration") { + assertSuccessful() + // Check that `lib` is contained in the resolved compile artifacts of `libJvm`: + assertContains("Dependency: 'lib'") + } + } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformPlugin.kt index 17d67f34df6..2b25748d8ea 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformPlugin.kt @@ -72,6 +72,10 @@ open class KotlinPlatformImplementationPluginBase(platformName: String) : Kotlin config.dependencies.whenObjectAdded { dep -> if (dep is ProjectDependency) { addCommonProject(dep.dependencyProject, project) + + // Needed for the projects that depend on this one to recover the common module sources through + // the transitive dependency (also, it will be added to the POM generated by Gradle): + project.configurations.getByName("compile").dependencies.add(dep) } else { throw GradleException("$project '${config.name}' dependency is not a project: $dep")