From f8813bbf83a22db4eea14ea0fe388d163c8a5b6a Mon Sep 17 00:00:00 2001 From: Dmitry Kichinsky Date: Sat, 18 Jan 2025 00:31:02 +0100 Subject: [PATCH] [maven] IDEA-255308 introduce MavenProjectModifications GitOrigin-RevId: 3acaacc9d422264e4e05143dff6a407b2a62ae44 --- .../MavenAnnotationProcessorConfigurator.kt | 4 +- .../maven/importing/MavenConfigurators.kt | 5 +- .../maven/importing/MavenProjectImporter.kt | 46 ++++++++++--------- .../importing/MavenProjectImporterUtil.kt | 9 ++-- .../tree/MavenProjectImportContextProvider.kt | 12 ++--- .../importing/tree/MavenProjectImportData.kt | 6 +-- .../StaticWorkspaceProjectImporter.kt | 4 +- .../WorkspaceProjectImporter.kt | 30 ++++++------ .../idea/maven/project/MavenFolderResolver.kt | 31 +++++-------- .../maven/project/MavenProjectChangesBase.kt | 23 ---------- .../project/MavenProjectModifications.kt | 5 ++ .../maven/project/MavenProjectsManagerEx.kt | 18 +++++--- .../preimport/MavenProjectStaticImporter.kt | 6 +-- 13 files changed, 91 insertions(+), 108 deletions(-) delete mode 100644 plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectChangesBase.kt create mode 100644 plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectModifications.kt diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenAnnotationProcessorConfigurator.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenAnnotationProcessorConfigurator.kt index 06b15cdc53ce..f5c899c284e2 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenAnnotationProcessorConfigurator.kt +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenAnnotationProcessorConfigurator.kt @@ -65,7 +65,7 @@ class MavenAnnotationProcessorConfigurator : MavenApplicableConfigurator(PLUGIN_ mavenProjectToModuleNamesCache[each.mavenProject.mavenId] = moduleNames } - val changedOnlyProjects = context.mavenProjectsWithModules.mapNotNull { if (it.changes.hasChanges()) it.mavenProject else null } + val changedOnlyProjects = context.mavenProjectsWithModules.mapNotNull { if (it.hasChanges) it.mavenProject else null } val map = HashMap>() collectProcessorModuleNames(changedOnlyProjects.asIterable(), @@ -114,7 +114,7 @@ class MavenAnnotationProcessorConfigurator : MavenApplicableConfigurator(PLUGIN_ val perProjectProcessorModuleNames: Map> = ANNOTATION_PROCESSOR_MODULE_NAMES[context, java.util.Map.of()] - val changedOnly = context.mavenProjectsWithModules.filter { it: MavenProjectWithModules -> it.changes.hasChanges() } + val changedOnly = context.mavenProjectsWithModules.filter { it: MavenProjectWithModules -> it.hasChanges } val projectWithModules = changedOnly.map { it: MavenProjectWithModules -> val processorModuleNames = perProjectProcessorModuleNames.getOrDefault(it.mavenProject, listOf()) MavenProjectWithProcessorModules(it.mavenProject, it.modules, processorModuleNames) diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenConfigurators.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenConfigurators.kt index 3ada0ed08565..aa2a3f2cb57b 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenConfigurators.kt +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenConfigurators.kt @@ -17,7 +17,6 @@ import org.jdom.Element import org.jetbrains.annotations.ApiStatus import org.jetbrains.annotations.NonNls import org.jetbrains.idea.maven.project.MavenProject -import org.jetbrains.idea.maven.project.MavenProjectChangesBase import org.jetbrains.idea.maven.project.MavenProjectsTree import org.jetbrains.idea.maven.utils.MavenJDOMUtil.findChildByPath import org.jetbrains.idea.maven.utils.MavenJDOMUtil.findChildValueByPath @@ -121,7 +120,7 @@ interface MavenWorkspaceConfigurator { */ interface MavenProjectWithModules { val mavenProject: MavenProject - val changes: MavenProjectChangesBase + val hasChanges: Boolean val modules: List> } @@ -194,7 +193,7 @@ open class MavenApplicableConfigurator(private val pluginGroupId: String, privat } fun MavenWorkspaceConfigurator.MavenProjectWithModules.hasChanges(): Boolean { - return this.changes.hasChanges() + return this.hasChanges } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenProjectImporter.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenProjectImporter.kt index 73984a382bdb..addaf7b87597 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenProjectImporter.kt +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenProjectImporter.kt @@ -22,27 +22,29 @@ interface MavenProjectImporter { fun createdModules(): List companion object { - @JvmStatic - fun createStaticImporter(project: Project, - projectsTree: MavenProjectsTree, - projectsToImportWithChanges: Map, - modelsProvider: IdeModifiableModelsProvider, - importingSettings: MavenImportingSettings, - parentImportingActivity: StructuredIdeActivity): MavenProjectImporter { + internal fun createStaticImporter( + project: Project, + projectsTree: MavenProjectsTree, + projectsToImportWithChanges: Map, + modelsProvider: IdeModifiableModelsProvider, + importingSettings: MavenImportingSettings, + parentImportingActivity: StructuredIdeActivity, + ): MavenProjectImporter { val importer = StaticWorkspaceProjectImporter(projectsTree, projectsToImportWithChanges, importingSettings, modelsProvider, project) return wrapWithFUS(project, parentImportingActivity, importer) } - @JvmStatic - fun createImporter(project: Project, - projectsTree: MavenProjectsTree, - projectsToImportWithChanges: Map, - modelsProvider: IdeModifiableModelsProvider, - importingSettings: MavenImportingSettings, - previewModule: Module?, - parentImportingActivity: StructuredIdeActivity): MavenProjectImporter { + internal fun createImporter( + project: Project, + projectsTree: MavenProjectsTree, + projectsToImportWithChanges: Map, + modelsProvider: IdeModifiableModelsProvider, + importingSettings: MavenImportingSettings, + previewModule: Module?, + parentImportingActivity: StructuredIdeActivity, + ): MavenProjectImporter { val importer = createImporter(project, projectsTree, projectsToImportWithChanges, modelsProvider, importingSettings, previewModule) return wrapWithFUS(project, parentImportingActivity, importer) @@ -107,12 +109,14 @@ interface MavenProjectImporter { } } - private fun createImporter(project: Project, - projectsTree: MavenProjectsTree, - projectsToImportWithChanges: Map, - modelsProvider: IdeModifiableModelsProvider, - importingSettings: MavenImportingSettings, - previewModule: Module?): MavenProjectImporter { + private fun createImporter( + project: Project, + projectsTree: MavenProjectsTree, + projectsToImportWithChanges: Map, + modelsProvider: IdeModifiableModelsProvider, + importingSettings: MavenImportingSettings, + previewModule: Module?, + ): MavenProjectImporter { return WorkspaceProjectImporter(projectsTree, projectsToImportWithChanges, importingSettings, modelsProvider, project) } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenProjectImporterUtil.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenProjectImporterUtil.kt index b24401c05a87..97837d259cc1 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenProjectImporterUtil.kt +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenProjectImporterUtil.kt @@ -12,7 +12,10 @@ import com.intellij.openapi.roots.DependencyScope import com.intellij.openapi.roots.ex.ProjectRootManagerEx import org.jetbrains.idea.maven.importing.MavenProjectImporterUtil.LegacyExtensionImporter.CountAndTime import org.jetbrains.idea.maven.model.MavenConstants -import org.jetbrains.idea.maven.project.* +import org.jetbrains.idea.maven.project.MavenProject +import org.jetbrains.idea.maven.project.MavenProjectChanges +import org.jetbrains.idea.maven.project.MavenProjectsProcessorTask +import org.jetbrains.idea.maven.project.MavenProjectsTree import org.jetbrains.idea.maven.statistics.MavenImportCollector import org.jetbrains.idea.maven.utils.MavenLog import org.jetbrains.idea.maven.utils.MavenUtil @@ -172,12 +175,12 @@ internal object MavenProjectImporterUtil { module: Module, moduleType: StandardMavenModuleType, mavenTree: MavenProjectsTree, - changesBase: MavenProjectChangesBase, + hasChanges: Boolean, mavenProjectToModuleName: Map, mavenImporters: List): LegacyExtensionImporter? { if (moduleType === StandardMavenModuleType.COMPOUND_MODULE) return null var suitableImporters = mavenImporters - val changes = if (changesBase.hasChanges()) MavenProjectChanges.ALL else MavenProjectChanges.NONE + val changes = if (hasChanges) MavenProjectChanges.ALL else MavenProjectChanges.NONE return if (suitableImporters.isEmpty()) null else LegacyExtensionImporter(module, mavenTree, mavenProject, changes, mavenProjectToModuleName, suitableImporters) } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/tree/MavenProjectImportContextProvider.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/tree/MavenProjectImportContextProvider.kt index dd7c674e414b..217c626b13a5 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/tree/MavenProjectImportContextProvider.kt +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/tree/MavenProjectImportContextProvider.kt @@ -30,7 +30,7 @@ import org.jetbrains.idea.maven.model.MavenArtifact import org.jetbrains.idea.maven.model.MavenConstants import org.jetbrains.idea.maven.model.MavenId import org.jetbrains.idea.maven.project.MavenProject -import org.jetbrains.idea.maven.project.MavenProjectChangesBase +import org.jetbrains.idea.maven.project.MavenProjectModifications import org.jetbrains.idea.maven.project.MavenProjectsTree import org.jetbrains.idea.maven.project.SupportedRequestType import org.jetbrains.idea.maven.utils.MavenLog @@ -47,12 +47,12 @@ internal class MavenProjectImportContextProvider( private val myMavenProjectToModuleName: Map, ) { - fun getAllModules(projectsWithChanges: Map): List { + fun getAllModules(projectsWithChanges: Map): List { val importDataContext = getModuleImportDataContext(projectsWithChanges) return getFlattenModuleDataDependencyContext(importDataContext) } - private fun getModuleImportDataContext(projectsToImportWithChanges: Map): ModuleImportDataContext { + private fun getModuleImportDataContext(projectsToImportWithChanges: Map): ModuleImportDataContext { val allModules: MutableList = ArrayList() val moduleImportDataByMavenId: MutableMap = TreeMap( Comparator.comparing(Function { obj: MavenId? -> obj!!.getKey() })) @@ -308,7 +308,7 @@ internal class MavenProjectImportContextProvider( private fun getModuleImportDataSingle( project: MavenProject, moduleName: String, - changes: MavenProjectChangesBase, + changes: MavenProjectModifications, languageLevels: LanguageLevels, ): MavenProjectImportData { val type = if (project.isAggregator) { @@ -327,7 +327,7 @@ internal class MavenProjectImportContextProvider( private fun getModuleImportDataCompound( project: MavenProject, moduleName: String, - changes: MavenProjectChangesBase, + changes: MavenProjectModifications, languageLevels: LanguageLevels, ): MavenProjectImportData { val type = StandardMavenModuleType.COMPOUND_MODULE @@ -351,7 +351,7 @@ internal class MavenProjectImportContextProvider( return MavenProjectImportData(project, moduleData, changes, otherModules) } - private fun getModuleImportData(project: MavenProject, moduleName: String, changes: MavenProjectChangesBase): MavenProjectImportData { + private fun getModuleImportData(project: MavenProject, moduleName: String, changes: MavenProjectModifications): MavenProjectImportData { val languageLevels = getLanguageLevels(project) val needCreateCompoundModule = needCreateCompoundModule(project, languageLevels) diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/tree/MavenProjectImportData.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/tree/MavenProjectImportData.kt index 20abdb64ff65..4dd731e47234 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/tree/MavenProjectImportData.kt +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/tree/MavenProjectImportData.kt @@ -5,7 +5,7 @@ import com.intellij.pom.java.LanguageLevel import org.jetbrains.idea.maven.importing.StandardMavenModuleType import org.jetbrains.idea.maven.importing.tree.dependency.MavenImportDependency import org.jetbrains.idea.maven.project.MavenProject -import org.jetbrains.idea.maven.project.MavenProjectChangesBase +import org.jetbrains.idea.maven.project.MavenProjectModifications internal class ModuleData( val moduleName: String, @@ -48,13 +48,13 @@ internal open class MavenTreeModuleImportData( mavenProject: MavenProject, moduleData: ModuleData, val dependencies: List>, - val changes: MavenProjectChangesBase, + val changes: MavenProjectModifications, ) : MavenModuleImportData(mavenProject, moduleData) internal class MavenProjectImportData( val mavenProject: MavenProject, val moduleData: ModuleData, - val changes: MavenProjectChangesBase, + val changes: MavenProjectModifications, val otherModules: List, ) { diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/workspaceModel/StaticWorkspaceProjectImporter.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/workspaceModel/StaticWorkspaceProjectImporter.kt index b8e860fcf563..f5e57818946a 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/workspaceModel/StaticWorkspaceProjectImporter.kt +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/workspaceModel/StaticWorkspaceProjectImporter.kt @@ -14,7 +14,7 @@ import org.jetbrains.idea.maven.project.* internal class StaticWorkspaceProjectImporter( projectsTree: MavenProjectsTree, - projectsToImportWithChanges: Map, + projectsToImportWithChanges: Map, importingSettings: MavenImportingSettings, modifiableModelsProvider: IdeModifiableModelsProvider, project: Project @@ -43,7 +43,7 @@ internal class StaticWorkspaceProjectImporter( moduleWithType.module, moduleWithType.type, myProjectsTree, - projectWithModules.changes, + projectWithModules.hasChanges, moduleNameByProject, importers) } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/workspaceModel/WorkspaceProjectImporter.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/workspaceModel/WorkspaceProjectImporter.kt index 401f0b0ed10d..bdf4da21f771 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/workspaceModel/WorkspaceProjectImporter.kt +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/workspaceModel/WorkspaceProjectImporter.kt @@ -59,7 +59,7 @@ var WORKSPACE_IMPORTER_SKIP_FAST_APPLY_ATTEMPTS_ONCE: Boolean = false internal open class WorkspaceProjectImporter( protected val myProjectsTree: MavenProjectsTree, - protected val projectsToImportWithChanges: Map, + protected val projectsToImportWithChanges: Map, protected val myImportingSettings: MavenImportingSettings, protected val myModifiableModelsProvider: IdeModifiableModelsProvider, protected val myProject: Project, @@ -157,19 +157,19 @@ internal open class WorkspaceProjectImporter( return migratedToExternalStorage } - private data class ProjectChangesInfo(val hasChanges: Boolean, val allProjectsToChanges: Map) { + private data class ProjectChangesInfo(val hasChanges: Boolean, val allProjectsToChanges: Map) { val projectFilePaths: List get() = allProjectsToChanges.keys.map { it.path } val changedProjectsOnly: Iterable get() = allProjectsToChanges .asSequence() - .filter { (_, changes) -> changes.hasChanges() } + .filter { (_, changes) -> changes == MavenProjectModifications.ALL } .map { (mavenProject, _) -> mavenProject } .asIterable() } private fun collectProjectChanges( storageBeforeImport: EntityStorage, - originalProjectsChanges: Map, + originalProjectsChanges: Map, migratedToExternalStorage: Boolean, ): ProjectChangesInfo { val mavenProjectsTreeSettingsEntity = storageBeforeImport.entities(MavenProjectsTreeSettingsEntity::class.java).firstOrNull() @@ -182,17 +182,17 @@ internal open class WorkspaceProjectImporter( // if it was ignored, module dependencies should be replaced with library dependencies and vice versa val projectsChanged = !sameProjects(projectFilesFromPreviousImport, allProjects) - val allProjectsToChanges: Map = allProjects.associateWith { + val allProjectsToChanges: Map = allProjects.associateWith { if (projectsChanged) { - MavenProjectChangesBase.ALL + MavenProjectModifications.ALL } else { val newProjectToImport = it.path !in projectFilesFromPreviousImport - if (newProjectToImport) MavenProjectChangesBase.ALL else originalProjectsChanges.getOrDefault(it, MavenProjectChangesBase.NONE) + if (newProjectToImport) MavenProjectModifications.ALL else originalProjectsChanges.getOrDefault(it, MavenProjectModifications.NONE) } } - val hasChanges = allProjectsToChanges.values.any { it.hasChanges() } || migratedToExternalStorage + val hasChanges = allProjectsToChanges.values.any { it == MavenProjectModifications.ALL } || migratedToExternalStorage return ProjectChangesInfo(hasChanges, allProjectsToChanges) } @@ -226,7 +226,7 @@ internal open class WorkspaceProjectImporter( private fun buildModuleNameMap( externalSystemModuleEntities: Sequence, - projectToImport: Map, + projectToImport: Map, ): Map { return MavenModuleNameMapper.mapModuleNames(myProjectsTree, projectToImport.keys, getExistingModuleNames(externalSystemModuleEntities)) } @@ -234,7 +234,7 @@ internal open class WorkspaceProjectImporter( private fun importModules( storageBeforeImport: EntityStorage, builder: MutableEntityStorage, - projectsToImport: Map, + projectsToImport: Map, mavenProjectToModuleName: Map, contextData: UserDataHolderBase, stats: WorkspaceImportStats, @@ -246,7 +246,7 @@ internal open class WorkspaceProjectImporter( val folderImportingContext = WorkspaceFolderImporter.FolderImportingContext() class PartialModulesData( - val changes: MavenProjectChangesBase, + val changes: MavenProjectModifications, val modules: MutableList>, ) @@ -274,7 +274,7 @@ internal open class WorkspaceProjectImporter( } val result = projectToModulesData.map { (mavenProject, partialData) -> - MavenProjectWithModulesData(mavenProject, partialData.changes, partialData.modules) + MavenProjectWithModulesData(mavenProject, partialData.changes == MavenProjectModifications.ALL, partialData.modules) } tracer.spanBuilder("configureModules").use { configureModules(result, builder, contextData, stats) } @@ -438,7 +438,7 @@ internal open class WorkspaceProjectImporter( } if (appliedModules.isNotEmpty()) { - result.add(MavenProjectWithModulesData(each.mavenProject, each.changes, appliedModules)) + result.add(MavenProjectWithModulesData(each.mavenProject, each.hasChanges, appliedModules)) } } @@ -534,7 +534,7 @@ internal open class WorkspaceProjectImporter( moduleWithType.module, moduleWithType.type, myProjectsTree, - projectWithModules.changes, + projectWithModules.hasChanges, moduleNameByProject, importers) } @@ -752,6 +752,6 @@ internal class ModuleWithTypeData( internal class MavenProjectWithModulesData( override val mavenProject: MavenProject, - override val changes: MavenProjectChangesBase, + override val hasChanges: Boolean, override val modules: List>, ) : MavenWorkspaceConfigurator.MavenProjectWithModules diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenFolderResolver.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenFolderResolver.kt index 66b97174d6c8..ca77606a0f6c 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenFolderResolver.kt +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenFolderResolver.kt @@ -32,9 +32,7 @@ class MavenFolderResolver(private val project: Project) { } private suspend fun doResolveFoldersAndImport(projects: Collection, progressReporter: RawProgressReporter) { - - val allProjectsWithChanges = resolveFolders(projects, progressReporter) - val projectsToImportWithChanges = allProjectsWithChanges.filter { !it.key.hasReadingErrors() && it.value.hasChanges() } + resolveFolders(projects, progressReporter) //actually a fix for https://youtrack.jetbrains.com/issue/IDEA-286455 to be rewritten, see IDEA-294209 MavenUtil.restartMavenConnectors(project, false) { c: MavenServerConnector -> @@ -44,38 +42,34 @@ class MavenFolderResolver(private val project: Project) { false } - if (!projectsToImportWithChanges.isEmpty()) { - projectsManager.importMavenProjects(projectsToImportWithChanges) - } + projectsManager.importMavenProjects(projects) } - private suspend fun resolveFolders(mavenProjects: Collection, - progressReporter: RawProgressReporter): Map { + private suspend fun resolveFolders(mavenProjects: Collection, progressReporter: RawProgressReporter) { val console = MavenSourceGenerationConsole(project) try { console.start() val tree = projectsManager.projectsTree val mavenProjectsToResolve = collectMavenProjectsToResolve(mavenProjects, tree) val projectMultiMap = MavenUtil.groupByBasedir(mavenProjectsToResolve, tree) - val projectsWithChanges = mutableMapOf() for ((baseDir, mavenProjectsForBaseDir) in projectMultiMap.entrySet()) { console.startSourceGeneration(baseDir) - val chunk = resolveFolders(baseDir, mavenProjectsForBaseDir, tree, progressReporter, console) - projectsWithChanges.putAll(chunk) + resolveFolders(baseDir, mavenProjectsForBaseDir, tree, progressReporter, console) console.finishSourceGeneration(baseDir) } - return projectsWithChanges } finally { console.finish() } } - private suspend fun resolveFolders(baseDir: String, - mavenProjects: Collection, - tree: MavenProjectsTree, - progressReporter: RawProgressReporter, - console: MavenSourceGenerationConsole): Map { + private suspend fun resolveFolders( + baseDir: String, + mavenProjects: Collection, + tree: MavenProjectsTree, + progressReporter: RawProgressReporter, + console: MavenSourceGenerationConsole, + ) { val goal = projectsManager.importingSettings.updateFoldersOnImportPhase val fileToProject = mavenProjects.associateBy({ File(it.file.path) }, { it }) @@ -100,16 +94,13 @@ class MavenFolderResolver(private val project: Project) { projectsManager.embeddersManager.release(embedder) } - val projectsWithChanges = mutableMapOf() for (goalResult in goalResults) { val mavenProject = fileToProject.getOrDefault(goalResult.file, null) if (null != mavenProject && MavenUtil.shouldResetDependenciesAndFolders(goalResult.problems)) { val changes = mavenProject.setFolders(goalResult.folders) - projectsWithChanges[mavenProject] = if (changes.hasChanges()) MavenProjectChangesBase.ALL else MavenProjectChangesBase.NONE tree.fireFoldersResolved(Pair.create(mavenProject, changes)) } } - return projectsWithChanges } private fun collectMavenProjectsToResolve(mavenProjects: Collection, tree: MavenProjectsTree): Collection { diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectChangesBase.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectChangesBase.kt deleted file mode 100644 index a5be5d2527c6..000000000000 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectChangesBase.kt +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package org.jetbrains.idea.maven.project - -import org.jetbrains.annotations.ApiStatus - -@ApiStatus.Internal -interface MavenProjectChangesBase { - @ApiStatus.Internal - object ALL : MavenProjectChangesBase { - override fun hasChanges(): Boolean { - return true - } - } - - @ApiStatus.Internal - object NONE : MavenProjectChangesBase { - override fun hasChanges(): Boolean { - return false - } - } - - fun hasChanges(): Boolean -} diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectModifications.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectModifications.kt new file mode 100644 index 000000000000..f4788c7f857b --- /dev/null +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectModifications.kt @@ -0,0 +1,5 @@ +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package org.jetbrains.idea.maven.project + +internal enum class MavenProjectModifications { ALL, NONE } + diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManagerEx.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManagerEx.kt index d2728dd4dcb7..5dfff53befaf 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManagerEx.kt +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManagerEx.kt @@ -85,7 +85,7 @@ interface MavenAsyncProjectsManager { filesToDelete: List) @ApiStatus.Internal - suspend fun importMavenProjects(projectsToImport: Map) + suspend fun importMavenProjects(projectsToImport: Collection) suspend fun downloadArtifacts(projects: Collection, artifacts: Collection?, @@ -120,13 +120,17 @@ open class MavenProjectsManagerEx(project: Project, private val cs: CoroutineSco return updateAllMavenProjects(MavenSyncSpec.incremental("MavenProjectsManagerEx.addManagedFilesWithProfilesAndUpdate"), modelsProvider) } - override suspend fun importMavenProjects(projectsToImport: Map) { + override suspend fun importMavenProjects(projects: Collection) { + importMavenProjects(projects.associate { it to MavenProjectModifications.ALL }) + } + + private suspend fun importMavenProjects(projectsToImport: Map) { reapplyModelStructureOnly { importMavenProjects(projectsToImport, null, it) } } - private suspend fun importMavenProjects(projectsToImport: Map, + private suspend fun importMavenProjects(projectsToImport: Map, modelsProvider: IdeModifiableModelsProvider?, parentActivity: StructuredIdeActivity): List { return tracer.spanBuilder("importMavenProjects").useWithScope { @@ -137,7 +141,7 @@ open class MavenProjectsManagerEx(project: Project, private val cs: CoroutineSco } @RequiresBackgroundThread - private suspend fun doImportMavenProjects(projectsToImport: Map, + private suspend fun doImportMavenProjects(projectsToImport: Map, optionalModelsProvider: IdeModifiableModelsProvider?, parentActivity: StructuredIdeActivity): List { if (projectsToImport.any { it.key == null }) { @@ -185,7 +189,7 @@ open class MavenProjectsManagerEx(project: Project, private val cs: CoroutineSco return importResult.createdModules } - private fun runImportProjectActivity(projectsToImport: Map, + private fun runImportProjectActivity(projectsToImport: Map, modelsProvider: IdeModifiableModelsProvider, parentActivity: StructuredIdeActivity): ImportResult { val projectImporter = MavenProjectImporter.createImporter( @@ -214,7 +218,7 @@ open class MavenProjectsManagerEx(project: Project, private val cs: CoroutineSco private data class ImportResult(val createdModules: List, val postTasks: List) private suspend fun importAllProjects() { - val projectsToImport = projectsTree.projects.associateBy({ it }, { MavenProjectChangesBase.ALL }) + val projectsToImport = projectsTree.projects.associateBy({ it }, { MavenProjectModifications.ALL }) importMavenProjects(projectsToImport) } @@ -438,7 +442,7 @@ open class MavenProjectsManagerEx(project: Project, private val cs: CoroutineSco val projectsToImport = resolutionResult.mavenProjectMap.entries .flatMap { it.value } - .associateBy({ it }, { MavenProjectChangesBase.ALL }) + .associateBy({ it }, { MavenProjectModifications.ALL }) // plugins and artifacts can be resolved in parallel with import return coroutineScope { diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/preimport/MavenProjectStaticImporter.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/preimport/MavenProjectStaticImporter.kt index 8ebe3aa1075a..c2ef64a3147e 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/preimport/MavenProjectStaticImporter.kt +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/preimport/MavenProjectStaticImporter.kt @@ -75,7 +75,7 @@ class MavenProjectStaticImporter(val project: Project, val coroutineScope: Corou val mavenProjectMappings = HashMap>() val allProjects = forest.flatMap { it.projects() }.toList() visitor.map(allProjects) - val projectChanges = HashMap() + val projectChanges = HashMap() val existingTree = if (!commit) null else MavenProjectsManager.getInstance(project).let { if (it.isMavenizedProject) it.projectsTree else null } forest.forEach { tree -> @@ -83,11 +83,11 @@ class MavenProjectStaticImporter(val project: Project, val coroutineScope: Corou tree.root?.let(roots::add) if (existingTree == null || reimportExistingFiles) { - projectChanges.putAll(tree.projects().associateWith { MavenProjectChangesBase.ALL }) + projectChanges.putAll(tree.projects().associateWith { MavenProjectModifications.ALL }) } else { projectChanges.putAll( - tree.projects().filter { existingTree.findProject(it.file) == null }.associateWith { MavenProjectChangesBase.ALL }) + tree.projects().filter { existingTree.findProject(it.file) == null }.associateWith { MavenProjectModifications.ALL }) } }