From c261ff3b94704fe0a9fef42748183091bb88b717 Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Fri, 18 Aug 2017 03:19:34 +0300 Subject: [PATCH] [vcs-log] properly dispose external log --- .../intellij/vcs/log/impl/VcsLogManager.java | 12 ++++-------- .../git4idea/log/GitShowExternalLogAction.java | 17 +++++++++++++---- 2 files changed, 17 insertions(+), 12 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 c6308ba4a411..727ef9e4960f 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 @@ -33,14 +33,16 @@ import com.intellij.vcs.log.VcsLogProvider; import com.intellij.vcs.log.VcsLogRefresher; import com.intellij.vcs.log.data.VcsLogData; import com.intellij.vcs.log.data.VcsLogStorage; -import com.intellij.vcs.log.ui.*; +import com.intellij.vcs.log.ui.AbstractVcsLogUi; +import com.intellij.vcs.log.ui.VcsLogColorManager; +import com.intellij.vcs.log.ui.VcsLogColorManagerImpl; +import com.intellij.vcs.log.ui.VcsLogUiImpl; import com.intellij.vcs.log.visible.VcsLogFilterer; import com.intellij.vcs.log.visible.VisiblePackRefresherImpl; import org.jetbrains.annotations.CalledInAwt; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import javax.swing.*; import java.util.Collection; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; @@ -103,12 +105,6 @@ public class VcsLogManager implements Disposable { return myLogData; } - @NotNull - public JComponent createLogPanel(@NotNull String logId, @Nullable String contentTabName) { - AbstractVcsLogUi ui = createLogUi(logId, contentTabName); - return new VcsLogPanel(this, ui); - } - @NotNull public VcsLogUiImpl createLogUi(@NotNull String logId, @Nullable String contentTabName) { return createLogUi(contentTabName, getMainLogUiFactory(logId)); diff --git a/plugins/git4idea/src/git4idea/log/GitShowExternalLogAction.java b/plugins/git4idea/src/git4idea/log/GitShowExternalLogAction.java index 9a72ab122d5f..297fb71c51dd 100644 --- a/plugins/git4idea/src/git4idea/log/GitShowExternalLogAction.java +++ b/plugins/git4idea/src/git4idea/log/GitShowExternalLogAction.java @@ -18,6 +18,7 @@ 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; @@ -45,6 +46,8 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.vcs.log.impl.VcsLogContentProvider; import com.intellij.vcs.log.impl.VcsLogManager; import com.intellij.vcs.log.impl.VcsLogTabsProperties; +import com.intellij.vcs.log.ui.AbstractVcsLogUi; +import com.intellij.vcs.log.ui.VcsLogPanel; import git4idea.GitUtil; import git4idea.GitVcs; import git4idea.config.GitVersion; @@ -120,10 +123,16 @@ public class GitShowExternalLogAction extends DumbAwareAction { } VcsLogManager manager = new VcsLogManager(project, ServiceManager.getService(project, VcsLogTabsProperties.class), ContainerUtil.map(roots, root -> new VcsRoot(vcs, root))); - return new MyContentComponent(manager.createLogPanel(calcLogId(roots), tabName), roots, () -> { - for (VirtualFile root : roots) { - repositoryManager.removeExternalRepository(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); + } + }); }); }