From 2eb354f21178f7c9428d2b00464d6b94070d405b Mon Sep 17 00:00:00 2001 From: Andrey Uskov Date: Mon, 11 May 2020 23:40:01 +0300 Subject: [PATCH] Fixed import of MPP modules with single artifacts #KT-38037 Fixed --- .../NewMultiplatformProjectImportingTest.kt | 24 +++++++ .../src/KotlinMPPGradleModelBuilder.kt | 5 ++ .../mutableArtifactLists/build.gradle | 18 ++++++ .../mpp-bottom-actual/build.gradle | 62 +++++++++++++++++++ .../mpp-mid-actual/build.gradle | 52 ++++++++++++++++ .../mutableArtifactLists/settings.gradle | 9 +++ 6 files changed, 170 insertions(+) create mode 100644 idea/testData/gradle/newMultiplatformImport/mutableArtifactLists/build.gradle create mode 100644 idea/testData/gradle/newMultiplatformImport/mutableArtifactLists/mpp-bottom-actual/build.gradle create mode 100644 idea/testData/gradle/newMultiplatformImport/mutableArtifactLists/mpp-mid-actual/build.gradle create mode 100644 idea/testData/gradle/newMultiplatformImport/mutableArtifactLists/settings.gradle 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 f9fe1b17001..d0ab9453205 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/NewMultiplatformProjectImportingTest.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/NewMultiplatformProjectImportingTest.kt @@ -942,6 +942,30 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin } + @Test + @PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.30+") + fun testMutableArtifactLists() { + configureByFiles() + importProject(true) + checkProjectStructure(true, false, false) { + module("KT38037") {} + module("KT38037.mpp-bottom-actual") {} + module("KT38037.mpp-bottom-actual.commonMain") {} + module("KT38037.mpp-bottom-actual.commonTest") {} + module("KT38037.mpp-bottom-actual.jvm18Main") {} + module("KT38037.mpp-bottom-actual.jvm18Test") {} + module("KT38037.mpp-bottom-actual.main") {} + module("KT38037.mpp-bottom-actual.test") {} + module("KT38037.mpp-mid-actual") {} + module("KT38037.mpp-mid-actual.commonMain") {} + module("KT38037.mpp-mid-actual.commonTest") {} + module("KT38037.mpp-mid-actual.jvmWithJavaMain") {} + module("KT38037.mpp-mid-actual.jvmWithJavaTest") {} + module("KT38037.mpp-mid-actual.main") {} + module("KT38037.mpp-mid-actual.test") {} + } + } + private fun checkProjectStructure( exhaustiveModuleList: Boolean = true, exhaustiveSourceSourceRootList: Boolean = true, diff --git a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt index c4f33cf6f18..542d2ca70a5 100644 --- a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt +++ b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt @@ -268,6 +268,11 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService { .resolveDependencies(configuration) .apply { forEach { (it as? AbstractExternalDependency)?.scope = scope } + forEach { + if (it is DefaultExternalProjectDependency && it.projectDependencyArtifacts !is ArrayList) { + it.projectDependencyArtifacts = ArrayList(it.projectDependencyArtifacts) + } + } } .flatMap { dependencyAdjuster.adjustDependency(it) } val singleDependencyFiles = resolvedDependencies.mapNotNullTo(LinkedHashSet()) { diff --git a/idea/testData/gradle/newMultiplatformImport/mutableArtifactLists/build.gradle b/idea/testData/gradle/newMultiplatformImport/mutableArtifactLists/build.gradle new file mode 100644 index 00000000000..b9f8c153262 --- /dev/null +++ b/idea/testData/gradle/newMultiplatformImport/mutableArtifactLists/build.gradle @@ -0,0 +1,18 @@ +buildscript { + repositories { + {{kotlin_plugin_repositories}} + } + + dependencies { + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:{{kotlin_plugin_version}}") + {{extraPluginDependencies}} + } + +} + +allprojects { + repositories { + {{kotlin_plugin_repositories}} + } +} + diff --git a/idea/testData/gradle/newMultiplatformImport/mutableArtifactLists/mpp-bottom-actual/build.gradle b/idea/testData/gradle/newMultiplatformImport/mutableArtifactLists/mpp-bottom-actual/build.gradle new file mode 100644 index 00000000000..2c6748a4f86 --- /dev/null +++ b/idea/testData/gradle/newMultiplatformImport/mutableArtifactLists/mpp-bottom-actual/build.gradle @@ -0,0 +1,62 @@ +apply plugin: 'kotlin-multiplatform' +apply plugin: 'maven-publish' + +group 'org.jetbrains.qa.combompp' + +buildscript { + repositories { + {{kotlin_plugin_repositories}} + } +} + +repositories { + {{kotlin_plugin_repositories}} +} + +kotlin { + jvm("jvm18") { + withJava() + compilations.all { + kotlinOptions.jvmTarget = "1.8" + } + } + + sourceSets { + + commonMain { + dependencies { + api kotlin('stdlib-common', '{{kotlin_plugin_version}}') + api kotlin('stdlib', '{{kotlin_plugin_version}}') + + } + } + commonTest { + dependencies { + api kotlin('test-common', '{{kotlin_plugin_version}}') + api kotlin('test-annotations-common', '{{kotlin_plugin_version}}') + api kotlin('test', '{{kotlin_plugin_version}}') + } + } + + // setting up the targets source sets + jvm18Main { + kotlin.srcDir('src/jvm18Main/customSrc') + + dependencies { + implementation kotlin('stdlib-jdk8', '{{kotlin_plugin_version}}') + } + } + jvm18Test { + dependencies { + api kotlin('test') + api kotlin('test-junit') + } + } + } + +} + +dependencies { + jvm18TestApi "org.assertj:assertj-core:3.11.1" +} + diff --git a/idea/testData/gradle/newMultiplatformImport/mutableArtifactLists/mpp-mid-actual/build.gradle b/idea/testData/gradle/newMultiplatformImport/mutableArtifactLists/mpp-mid-actual/build.gradle new file mode 100644 index 00000000000..031bb969fb0 --- /dev/null +++ b/idea/testData/gradle/newMultiplatformImport/mutableArtifactLists/mpp-mid-actual/build.gradle @@ -0,0 +1,52 @@ +group 'org.jetbrains.qa.combompp' +version '1.0' + +apply plugin: 'kotlin-multiplatform' +apply plugin: 'maven-publish' + +buildscript { + repositories { + {{kotlin_plugin_repositories}} + } +} + +repositories { + {{kotlin_plugin_repositories}} +} + +kotlin { + jvm("jvmWithJava") { + withJava() + compilations.all { + kotlinOptions.jvmTarget = "1.8" + } + } + + sourceSets { + commonMain { + dependencies { + api project(":mpp-bottom-actual") + implementation kotlin('stdlib-common', '{{kotlin_plugin_version}}') + implementation kotlin('stdlib', '{{kotlin_plugin_version}}') + } + } + commonTest { + dependencies { + implementation kotlin('test-common', '{{kotlin_plugin_version}}') + implementation kotlin('test-annotations-common', '{{kotlin_plugin_version}}') + implementation kotlin('test', '{{kotlin_plugin_version}}') + } + } + + jvmWithJavaMain { + dependencies { + } + } + jvmWithJavaTest { + dependencies { + implementation kotlin('test', '{{kotlin_plugin_version}}') + implementation kotlin('test-junit', '{{kotlin_plugin_version}}') + } + } + } +} diff --git a/idea/testData/gradle/newMultiplatformImport/mutableArtifactLists/settings.gradle b/idea/testData/gradle/newMultiplatformImport/mutableArtifactLists/settings.gradle new file mode 100644 index 00000000000..6e944c860a3 --- /dev/null +++ b/idea/testData/gradle/newMultiplatformImport/mutableArtifactLists/settings.gradle @@ -0,0 +1,9 @@ +pluginManagement { + repositories { + {{kotlin_plugin_repositories}} + } +} +rootProject.name = 'KT38037' + +include ':mpp-bottom-actual', ':mpp-mid-actual' +enableFeaturePreview('GRADLE_METADATA') \ No newline at end of file