From 19baaa6a52c39ffcecb07e1cbf95af428769165c Mon Sep 17 00:00:00 2001 From: Dmitry Kichinsky Date: Tue, 11 Feb 2025 16:15:59 +0100 Subject: [PATCH] [maven] IDEA-360609 Maven 4: create subprojects instead of modules if modelVersion=4.1.0 GitOrigin-RevId: 9a621f306d0ba2ab4855b52d6ab4b98d245dc49a --- .../maven/wizards/MavenModuleBuilderHelper.kt | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenModuleBuilderHelper.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenModuleBuilderHelper.kt index 282befad3880..b38c66b7605a 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenModuleBuilderHelper.kt +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenModuleBuilderHelper.kt @@ -23,11 +23,13 @@ import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiFile import com.intellij.psi.PsiManager import com.intellij.psi.codeStyle.CodeStyleManager +import com.intellij.util.text.VersionComparatorUtil import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.jetbrains.annotations.VisibleForTesting import org.jetbrains.idea.maven.dom.MavenDomUtil +import org.jetbrains.idea.maven.dom.model.MavenDomProjectModel import org.jetbrains.idea.maven.execution.MavenRunner import org.jetbrains.idea.maven.execution.MavenRunnerParameters import org.jetbrains.idea.maven.model.MavenArchetype @@ -132,12 +134,30 @@ open class MavenModuleBuilderHelper( val model = MavenDomUtil.getMavenDomProjectModel(project, aggregatorProjectFile) if (model != null) { model.packaging.stringValue = "pom" - val module = model.modules.addModule() - module.value = getPsiFile(project, file) + val psiFile = getPsiFile(project, file) + + val useSubprojects = useSubprojects(model) + if (useSubprojects) { + val subproject = model.subprojects.addSubproject() + subproject.value = psiFile + } + else { + val module = model.modules.addModule() + module.value = psiFile + } + unblockAndSaveDocuments(project, aggregatorProjectFile) } } + private fun useSubprojects(model: MavenDomProjectModel): Boolean { + // if any subprojects exist, add subproject; if modules exist, add module; if none exist, check modelVersion + if (model.subprojects.subprojects.any()) return true + if (model.modules.modules.any()) return false + val modelVersion = model.modelVersion.value + return VersionComparatorUtil.compare(modelVersion, "4.1.0") >= 0 + } + protected fun updateProjectPom(project: Project, pom: VirtualFile) { if (myParentProject == null) return