diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinDslScriptModelProvider.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinDslScriptModelProvider.kt index 24d752d3167..adceeabdea6 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinDslScriptModelProvider.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinDslScriptModelProvider.kt @@ -19,9 +19,13 @@ class KotlinDslScriptModelProvider : ProjectImportModelProvider { buildModel: GradleBuild, consumer: ProjectImportModelProvider.BuildModelConsumer ) { - val model = controller.findModel(kotlinDslScriptModelClass) - if (model != null) { - consumer.consume(buildModel, model, kotlinDslScriptModelClass) + project.modules.forEach { module -> + if (module.gradleProject.parent == null) { + val model = controller.findModel(module.gradleProject, kotlinDslScriptModelClass) + if (model != null) { + consumer.consume(module, model, kotlinDslScriptModelClass) + } + } } } diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleBuildScriptsDataService.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleBuildScriptsDataService.kt index a273eb0be6b..0695dc140fa 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleBuildScriptsDataService.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleBuildScriptsDataService.kt @@ -52,7 +52,9 @@ class KotlinGradleBuildScriptsDataService : AbstractProjectDataService - // we need a copy to avoid memory leak, as model is java rmi proxy object - ideProject.gradleKotlinBuildScripts = copy(model) + pupulateBuildModels(gradleProject, ideProject) + + resolverCtx.models.includedBuilds.forEach { includedRoot -> + pupulateBuildModels(includedRoot, ideProject) + } + } + } + + private fun pupulateBuildModels( + root: IdeaProject, + ideProject: DataNode + ) { + root.modules.forEach { + if (it.gradleProject.parent == null) { + resolverCtx.getExtraProject(it, KotlinDslScriptsModel::class.java)?.let { model -> + // we need a copy to avoid memory leak, as model is java rmi proxy object + ideProject.gradleKotlinBuildScripts.addAll(copy(model)) + } } } } diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/buildScriptsResolverUtils.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/buildScriptsResolverUtils.kt index 208a9b83409..c66165a47d6 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/buildScriptsResolverUtils.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/buildScriptsResolverUtils.kt @@ -15,10 +15,10 @@ import org.jetbrains.kotlin.idea.util.NotNullableCopyableDataNodeUserDataPropert var DataNode.gradleKotlinBuildScripts by NotNullableCopyableDataNodeUserDataProperty( - Key.create>( + Key.create>( "GRADLE_KOTLIN_BUILD_SCRIPTS" ), - emptyList() + mutableListOf() ) data class GradleKotlinBuildScriptData( diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleKtsImportTest.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleKtsImportTest.kt index d969db3f204..c7d7e235913 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleKtsImportTest.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleKtsImportTest.kt @@ -37,6 +37,25 @@ class GradleKtsImportTest : GradleImportingTestCase() { checkConfiguration("build.gradle.kts") } + @Test + @TargetVersions("6.0.1+") + fun testCompositeBuild() { + configureByFiles() + importProject() + + checkConfiguration( + "settings.gradle.kts", + "build.gradle.kts", + "subProject/build.gradle.kts", + "subBuild/settings.gradle.kts", + "subBuild/build.gradle.kts", + "subBuild/subProject/build.gradle.kts", + "buildSrc/settings.gradle.kts", + "buildSrc/build.gradle.kts", + "buildSrc/subProject/build.gradle.kts" + ) + } + private fun checkConfiguration(vararg files: String) { val scripts = files.map { KtsFixture(it).also { kts -> diff --git a/idea/testData/gradle/gradleKtsImportTest/compositeBuild/build.gradle.kts b/idea/testData/gradle/gradleKtsImportTest/compositeBuild/build.gradle.kts new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/testData/gradle/gradleKtsImportTest/compositeBuild/buildSrc/build.gradle.kts b/idea/testData/gradle/gradleKtsImportTest/compositeBuild/buildSrc/build.gradle.kts new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/testData/gradle/gradleKtsImportTest/compositeBuild/buildSrc/settings.gradle.kts b/idea/testData/gradle/gradleKtsImportTest/compositeBuild/buildSrc/settings.gradle.kts new file mode 100644 index 00000000000..698fa944c74 --- /dev/null +++ b/idea/testData/gradle/gradleKtsImportTest/compositeBuild/buildSrc/settings.gradle.kts @@ -0,0 +1 @@ +include("subProject") \ No newline at end of file diff --git a/idea/testData/gradle/gradleKtsImportTest/compositeBuild/buildSrc/subProject/build.gradle.kts b/idea/testData/gradle/gradleKtsImportTest/compositeBuild/buildSrc/subProject/build.gradle.kts new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/testData/gradle/gradleKtsImportTest/compositeBuild/settings.gradle.kts b/idea/testData/gradle/gradleKtsImportTest/compositeBuild/settings.gradle.kts new file mode 100644 index 00000000000..ab3aef1d9e4 --- /dev/null +++ b/idea/testData/gradle/gradleKtsImportTest/compositeBuild/settings.gradle.kts @@ -0,0 +1,2 @@ +includeBuild("subBuild") +include("subProject") \ No newline at end of file diff --git a/idea/testData/gradle/gradleKtsImportTest/compositeBuild/subBuild/build.gradle.kts b/idea/testData/gradle/gradleKtsImportTest/compositeBuild/subBuild/build.gradle.kts new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/testData/gradle/gradleKtsImportTest/compositeBuild/subBuild/settings.gradle.kts b/idea/testData/gradle/gradleKtsImportTest/compositeBuild/subBuild/settings.gradle.kts new file mode 100644 index 00000000000..698fa944c74 --- /dev/null +++ b/idea/testData/gradle/gradleKtsImportTest/compositeBuild/subBuild/settings.gradle.kts @@ -0,0 +1 @@ +include("subProject") \ No newline at end of file diff --git a/idea/testData/gradle/gradleKtsImportTest/compositeBuild/subBuild/subProject/build.gradle.kts b/idea/testData/gradle/gradleKtsImportTest/compositeBuild/subBuild/subProject/build.gradle.kts new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/testData/gradle/gradleKtsImportTest/compositeBuild/subProject/build.gradle.kts b/idea/testData/gradle/gradleKtsImportTest/compositeBuild/subProject/build.gradle.kts new file mode 100644 index 00000000000..e69de29bb2d