From f99fc8d04eb5d62ff0a183affc395fb9f06112d0 Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Fri, 18 Aug 2017 02:57:38 +0300 Subject: [PATCH] [vcs-log] move tabs disposal to log manager and fix VcsLogTabsWatcher dispose --- .../vcs/log/impl/VcsLogContentProvider.java | 4 +-- .../vcs/log/impl/VcsLogContentUtil.java | 16 ++++------ .../intellij/vcs/log/impl/VcsLogManager.java | 13 ++++---- .../vcs/log/impl/VcsLogTabsWatcher.java | 32 +++++++++---------- 4 files changed, 29 insertions(+), 36 deletions(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentProvider.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentProvider.java index a503834ad8ca..f2c30f73bd23 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentProvider.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentProvider.java @@ -99,9 +99,9 @@ public class VcsLogContentProvider implements ChangesViewContentProvider { Disposer.dispose(ui); } - // other tabs + // other ui if (logManager != null) { - VcsLogContentUtil.closeLogTabs(myProject, logManager.getTabNames()); + logManager.disposeUi(); } } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentUtil.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentUtil.java index 1324e60300dd..ba3e0471cf5b 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentUtil.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentUtil.java @@ -152,16 +152,12 @@ public class VcsLogContentUtil { logUi.invokeOnChange(openLogAndRun); } - public static void closeLogTabs(@NotNull Project project, @NotNull Collection tabs) { - ToolWindow toolWindow = ToolWindowManager.getInstance(project).getToolWindow(ToolWindowId.VCS); - - if (toolWindow != null) { - for (String tabName : tabs) { - Content content = toolWindow.getContentManager().findContent(tabName); - LOG.assertTrue(content != null, "Could not find content for tab " + tabName); - if (content.isCloseable()) { - ContentsUtil.closeContentTab(toolWindow.getContentManager(), content); - } + public static void closeLogTabs(@NotNull ToolWindow toolWindow, @NotNull Collection tabs) { + for (String tabName : tabs) { + Content content = toolWindow.getContentManager().findContent(tabName); + LOG.assertTrue(content != null, "Could not find content for tab " + tabName); + if (content.isCloseable()) { + ContentsUtil.closeContentTab(toolWindow.getContentManager(), content); } } } 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 7c63269ddf54..c6308ba4a411 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 @@ -43,7 +43,6 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.util.Collection; import java.util.Map; -import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; public class VcsLogManager implements Disposable { @@ -75,7 +74,7 @@ public class VcsLogManager implements Disposable { Map logProviders = findLogProviders(roots, myProject); myLogData = new VcsLogData(myProject, logProviders, new MyFatalErrorsHandler(), this); myPostponableRefresher = new PostponableLogRefresher(myLogData); - myTabsLogRefresher = new VcsLogTabsWatcher(myProject, myPostponableRefresher, myLogData); + myTabsLogRefresher = new VcsLogTabsWatcher(myProject, myPostponableRefresher); refreshLogOnVcsEvents(logProviders, myPostponableRefresher, myLogData); @@ -172,13 +171,13 @@ public class VcsLogManager implements Disposable { return logProviders; } - @Override - public void dispose() { + public void disposeUi() { + myTabsLogRefresher.closeLogTabs(); + Disposer.dispose(myTabsLogRefresher); } - @NotNull - public Set getTabNames() { - return myTabsLogRefresher.getTabNames(); + @Override + public void dispose() { } private class MyFatalErrorsHandler implements FatalErrorHandler { diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogTabsWatcher.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogTabsWatcher.java index 7eae69b096fa..d25846f467a2 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogTabsWatcher.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogTabsWatcher.java @@ -18,7 +18,6 @@ package com.intellij.vcs.log.impl; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Disposer; import com.intellij.openapi.vcs.changes.ui.ChangesViewContentManager; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ex.ToolWindowManagerEx; @@ -36,7 +35,6 @@ import org.jetbrains.annotations.Nullable; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import java.util.Set; public class VcsLogTabsWatcher implements Disposable { private static final String TOOLWINDOW_ID = ChangesViewContentManager.TOOLWINDOW_ID; @@ -48,7 +46,7 @@ public class VcsLogTabsWatcher implements Disposable { @Nullable private ToolWindow myToolWindow; private boolean myIsVisible; - public VcsLogTabsWatcher(@NotNull Project project, @NotNull PostponableLogRefresher refresher, @NotNull Disposable parentDisposable) { + public VcsLogTabsWatcher(@NotNull Project project, @NotNull PostponableLogRefresher refresher) { myRefresher = refresher; myToolWindowManager = ToolWindowManagerEx.getInstanceEx(project); @@ -57,8 +55,6 @@ public class VcsLogTabsWatcher implements Disposable { myToolWindowManager.addToolWindowManagerListener(myPostponedEventsListener); installContentListener(); }); - - Disposer.register(parentDisposable, this); } @Nullable @@ -86,11 +82,6 @@ public class VcsLogTabsWatcher implements Disposable { } } - @Override - public void dispose() { - removeListeners(); - } - private void removeListeners() { myToolWindowManager.removeToolWindowManagerListener(myPostponedEventsListener); @@ -105,12 +96,18 @@ public class VcsLogTabsWatcher implements Disposable { } } - @NotNull - public Set getTabNames() { - return StreamEx.of(myRefresher.getLogWindows()) - .select(VcsLogTab.class) - .map(VcsLogTab::getTabName) - .toSet(); + public void closeLogTabs() { + if (myToolWindow != null) { + VcsLogContentUtil.closeLogTabs(myToolWindow, StreamEx.of(myRefresher.getLogWindows()) + .select(VcsLogTab.class) + .map(VcsLogTab::getTabName) + .toSet()); + } + } + + @Override + public void dispose() { + removeListeners(); } public class VcsLogTab extends PostponableLogRefresher.VcsLogWindow { @@ -179,7 +176,8 @@ public class VcsLogTabsWatcher implements Disposable { if (myToolWindow == null) return; if (myToolWindowManager.getToolWindow(TOOLWINDOW_ID) == null) { removeListeners(); - } else if (myIsVisible != myToolWindow.isVisible()) { + } + else if (myIsVisible != myToolWindow.isVisible()) { myIsVisible = myToolWindow.isVisible(); selectionChanged(); }