From 1e26ed62dbe7a69f55d2db5763aefe1d2351e00e Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Mon, 15 May 2017 16:25:06 +0200 Subject: [PATCH] IDEA-CR-21084 do not call app.saveSettings during app exiting --- .../application/impl/ApplicationImpl.java | 2 +- .../project/impl/ProjectManagerImpl.java | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java index d90946bb503c..c783946b578c 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java @@ -258,7 +258,7 @@ public class ApplicationImpl extends PlatformComponentManagerImpl implements App for (final Project project : manager.getOpenProjects()) { try { CommandProcessor.getInstance().executeCommand(project, () -> { - if (!manager.closeProject(project, true, true, checkCanCloseProject)) { + if (!manager.closeProject(project, true, false, true, checkCanCloseProject)) { canClose[0] = false; } }, ApplicationBundle.message("command.exit"), null); diff --git a/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java index 350955561a42..f6842fa41fff 100644 --- a/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java @@ -424,7 +424,7 @@ public class ProjectManagerImpl extends ProjectManagerEx implements Disposable { boolean ok = myProgressManager.runProcessWithProgressSynchronously(process, ProjectBundle.message("project.load.progress"), canCancelProjectLoading(), project); if (!ok) { - closeProject(project, false, false, true); + closeProject(project, false, false); notifyProjectOpenFailed(); return false; } @@ -601,16 +601,21 @@ public class ProjectManagerImpl extends ProjectManagerEx implements Disposable { @Override public boolean closeProject(@NotNull final Project project) { - return closeProject(project, true, false, true); + return closeProject(project, true, false); } @TestOnly public boolean forceCloseProject(@NotNull Project project, boolean dispose) { - return closeProject(project, false, dispose, false); + return closeProject(project, false, false, dispose, false); } + public boolean closeProject(@NotNull final Project project, final boolean saveProject, final boolean dispose) { + return closeProject(project, saveProject, saveProject, dispose, true); + } + + // saveApp is ignored if saveProject is false @SuppressWarnings("TestOnlyProblems") - public boolean closeProject(@NotNull final Project project, final boolean saveProject, final boolean dispose, boolean checkCanClose) { + public boolean closeProject(@NotNull final Project project, final boolean saveProject, final boolean saveApp, final boolean dispose, boolean checkCanClose) { Application app = ApplicationManager.getApplication(); if (app.isWriteAccessAllowed()) { throw new IllegalStateException("Must not call closeProject() from under write action because fireProjectClosing() listeners must have a chance to do something useful"); @@ -642,7 +647,9 @@ public class ProjectManagerImpl extends ProjectManagerEx implements Disposable { if (saveProject) { FileDocumentManager.getInstance().saveAllDocuments(); project.save(); - app.saveSettings(); + if (saveApp) { + app.saveSettings(); + } } if (checkCanClose && !ensureCouldCloseIfUnableToSave(project)) { @@ -675,7 +682,7 @@ public class ProjectManagerImpl extends ProjectManagerEx implements Disposable { @Override public boolean closeAndDispose(@NotNull final Project project) { - return closeProject(project, true, true, true); + return closeProject(project, true, true); } private void fireProjectClosing(@NotNull Project project) {