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,
|
buildModel: GradleBuild,
|
||||||
consumer: ProjectImportModelProvider.BuildModelConsumer
|
consumer: ProjectImportModelProvider.BuildModelConsumer
|
||||||
) {
|
) {
|
||||||
val model = controller.findModel(kotlinDslScriptModelClass)
|
project.modules.forEach { module ->
|
||||||
if (model != null) {
|
if (module.gradleProject.parent == null) {
|
||||||
consumer.consume(buildModel, model, kotlinDslScriptModelClass)
|
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)
|
super.onSuccessImport(imported, projectData, project, modelsProvider)
|
||||||
|
|
||||||
val projectDataNode = imported.singleOrNull() ?: return
|
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 gradleSettings = ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID)
|
||||||
val projectSettings = gradleSettings.getLinkedProjectSettings(projectData?.linkedExternalProjectPath ?: return) ?: return
|
val projectSettings = gradleSettings.getLinkedProjectSettings(projectData?.linkedExternalProjectPath ?: return) ?: return
|
||||||
|
|||||||
+18
-3
@@ -45,9 +45,24 @@ class KotlinGradleBuildScriptsResolver : AbstractProjectResolverExtension() {
|
|||||||
super.populateProjectExtraModels(gradleProject, ideProject)
|
super.populateProjectExtraModels(gradleProject, ideProject)
|
||||||
|
|
||||||
if (kotlinDslScriptsModelImportSupported(resolverCtx.projectGradleVersion)) {
|
if (kotlinDslScriptsModelImportSupported(resolverCtx.projectGradleVersion)) {
|
||||||
resolverCtx.getExtraProject(null, KotlinDslScriptsModel::class.java)?.let { model ->
|
pupulateBuildModels(gradleProject, ideProject)
|
||||||
// we need a copy to avoid memory leak, as model is java rmi proxy object
|
|
||||||
ideProject.gradleKotlinBuildScripts = copy(model)
|
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
|
var DataNode<out ProjectData>.gradleKotlinBuildScripts
|
||||||
by NotNullableCopyableDataNodeUserDataProperty(
|
by NotNullableCopyableDataNodeUserDataProperty(
|
||||||
Key.create<List<GradleKotlinBuildScriptData>>(
|
Key.create<MutableList<GradleKotlinBuildScriptData>>(
|
||||||
"GRADLE_KOTLIN_BUILD_SCRIPTS"
|
"GRADLE_KOTLIN_BUILD_SCRIPTS"
|
||||||
),
|
),
|
||||||
emptyList()
|
mutableListOf()
|
||||||
)
|
)
|
||||||
|
|
||||||
data class GradleKotlinBuildScriptData(
|
data class GradleKotlinBuildScriptData(
|
||||||
|
|||||||
+19
@@ -37,6 +37,25 @@ class GradleKtsImportTest : GradleImportingTestCase() {
|
|||||||
checkConfiguration("build.gradle.kts")
|
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) {
|
private fun checkConfiguration(vararg files: String) {
|
||||||
val scripts = files.map {
|
val scripts = files.map {
|
||||||
KtsFixture(it).also { kts ->
|
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