From 402d7036e65b8addfc069940ecb5ed978ff4e84c Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 14 Jun 2019 20:38:23 +0200 Subject: [PATCH] take transaction in ProjectUtil.openProject (EA-143639) GitOrigin-RevId: 3013af06d0d4dcab70f17668709f8d926fa27069 --- .../com/intellij/ide/impl/ProjectUtil.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/impl/ProjectUtil.java b/platform/platform-impl/src/com/intellij/ide/impl/ProjectUtil.java index ac0f7f9fb229..1edc42683aaa 100644 --- a/platform/platform-impl/src/com/intellij/ide/impl/ProjectUtil.java +++ b/platform/platform-impl/src/com/intellij/ide/impl/ProjectUtil.java @@ -11,6 +11,7 @@ import com.intellij.ide.util.PropertiesComponent; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ApplicationNamesInfo; import com.intellij.openapi.application.ModalityState; +import com.intellij.openapi.application.TransactionGuard; import com.intellij.openapi.components.StorageScheme; import com.intellij.openapi.components.impl.stores.IProjectStore; import com.intellij.openapi.diagnostic.Logger; @@ -18,6 +19,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.project.ex.ProjectManagerEx; import com.intellij.openapi.ui.Messages; +import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.io.FileUtilRt; import com.intellij.openapi.util.text.StringUtil; @@ -181,14 +183,17 @@ public class ProjectUtil { } } - try { - return ProjectManager.getInstance().loadAndOpenProject(path); - } - catch (Exception e) { - Messages.showMessageDialog(IdeBundle.message("error.cannot.load.project", e.getMessage()), - IdeBundle.message("title.cannot.load.project"), Messages.getErrorIcon()); - } - return null; + Ref result = new Ref<>(); + TransactionGuard.getInstance().submitTransactionAndWait(() -> { + try { + result.set(ProjectManager.getInstance().loadAndOpenProject(path)); + } + catch (Exception e) { + Messages.showMessageDialog(IdeBundle.message("error.cannot.load.project", e.getMessage()), + IdeBundle.message("title.cannot.load.project"), Messages.getErrorIcon()); + } + }); + return result.get(); } public static boolean confirmLoadingFromRemotePath(@NotNull String path,