reduce number of public dangerous methods

This commit is contained in:
Alexey Kudravtsev
2017-05-16 14:13:53 +03:00
parent 26ebfe166f
commit 4c5aef59c9
2 changed files with 34 additions and 23 deletions
@@ -253,22 +253,23 @@ public class ApplicationImpl extends PlatformComponentManagerImpl implements App
private boolean disposeSelf(final boolean checkCanCloseProject) {
final ProjectManagerImpl manager = (ProjectManagerImpl)ProjectManagerEx.getInstanceEx();
if (manager != null) {
if (manager == null) {
saveSettings();
}
else {
final boolean[] canClose = {true};
for (final Project project : manager.getOpenProjects()) {
try {
CommandProcessor.getInstance().executeCommand(project, () -> {
if (!manager.closeProject(project, true, false, true, checkCanCloseProject)) {
canClose[0] = false;
}
}, ApplicationBundle.message("command.exit"), null);
}
catch (Throwable e) {
LOG.error(e);
}
if (!canClose[0]) {
return false;
}
try {
CommandProcessor.getInstance().executeCommand(null, () -> {
if (!manager.closeAndDisposeAllProjects(checkCanCloseProject)) {
canClose[0] = false;
}
}, ApplicationBundle.message("command.exit"), null);
}
catch (Throwable e) {
LOG.error(e);
}
if (!canClose[0]) {
return false;
}
}
runWriteAction(() -> Disposer.dispose(this));
@@ -803,7 +804,6 @@ public class ApplicationImpl extends PlatformComponentManagerImpl implements App
return;
}
saveSettings();
lifecycleListener.appWillBeClosed(restart);
boolean success = disposeSelf(!force);
@@ -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);
closeProject(project, false, false, false, true);
notifyProjectOpenFailed();
return false;
}
@@ -601,7 +601,7 @@ public class ProjectManagerImpl extends ProjectManagerEx implements Disposable {
@Override
public boolean closeProject(@NotNull final Project project) {
return closeProject(project, true, false);
return closeProject(project, true, true, false, true);
}
@TestOnly
@@ -609,13 +609,24 @@ public class ProjectManagerImpl extends ProjectManagerEx implements Disposable {
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);
// return true if successful
public boolean closeAndDisposeAllProjects(boolean checkCanClose) {
ApplicationManager.getApplication().saveSettings();
for (Project project : getOpenProjects()) {
if (!closeProject(project, true, false, true, checkCanClose)) {
return false;
}
}
return true;
}
// saveApp is ignored if saveProject is false
@SuppressWarnings("TestOnlyProblems")
public boolean closeProject(@NotNull final Project project, final boolean saveProject, final boolean saveApp, final boolean dispose, boolean checkCanClose) {
private 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");
@@ -682,7 +693,7 @@ public class ProjectManagerImpl extends ProjectManagerEx implements Disposable {
@Override
public boolean closeAndDispose(@NotNull final Project project) {
return closeProject(project, true, true);
return closeProject(project, true, true, true, true);
}
private void fireProjectClosing(@NotNull Project project) {
@@ -786,7 +797,7 @@ public class ProjectManagerImpl extends ProjectManagerEx implements Disposable {
if (projectLevelListeners.isEmpty()) {
return myListeners;
}
else if (myListeners.isEmpty()) {
if (myListeners.isEmpty()) {
return projectLevelListeners;
}