IDEA-CR-21084 do not call app.saveSettings during app exiting

This commit is contained in:
Vladimir Krivosheev
2017-05-15 16:26:14 +02:00
parent 582f0f9571
commit 1e26ed62db
2 changed files with 14 additions and 7 deletions
@@ -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);
@@ -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) {