From 02ee950836cfafae60507512bd604ca382f03257 Mon Sep 17 00:00:00 2001 From: Andrey Uskov Date: Tue, 30 Jul 2019 01:43:37 +0300 Subject: [PATCH] Add transitive dependencies on common MPP modules Transitive dependencies on modules available via 'dependsOn' dependencies are added to java modules depending on MPP projects #KT-33025 Fixed --- .../KotlinMPPGradleProjectResolver.kt | 8 +- ...chicalMultiplatformProjectImportingTest.kt | 109 ++++++++++++++++++ .../NewMultiplatformProjectImportingTest.kt | 11 +- .../jvmWithJavaOnHMPP/build.gradle | 21 ++++ .../jvmWithJavaOnHMPP/gradle.properties | 7 ++ .../jvmWithJavaOnHMPP/hmpp-mod-a/build.gradle | 82 +++++++++++++ .../jvmWithJavaOnHMPP/jvm-mod/build.gradle | 15 +++ .../jvmWithJavaOnHMPP/settings.gradle | 16 +++ 8 files changed, 263 insertions(+), 6 deletions(-) create mode 100644 idea/testData/gradle/hierarchicalMultiplatformImport/jvmWithJavaOnHMPP/build.gradle create mode 100644 idea/testData/gradle/hierarchicalMultiplatformImport/jvmWithJavaOnHMPP/gradle.properties create mode 100644 idea/testData/gradle/hierarchicalMultiplatformImport/jvmWithJavaOnHMPP/hmpp-mod-a/build.gradle create mode 100644 idea/testData/gradle/hierarchicalMultiplatformImport/jvmWithJavaOnHMPP/jvm-mod/build.gradle create mode 100644 idea/testData/gradle/hierarchicalMultiplatformImport/jvmWithJavaOnHMPP/settings.gradle 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 d7ed6f1c362..c3f495fdb4f 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 @@ -240,11 +240,9 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() { val currentModules = userData[path] ?: ArrayList().apply { userData[path] = this } // Test modules should not be added. Otherwise we could get dependnecy of java.mail on jvmTest val allSourceSets = target.compilations.filter { !it.isTestModule }.flatMap { it.sourceSets }.toSet() - val availableViaDependsOn = allSourceSets.flatMap { it.dependsOnSourceSets }.toSet() - allSourceSets.filter { !availableViaDependsOn.contains(it.name) }.forEach { sourceSet -> - run { - currentModules.add(getKotlinModuleId(gradleModule, sourceSet, resolverCtx)) - } + val availableViaDependsOn = allSourceSets.flatMap { it.dependsOnSourceSets }.mapNotNull { mppModel.sourceSets[it] } + allSourceSets.union(availableViaDependsOn).forEach { sourceSet -> + currentModules.add(getKotlinModuleId(gradleModule, sourceSet, resolverCtx)) } } diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/HierarchicalMultiplatformProjectImportingTest.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/HierarchicalMultiplatformProjectImportingTest.kt index 3f0b6cd8876..2f5a48980cc 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/HierarchicalMultiplatformProjectImportingTest.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/HierarchicalMultiplatformProjectImportingTest.kt @@ -227,6 +227,115 @@ class HierarchicalMultiplatformProjectImportingTest : MultiplePluginVersionGradl } } + @Test + fun testJvmWithJavaOnHMPP() { + configureByFiles() + importProject() + + checkProjectStructure(true, false, true) { + module("jvm-on-mpp") {} + module("jvm-on-mpp.jvm-mod") {} + + + module("jvm-on-mpp.jvm-mod.main") { + moduleDependency("jvm-on-mpp.hmpp-mod-a.commonMain", DependencyScope.COMPILE) + moduleDependency("jvm-on-mpp.hmpp-mod-a.jvmAndJsMain", DependencyScope.COMPILE) + moduleDependency("jvm-on-mpp.hmpp-mod-a.jvmMain", DependencyScope.COMPILE) + moduleDependency("jvm-on-mpp.hmpp-mod-a.main", DependencyScope.COMPILE) + } + module("jvm-on-mpp.jvm-mod.test") { + moduleDependency("jvm-on-mpp.hmpp-mod-a.commonMain", DependencyScope.COMPILE) + moduleDependency("jvm-on-mpp.hmpp-mod-a.jvmAndJsMain", DependencyScope.COMPILE) + moduleDependency("jvm-on-mpp.hmpp-mod-a.jvmMain", DependencyScope.COMPILE) + moduleDependency("jvm-on-mpp.hmpp-mod-a.main", DependencyScope.COMPILE) + moduleDependency("jvm-on-mpp.jvm-mod.main", DependencyScope.COMPILE) + } + module("jvm-on-mpp.hmpp-mod-a") { + + } + module("jvm-on-mpp.hmpp-mod-a.commonMain") { + + } + module("jvm-on-mpp.hmpp-mod-a.commonTest") { + moduleDependency("jvm-on-mpp.hmpp-mod-a.commonMain", DependencyScope.TEST) + + } + module("jvm-on-mpp.hmpp-mod-a.jsMain") { + moduleDependency("jvm-on-mpp.hmpp-mod-a.commonMain", DependencyScope.COMPILE) + moduleDependency("jvm-on-mpp.hmpp-mod-a.jvmAndJsMain", DependencyScope.COMPILE) + moduleDependency("jvm-on-mpp.hmpp-mod-a.linuxAndJsMain", DependencyScope.COMPILE) + } + module("jvm-on-mpp.hmpp-mod-a.jsTest") { + moduleDependency("jvm-on-mpp.hmpp-mod-a.commonMain", DependencyScope.TEST) + moduleDependency("jvm-on-mpp.hmpp-mod-a.commonTest", DependencyScope.TEST) + moduleDependency("jvm-on-mpp.hmpp-mod-a.jsMain", DependencyScope.TEST) + moduleDependency("jvm-on-mpp.hmpp-mod-a.jvmAndJsMain", DependencyScope.TEST) + moduleDependency("jvm-on-mpp.hmpp-mod-a.jvmAndJsTest", DependencyScope.TEST) + moduleDependency("jvm-on-mpp.hmpp-mod-a.linuxAndJsMain", DependencyScope.TEST) + moduleDependency("jvm-on-mpp.hmpp-mod-a.linuxAndJsTest", DependencyScope.TEST) + } + module("jvm-on-mpp.hmpp-mod-a.jvmAndJsMain") { + moduleDependency("jvm-on-mpp.hmpp-mod-a.commonMain", DependencyScope.COMPILE) + + + } + module("jvm-on-mpp.hmpp-mod-a.jvmAndJsTest") { + moduleDependency("jvm-on-mpp.hmpp-mod-a.commonMain", DependencyScope.TEST) + moduleDependency("jvm-on-mpp.hmpp-mod-a.commonTest", DependencyScope.TEST) + moduleDependency("jvm-on-mpp.hmpp-mod-a.jvmAndJsMain", DependencyScope.TEST) + + } + module("jvm-on-mpp.hmpp-mod-a.jvmMain") { + moduleDependency("jvm-on-mpp.hmpp-mod-a.commonMain", DependencyScope.COMPILE) + moduleDependency("jvm-on-mpp.hmpp-mod-a.jvmAndJsMain", DependencyScope.COMPILE) + + } + module("jvm-on-mpp.hmpp-mod-a.jvmTest") { + moduleDependency("jvm-on-mpp.hmpp-mod-a.commonMain", DependencyScope.TEST) + moduleDependency("jvm-on-mpp.hmpp-mod-a.commonTest", DependencyScope.TEST) + moduleDependency("jvm-on-mpp.hmpp-mod-a.jvmAndJsMain", DependencyScope.TEST) + moduleDependency("jvm-on-mpp.hmpp-mod-a.jvmAndJsTest", DependencyScope.TEST) + moduleDependency("jvm-on-mpp.hmpp-mod-a.jvmMain", DependencyScope.TEST) + + } + module("jvm-on-mpp.hmpp-mod-a.linuxAndJsMain") { + moduleDependency("jvm-on-mpp.hmpp-mod-a.commonMain", DependencyScope.COMPILE) + + } + module("jvm-on-mpp.hmpp-mod-a.linuxAndJsTest") { + moduleDependency("jvm-on-mpp.hmpp-mod-a.commonMain", DependencyScope.TEST) + moduleDependency("jvm-on-mpp.hmpp-mod-a.commonTest", DependencyScope.TEST) + moduleDependency("jvm-on-mpp.hmpp-mod-a.linuxAndJsMain", DependencyScope.TEST) + + } + module("jvm-on-mpp.hmpp-mod-a.linuxX64Main") { + moduleDependency("jvm-on-mpp.hmpp-mod-a.commonMain", DependencyScope.COMPILE) + moduleDependency("jvm-on-mpp.hmpp-mod-a.linuxAndJsMain", DependencyScope.COMPILE) + libraryDependency("Kotlin/Native 1.3.50-dev-1383 - builtin [linux_x64]", DependencyScope.PROVIDED) + libraryDependency("Kotlin/Native 1.3.50-dev-1383 - iconv [linux_x64]", DependencyScope.PROVIDED) + libraryDependency("Kotlin/Native 1.3.50-dev-1383 - linux [linux_x64]", DependencyScope.PROVIDED) + libraryDependency("Kotlin/Native 1.3.50-dev-1383 - posix [linux_x64]", DependencyScope.PROVIDED) + libraryDependency("Kotlin/Native 1.3.50-dev-1383 - stdlib", DependencyScope.PROVIDED) + libraryDependency("Kotlin/Native 1.3.50-dev-1383 - zlib [linux_x64]", DependencyScope.PROVIDED) + } + module("jvm-on-mpp.hmpp-mod-a.linuxX64Test") { + moduleDependency("jvm-on-mpp.hmpp-mod-a.commonMain", DependencyScope.TEST) + moduleDependency("jvm-on-mpp.hmpp-mod-a.commonTest", DependencyScope.TEST) + moduleDependency("jvm-on-mpp.hmpp-mod-a.linuxAndJsMain", DependencyScope.TEST) + moduleDependency("jvm-on-mpp.hmpp-mod-a.linuxAndJsTest", DependencyScope.TEST) + moduleDependency("jvm-on-mpp.hmpp-mod-a.linuxX64Main", DependencyScope.TEST) + libraryDependency("Kotlin/Native 1.3.50-dev-1383 - builtin [linux_x64]", DependencyScope.PROVIDED) + libraryDependency("Kotlin/Native 1.3.50-dev-1383 - iconv [linux_x64]", DependencyScope.PROVIDED) + libraryDependency("Kotlin/Native 1.3.50-dev-1383 - linux [linux_x64]", DependencyScope.PROVIDED) + libraryDependency("Kotlin/Native 1.3.50-dev-1383 - posix [linux_x64]", DependencyScope.PROVIDED) + libraryDependency("Kotlin/Native 1.3.50-dev-1383 - stdlib", DependencyScope.PROVIDED) + libraryDependency("Kotlin/Native 1.3.50-dev-1383 - zlib [linux_x64]", DependencyScope.PROVIDED) + } + module("jvm-on-mpp.hmpp-mod-a.main") {} + module("jvm-on-mpp.hmpp-mod-a.test") {} + } + } + private fun checkProjectStructure( exhaustiveModuleList: Boolean = true, exhaustiveSourceSourceRootList: Boolean = true, 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 e8881b54a4c..6e7656277f1 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/NewMultiplatformProjectImportingTest.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/NewMultiplatformProjectImportingTest.kt @@ -591,12 +591,16 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin module("project.jvm") {} module("project.jvm.main") { moduleDependency("project.mpp-base.jvmMain", DependencyScope.COMPILE) + moduleDependency("project.mpp-base.commonMain", DependencyScope.COMPILE) moduleDependency("project.mpp.jvmMain", DependencyScope.COMPILE) + moduleDependency("project.mpp.commonMain", DependencyScope.COMPILE) } module("project.jvm.test") { moduleDependency("project.jvm.main", DependencyScope.COMPILE) moduleDependency("project.mpp-base.jvmMain", DependencyScope.COMPILE) + moduleDependency("project.mpp-base.commonMain", DependencyScope.COMPILE) moduleDependency("project.mpp.jvmMain", DependencyScope.COMPILE) + moduleDependency("project.mpp.commonMain", DependencyScope.COMPILE) } module("project.mpp") {} module("project.mpp.commonMain") { @@ -649,13 +653,16 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin module("mpp-jardep.java-project.main") { moduleDependency("mpp-jardep.library1.jvmMain", DependencyScope.COMPILE) moduleDependency("mpp-jardep.library2.jvmMain", DependencyScope.COMPILE) + moduleDependency("mpp-jardep.library1.commonMain", DependencyScope.COMPILE) + moduleDependency("mpp-jardep.library2.commonMain", DependencyScope.COMPILE) } module("mpp-jardep.java-project.test") { moduleDependency("mpp-jardep.java-project.main", DependencyScope.COMPILE) moduleDependency("mpp-jardep.library1.jvmMain", DependencyScope.COMPILE) moduleDependency("mpp-jardep.library2.jvmMain", DependencyScope.COMPILE) - + moduleDependency("mpp-jardep.library1.commonMain", DependencyScope.COMPILE) + moduleDependency("mpp-jardep.library2.commonMain", DependencyScope.COMPILE) } module("mpp-jardep.library1") {} @@ -719,11 +726,13 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin module("jvm-on-mpp.jvm-mod") {} module("jvm-on-mpp.jvm-mod.main") { moduleDependency("jvm-on-mpp.mpp-mod-a.jvmMain", DependencyScope.COMPILE, false) + moduleDependency("jvm-on-mpp.mpp-mod-a.commonMain", DependencyScope.COMPILE, false) moduleDependency("jvm-on-mpp.mpp-mod-a.main", DependencyScope.COMPILE, false) } module("jvm-on-mpp.jvm-mod.test") { moduleDependency("jvm-on-mpp.jvm-mod.main", DependencyScope.COMPILE, false) moduleDependency("jvm-on-mpp.mpp-mod-a.jvmMain", DependencyScope.COMPILE, false) + moduleDependency("jvm-on-mpp.mpp-mod-a.commonMain", DependencyScope.COMPILE, false) moduleDependency("jvm-on-mpp.mpp-mod-a.main", DependencyScope.COMPILE, false) } diff --git a/idea/testData/gradle/hierarchicalMultiplatformImport/jvmWithJavaOnHMPP/build.gradle b/idea/testData/gradle/hierarchicalMultiplatformImport/jvmWithJavaOnHMPP/build.gradle new file mode 100644 index 00000000000..f5f2e2bbcfe --- /dev/null +++ b/idea/testData/gradle/hierarchicalMultiplatformImport/jvmWithJavaOnHMPP/build.gradle @@ -0,0 +1,21 @@ +buildscript { + repositories { + mavenLocal() + jcenter() + maven { url 'https://dl.bintray.com/kotlin/kotlin-dev' } + } + + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } + +} + +allprojects { + repositories { + mavenLocal() + jcenter() + maven { url 'https://dl.bintray.com/kotlin/kotlin-dev' } + } +} + diff --git a/idea/testData/gradle/hierarchicalMultiplatformImport/jvmWithJavaOnHMPP/gradle.properties b/idea/testData/gradle/hierarchicalMultiplatformImport/jvmWithJavaOnHMPP/gradle.properties new file mode 100644 index 00000000000..fe09472612f --- /dev/null +++ b/idea/testData/gradle/hierarchicalMultiplatformImport/jvmWithJavaOnHMPP/gradle.properties @@ -0,0 +1,7 @@ +kotlin_version = 1.3.50-dev-1383 +coroutines_version = 1.1.1 +moowork_node = 1.2.0 + +org.gradle.paralllel=true +kotlin.parallel.tasks.in.project=true +kotlin.mpp.enableGranularSourceSetsMetadata=true \ No newline at end of file diff --git a/idea/testData/gradle/hierarchicalMultiplatformImport/jvmWithJavaOnHMPP/hmpp-mod-a/build.gradle b/idea/testData/gradle/hierarchicalMultiplatformImport/jvmWithJavaOnHMPP/hmpp-mod-a/build.gradle new file mode 100644 index 00000000000..a9f4355a615 --- /dev/null +++ b/idea/testData/gradle/hierarchicalMultiplatformImport/jvmWithJavaOnHMPP/hmpp-mod-a/build.gradle @@ -0,0 +1,82 @@ +version '1.0.0' + +apply plugin: 'kotlin-multiplatform' + +buildscript { + dependencies { + classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version" + classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version" + } + repositories { + mavenLocal() + jcenter() + maven { url 'https://dl.bintray.com/kotlin/kotlin-dev' } + } +} + +repositories { + mavenLocal() + jcenter() + maven { url 'https://dl.bintray.com/kotlin/kotlin-dev' } +} + +kotlin { + jvm { + withJava() + } + + js() + + linuxX64() + + sourceSets { + commonMain { + } + commonTest { + } + + + jvmAndJsMain { + dependsOn(commonMain) + } + + jvmAndJsTest { + dependsOn(commonTest) + } + + linuxAndJsMain { + dependsOn(commonMain) + } + + linuxAndJsTest { + dependsOn(commonTest) + } + + jvm().compilations["main"].defaultSourceSet { + dependsOn(jvmAndJsMain) + } + + jvm().compilations["test"].defaultSourceSet { + dependsOn(jvmAndJsTest) + } + + js().compilations["main"].defaultSourceSet { + dependsOn(jvmAndJsMain) + dependsOn(linuxAndJsMain) + } + + js().compilations["test"].defaultSourceSet { + dependsOn(jvmAndJsTest) + dependsOn(linuxAndJsTest) + } + + linuxX64().compilations["main"].defaultSourceSet { + dependsOn(linuxAndJsMain) + } + + linuxX64().compilations["test"].defaultSourceSet { + dependsOn(linuxAndJsTest) + } + } +} + diff --git a/idea/testData/gradle/hierarchicalMultiplatformImport/jvmWithJavaOnHMPP/jvm-mod/build.gradle b/idea/testData/gradle/hierarchicalMultiplatformImport/jvmWithJavaOnHMPP/jvm-mod/build.gradle new file mode 100644 index 00000000000..b82f6883b34 --- /dev/null +++ b/idea/testData/gradle/hierarchicalMultiplatformImport/jvmWithJavaOnHMPP/jvm-mod/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'org.jetbrains.kotlin.jvm' +} + +version 'unspecified' + +repositories { + mavenLocal() + jcenter() + maven { url 'https://dl.bintray.com/kotlin/kotlin-dev' } +} + +dependencies { + compile project(":hmpp-mod-a") +} diff --git a/idea/testData/gradle/hierarchicalMultiplatformImport/jvmWithJavaOnHMPP/settings.gradle b/idea/testData/gradle/hierarchicalMultiplatformImport/jvmWithJavaOnHMPP/settings.gradle new file mode 100644 index 00000000000..f6490172f9d --- /dev/null +++ b/idea/testData/gradle/hierarchicalMultiplatformImport/jvmWithJavaOnHMPP/settings.gradle @@ -0,0 +1,16 @@ +pluginManagement { + repositories { + maven { url 'http://dl.bintray.com/kotlin/kotlin-dev' } + maven { url 'http://dl.bintray.com/kotlin/kotlin-eap' } + + mavenCentral() + mavenLocal() + jcenter() + + maven { url 'https://dl.bintray.com/qwwdfsad/kotlinx' } + maven { url 'https://plugins.gradle.org/m2/' } + } +} +rootProject.name = 'jvm-on-mpp' +include ':hmpp-mod-a', ':jvm-mod' +enableFeaturePreview('GRADLE_METADATA') \ No newline at end of file