[maven][IDEA-330932] fixes for dummy import

GitOrigin-RevId: 627b1c8b288550a580047a9d4ece826c94a6959f
This commit is contained in:
Alexander Bubenchikov
2023-12-19 12:55:30 +00:00
committed by intellij-monorepo-bot
parent 65fb7c7df6
commit 7a7b2f2cac
7 changed files with 76 additions and 18 deletions
@@ -310,14 +310,21 @@ open class MavenProjectsManagerEx(project: Project) : MavenProjectsManager(proje
console.startImport(spec)
if (MavenUtil.enablePreimport()) {
val result = console.runTask(MavenProjectBundle.message("maven.project.preimporting")) {
return@runTask MavenProjectPreImporter.getInstance(myProject).preimport(
projectsTree.rootProjectsFiles, modelsProvider, importingSettings, generalSettings, syncActivity)
return@runTask MavenProjectPreImporter.getInstance(myProject)
.preimport(
projectsTree.existingManagedFiles,
modelsProvider,
importingSettings,
generalSettings,
!project.isTrusted(),
syncActivity)
}
if (MavenUtil.enablePreimportOnly()) return result
if (MavenUtil.enablePreimportOnly()) return result.modules
if (!project.isTrusted()) {
projectsTree.updater().copyFrom(result.projectTree)
showUntrustedProjectNotification(myProject)
return result
return result.modules
}
}
val readingResult = readMavenProjectsActivity(syncActivity) { read() }
@@ -375,7 +375,9 @@ class MavenProjectsTree(val project: Project) {
}
@ApiStatus.Internal
suspend fun updateAll(force: Boolean, generalSettings: MavenGeneralSettings, progressReporter: RawProgressReporter): MavenProjectsTreeUpdateResult {
suspend fun updateAll(force: Boolean,
generalSettings: MavenGeneralSettings,
progressReporter: RawProgressReporter): MavenProjectsTreeUpdateResult {
val managedFiles = existingManagedFiles
val explicitProfiles = explicitProfiles
@@ -1069,6 +1071,41 @@ class MavenProjectsTree(val project: Project) {
})
return this
}
fun copyFrom(projectTree: MavenProjectsTree): Updater {
addFrom(projectTree) { it.myManagedFilesPaths }
addFrom(projectTree) { it.myRootProjects }
addFromMap(projectTree) { it.myMavenIdToProjectMapping }
addFromMap(projectTree) { it.myVirtualFileToProjectMapping }
addFromMap(projectTree) { it.myAggregatorToModuleMapping }
addFromMap(projectTree) { it.myModuleToAggregatorMapping }
return this
}
private fun <T> addFrom(projectTree: MavenProjectsTree, getter: (MavenProjectsTree) -> MutableCollection<T>) {
val my = getter(this@MavenProjectsTree)
val theirs = getter(projectTree)
if (my.isEmpty()) {
my.addAll(theirs)
}
else {
val set = LinkedHashSet<T>()
set.addAll(my)
set.addAll(theirs)
my.clear()
my.addAll(set.toList())
}
}
private fun <K, V> addFromMap(projectTree: MavenProjectsTree, getter: (MavenProjectsTree) -> MutableMap<K, V>) {
val my = getter(this@MavenProjectsTree)
val theirs = getter(projectTree)
my.putAll(theirs)
}
}
companion object {
@@ -2,6 +2,7 @@
package org.jetbrains.idea.maven.project.actions;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.externalSystem.service.project.trusted.ExternalSystemTrustedProjectDialog;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.idea.maven.project.MavenProjectsManager;
@@ -14,11 +15,11 @@ public class ReimportAction extends MavenProjectsManagerAction {
return MavenActionUtil.hasProject(e.getDataContext());
}
@SuppressWarnings("deprecation")
@Override
protected void perform(@NotNull MavenProjectsManager manager) {
if (MavenUtil.isProjectTrustedEnoughToImport(manager.getProject())) {
FileDocumentManager.getInstance().saveAllDocuments();
manager.forceUpdateAllProjectsOrFindAllAvailablePomFiles();
}
ExternalSystemTrustedProjectDialog.confirmLoadingUntrustedProject(manager.getProject(), MavenUtil.SYSTEM_ID);
FileDocumentManager.getInstance().saveAllDocuments();
manager.forceUpdateAllProjectsOrFindAllAvailablePomFiles();
}
}
@@ -8,7 +8,6 @@ import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsPr
import com.intellij.openapi.externalSystem.service.project.ProjectDataManager
import com.intellij.openapi.externalSystem.statistics.ProjectImportCollector
import com.intellij.openapi.externalSystem.statistics.ProjectImportCollector.PREIMPORT_ACTIVITY
import com.intellij.openapi.module.Module
import com.intellij.openapi.progress.blockingContext
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.registry.Registry
@@ -45,7 +44,8 @@ class MavenProjectPreImporter(val project: Project, val coroutineScope: Coroutin
optionalModelsProvider: IdeModifiableModelsProvider?,
importingSettings: MavenImportingSettings,
generalSettings: MavenGeneralSettings,
parentActivity: StructuredIdeActivity): List<Module> {
reimportExistingFiles: Boolean,
parentActivity: StructuredIdeActivity): PreimportResult {
val activity = PREIMPORT_ACTIVITY.startedWithParent(project, parentActivity)
@@ -56,7 +56,7 @@ class MavenProjectPreImporter(val project: Project, val coroutineScope: Coroutin
val forest = rootProjectFiles.map {
scope.preimport(it)
}.awaitAll().filterNotNull()
if (forest.isEmpty()) return emptyList()
if (forest.isEmpty()) return PreimportResult.empty(project)
val projectTree = MavenProjectsTree(project)
@@ -71,7 +71,7 @@ class MavenProjectPreImporter(val project: Project, val coroutineScope: Coroutin
allProjects.addAll(tree.projects())
tree.root?.let(roots::add)
if (existingTree == null) {
if (existingTree == null || reimportExistingFiles) {
projectChanges.putAll(tree.projects().associateWith { MavenProjectChanges.ALL })
}
else {
@@ -89,7 +89,7 @@ class MavenProjectPreImporter(val project: Project, val coroutineScope: Coroutin
val modelsProvider = optionalModelsProvider ?: ProjectDataManager.getInstance().createModifiableModelsProvider(project)
// MavenProjectsManager.getInstance(project).projectsTree = projectTree
return withBackgroundProgress(project, MavenProjectBundle.message("maven.project.importing"), false) {
return PreimportResult(withBackgroundProgress(project, MavenProjectBundle.message("maven.project.importing"), false) {
blockingContext {
val importer = MavenProjectImporter.createImporter(project, projectTree,
projectChanges,
@@ -103,11 +103,11 @@ class MavenProjectPreImporter(val project: Project, val coroutineScope: Coroutin
return@blockingContext importer.createdModules()
}
}
}, projectTree)
}
catch (e: Throwable) {
MavenLog.LOG.error(e)
return emptyList()
return PreimportResult.empty(project)
}
finally {
activity.finished {
@@ -0,0 +1,13 @@
// Copyright 2000-2023 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.preimport
import com.intellij.openapi.module.Module
import com.intellij.openapi.project.Project
import org.jetbrains.idea.maven.project.MavenProjectsTree
class PreimportResult(val modules: List<Module>, val projectTree: MavenProjectsTree) {
companion object {
fun empty(project: Project): PreimportResult = PreimportResult(emptyList(), MavenProjectsTree(project))
}
}
@@ -522,7 +522,7 @@ class MavenPreimportingTest : MavenMultiVersionImportingTestCase() {
val activity = ProjectImportCollector.IMPORT_ACTIVITY.started(myProject)
try {
MavenProjectPreImporter.getInstance(myProject)
.preimport(files, null, mavenImporterSettings, mavenGeneralSettings, activity)
.preimport(files, null, mavenImporterSettings, mavenGeneralSettings,true, activity)
}
finally {
activity.finished()
@@ -392,7 +392,7 @@ abstract class MavenImportingTestCase : MavenTestCase() {
val activity = ProjectImportCollector.IMPORT_ACTIVITY.started(myProject)
try {
MavenProjectPreImporter.getInstance(myProject)
.preimport(files, null, mavenImporterSettings, mavenGeneralSettings, activity)
.preimport(files, null, mavenImporterSettings, mavenGeneralSettings, true, activity)
}
finally {
activity.finished()