From 3fd88ff4a280160e3f326d1cd75daca30555f990 Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Fri, 18 Aug 2017 18:15:31 +0300 Subject: [PATCH] [vcs-log] remove duplication between external and main log dispose --- .../intellij/vcs/log/impl/VcsLogManager.java | 10 +++++++++- .../intellij/vcs/log/impl/VcsProjectLog.java | 10 +--------- .../git4idea/log/GitShowExternalLogAction.java | 18 +++++++----------- 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogManager.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogManager.java index 727ef9e4960f..138e9e8fba90 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogManager.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogManager.java @@ -167,9 +167,17 @@ public class VcsLogManager implements Disposable { return logProviders; } - public void disposeUi() { + public void dispose(@Nullable Runnable callback) { + LOG.assertTrue(ApplicationManager.getApplication().isDispatchThread()); + myTabsLogRefresher.closeLogTabs(); Disposer.dispose(myTabsLogRefresher); + ApplicationManager.getApplication().executeOnPooledThread(() -> { + Disposer.dispose(this); + if (callback != null) { + callback.run(); + } + }); } @Override diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsProjectLog.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsProjectLog.java index 54baaf8ff441..ed7d8ec78f6d 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsProjectLog.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsProjectLog.java @@ -24,7 +24,6 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.startup.StartupActivity; import com.intellij.openapi.ui.MessageType; -import com.intellij.openapi.util.Disposer; import com.intellij.openapi.vcs.ProjectLevelVcsManager; import com.intellij.openapi.vcs.VcsRoot; import com.intellij.openapi.vcs.ui.VcsBalloonProblemNotifier; @@ -178,14 +177,7 @@ public class VcsProjectLog implements Disposable { public synchronized void drop(@Nullable Runnable callback) { if (myValue != null) { myMessageBus.syncPublisher(VCS_PROJECT_LOG_CHANGED).logDisposed(myValue); - myValue.disposeUi(); - VcsLogManager value = myValue; - ApplicationManager.getApplication().executeOnPooledThread(() -> { - Disposer.dispose(value); - if (callback != null) { - callback.run(); - } - }); + myValue.dispose(callback); } myValue = null; } diff --git a/plugins/git4idea/src/git4idea/log/GitShowExternalLogAction.java b/plugins/git4idea/src/git4idea/log/GitShowExternalLogAction.java index 297fb71c51dd..b88e97f62111 100644 --- a/plugins/git4idea/src/git4idea/log/GitShowExternalLogAction.java +++ b/plugins/git4idea/src/git4idea/log/GitShowExternalLogAction.java @@ -18,7 +18,6 @@ package git4idea.log; import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonDataKeys; -import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.fileChooser.FileChooser; import com.intellij.openapi.fileChooser.FileChooserDescriptor; @@ -123,17 +122,14 @@ public class GitShowExternalLogAction extends DumbAwareAction { } VcsLogManager manager = new VcsLogManager(project, ServiceManager.getService(project, VcsLogTabsProperties.class), ContainerUtil.map(roots, root -> new VcsRoot(vcs, root))); - AbstractVcsLogUi ui = manager.createLogUi(calcLogId(roots), tabName); - return new MyContentComponent(new VcsLogPanel(manager, ui), roots, () -> { - Disposer.dispose(ui); - manager.disposeUi(); - ApplicationManager.getApplication().executeOnPooledThread(() -> { - Disposer.dispose(manager); - for (VirtualFile root : roots) { - repositoryManager.removeExternalRepository(root); - } - }); + Disposable disposable = () -> manager.dispose(() -> { + for (VirtualFile root : roots) { + repositoryManager.removeExternalRepository(root); + } }); + AbstractVcsLogUi ui = manager.createLogUi(calcLogId(roots), tabName); + Disposer.register(disposable, ui); + return new MyContentComponent(new VcsLogPanel(manager, ui), roots, disposable); } @NotNull