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 d55b68b2e03..043a81fd9db 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/NewMultiplatformProjectImportingTest.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/NewMultiplatformProjectImportingTest.kt @@ -329,6 +329,50 @@ class NewMultiplatformProjectImportingTest : GradleImportingTestCase() { } } + @Test + fun testDependencyOnRoot() { + configureByFiles() + importProject() + checkProjectStructure(exhaustiveSourceSourceRootList = false) { + + module("project") + module("project_commonMain") + module("project_commonTest") { + moduleDependency("project_commonMain", DependencyScope.TEST) + } + module("project_jvmMain") { + moduleDependency("project_commonMain", DependencyScope.COMPILE) + } + module("project_jvmTest") { + moduleDependency("project_commonMain", DependencyScope.TEST) + moduleDependency("project_commonTest", DependencyScope.TEST) + moduleDependency("project_jvmMain", DependencyScope.TEST) + } + + module("subproject") + module("subproject_commonMain") { + moduleDependency("project_commonMain", DependencyScope.COMPILE) + } + module("subproject_commonTest") { + moduleDependency("project_commonMain", DependencyScope.TEST) + moduleDependency("subproject_commonMain", DependencyScope.TEST) + } + module("subproject_jvmMain") { + moduleDependency("project_commonMain", DependencyScope.COMPILE) + moduleDependency("subproject_commonMain", DependencyScope.COMPILE) + moduleDependency("project_jvmMain", DependencyScope.COMPILE) + } + module("subproject_jvmTest") { + moduleDependency("project_commonMain", DependencyScope.TEST) + moduleDependency("subproject_commonMain", DependencyScope.TEST) + moduleDependency("subproject_commonTest", DependencyScope.TEST) + moduleDependency("project_jvmMain", DependencyScope.TEST) + moduleDependency("subproject_jvmMain", DependencyScope.TEST) + } + } + + } + @Test fun testNestedDependencies() { configureByFiles() diff --git a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt index de8de622039..3dfa3a516e4 100644 --- a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt +++ b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt @@ -390,7 +390,13 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService { "RUNTIME" -> "getRuntimeElementsConfigurationName" else -> return@getOrPut listOf(dependency) } - val targets = project.rootProject.getChildProjectByPath(dependency.projectPath)?.getTargets() ?: return@getOrPut listOf(dependency) + val dependencyProject = + if (project.rootProject.path == dependency.projectPath) + project.rootProject + else + project.rootProject.getChildProjectByPath(dependency.projectPath) + + val targets = dependencyProject?.getTargets() ?: return@getOrPut listOf(dependency) val gradleTarget = targets.firstOrNull { val getter = it.javaClass.getMethodOrNull(taskGetterName) ?: return@firstOrNull false getter(it) == artifactConfiguration diff --git a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt.173 b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt.173 index 7703cb2e483..17c23527d87 100644 --- a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt.173 +++ b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt.173 @@ -384,7 +384,13 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService { "RUNTIME" -> "getRuntimeElementsConfigurationName" else -> return@getOrPut listOf(dependency) } - val targets = project.rootProject.getChildProjectByPath(dependency.projectPath)?.getTargets() ?: return@getOrPut listOf(dependency) + val dependencyProject = + if (project.rootProject.path == dependency.projectPath) + project.rootProject + else + project.rootProject.getChildProjectByPath(dependency.projectPath) + + val targets = dependencyProject?.getTargets() ?: return@getOrPut listOf(dependency) val gradleTarget = targets.firstOrNull { val getter = it.javaClass.getMethodOrNull(taskGetterName) ?: return@firstOrNull false getter(it) == artifactConfiguration diff --git a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt.181 b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt.181 index 3f0f16661ba..db5e0282f57 100644 --- a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt.181 +++ b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt.181 @@ -390,7 +390,13 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService { "RUNTIME" -> "getRuntimeElementsConfigurationName" else -> return@getOrPut listOf(dependency) } - val targets = project.rootProject.getChildProjectByPath(dependency.projectPath)?.getTargets() ?: return@getOrPut listOf(dependency) + val dependencyProject = + if (project.rootProject.path == dependency.projectPath) + project.rootProject + else + project.rootProject.getChildProjectByPath(dependency.projectPath) + + val targets = dependencyProject?.getTargets() ?: return@getOrPut listOf(dependency) val gradleTarget = targets.firstOrNull { val getter = it.javaClass.getMethodOrNull(taskGetterName) ?: return@firstOrNull false getter(it) == artifactConfiguration diff --git a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt.as31 b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt.as31 index 7703cb2e483..17c23527d87 100644 --- a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt.as31 +++ b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt.as31 @@ -384,7 +384,13 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService { "RUNTIME" -> "getRuntimeElementsConfigurationName" else -> return@getOrPut listOf(dependency) } - val targets = project.rootProject.getChildProjectByPath(dependency.projectPath)?.getTargets() ?: return@getOrPut listOf(dependency) + val dependencyProject = + if (project.rootProject.path == dependency.projectPath) + project.rootProject + else + project.rootProject.getChildProjectByPath(dependency.projectPath) + + val targets = dependencyProject?.getTargets() ?: return@getOrPut listOf(dependency) val gradleTarget = targets.firstOrNull { val getter = it.javaClass.getMethodOrNull(taskGetterName) ?: return@firstOrNull false getter(it) == artifactConfiguration diff --git a/idea/testData/gradle/newMultiplatformImport/dependencyOnRoot/build.gradle b/idea/testData/gradle/newMultiplatformImport/dependencyOnRoot/build.gradle new file mode 100644 index 00000000000..d632f537472 --- /dev/null +++ b/idea/testData/gradle/newMultiplatformImport/dependencyOnRoot/build.gradle @@ -0,0 +1,24 @@ +buildscript { + repositories { + mavenLocal() + jcenter() + } + dependencies { + classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.10' + } +} + +allprojects { + repositories { + mavenLocal() + jcenter() + } +} + +apply plugin: 'kotlin-multiplatform' + +kotlin { + targets { + fromPreset(presets.jvm, 'jvm') + } +} \ No newline at end of file diff --git a/idea/testData/gradle/newMultiplatformImport/dependencyOnRoot/settings.gradle b/idea/testData/gradle/newMultiplatformImport/dependencyOnRoot/settings.gradle new file mode 100644 index 00000000000..d04933420d6 --- /dev/null +++ b/idea/testData/gradle/newMultiplatformImport/dependencyOnRoot/settings.gradle @@ -0,0 +1 @@ +include ':subproject' \ No newline at end of file diff --git a/idea/testData/gradle/newMultiplatformImport/dependencyOnRoot/subproject/build.gradle b/idea/testData/gradle/newMultiplatformImport/dependencyOnRoot/subproject/build.gradle new file mode 100644 index 00000000000..4a8cea366a4 --- /dev/null +++ b/idea/testData/gradle/newMultiplatformImport/dependencyOnRoot/subproject/build.gradle @@ -0,0 +1,12 @@ +apply plugin: 'kotlin-multiplatform' + +kotlin { + targets { + fromPreset(presets.jvm, 'jvm') + } +} + +dependencies { + commonMainApi rootProject +} +