gradle.kts importing: add support for included builds and fix sub projects
This commit is contained in:
+7
-3
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-1
@@ -52,7 +52,9 @@ class KotlinGradleBuildScriptsDataService : AbstractProjectDataService<ProjectDa
|
||||
super.onSuccessImport(imported, projectData, project, modelsProvider)
|
||||
|
||||
val projectDataNode = imported.singleOrNull() ?: return
|
||||
val buildScripts = projectDataNode.gradleKotlinBuildScripts ?: return
|
||||
val gradleKotlinBuildScripts = projectDataNode.gradleKotlinBuildScripts
|
||||
val buildScripts = gradleKotlinBuildScripts.toList()
|
||||
gradleKotlinBuildScripts.clear()
|
||||
|
||||
val gradleSettings = ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID)
|
||||
val projectSettings = gradleSettings.getLinkedProjectSettings(projectData?.linkedExternalProjectPath ?: return) ?: return
|
||||
|
||||
+18
-3
@@ -45,9 +45,24 @@ class KotlinGradleBuildScriptsResolver : AbstractProjectResolverExtension() {
|
||||
super.populateProjectExtraModels(gradleProject, ideProject)
|
||||
|
||||
if (kotlinDslScriptsModelImportSupported(resolverCtx.projectGradleVersion)) {
|
||||
resolverCtx.getExtraProject(null, KotlinDslScriptsModel::class.java)?.let { model ->
|
||||
// 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<ProjectData>
|
||||
) {
|
||||
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))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -15,10 +15,10 @@ import org.jetbrains.kotlin.idea.util.NotNullableCopyableDataNodeUserDataPropert
|
||||
|
||||
var DataNode<out ProjectData>.gradleKotlinBuildScripts
|
||||
by NotNullableCopyableDataNodeUserDataProperty(
|
||||
Key.create<List<GradleKotlinBuildScriptData>>(
|
||||
Key.create<MutableList<GradleKotlinBuildScriptData>>(
|
||||
"GRADLE_KOTLIN_BUILD_SCRIPTS"
|
||||
),
|
||||
emptyList()
|
||||
mutableListOf()
|
||||
)
|
||||
|
||||
data class GradleKotlinBuildScriptData(
|
||||
|
||||
+19
@@ -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 ->
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
include("subProject")
|
||||
Vendored
@@ -0,0 +1,2 @@
|
||||
includeBuild("subBuild")
|
||||
include("subProject")
|
||||
+1
@@ -0,0 +1 @@
|
||||
include("subProject")
|
||||
Vendored
Reference in New Issue
Block a user