[vcs-log] move tabs disposal to log manager and fix VcsLogTabsWatcher dispose

This commit is contained in:
Julia Beliaeva
2017-08-21 02:23:16 +03:00
parent 4368c15a3c
commit f99fc8d04e
4 changed files with 29 additions and 36 deletions
@@ -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();
}
}
@@ -152,16 +152,12 @@ public class VcsLogContentUtil {
logUi.invokeOnChange(openLogAndRun);
}
public static void closeLogTabs(@NotNull Project project, @NotNull Collection<String> 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<String> 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);
}
}
}
@@ -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<VirtualFile, VcsLogProvider> 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<String> getTabNames() {
return myTabsLogRefresher.getTabNames();
@Override
public void dispose() {
}
private class MyFatalErrorsHandler implements FatalErrorHandler {
@@ -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<String> 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();
}