[vcs-log] remove duplication between external and main log dispose

This commit is contained in:
Julia Beliaeva
2017-08-21 02:23:20 +03:00
parent 5b91f97a8d
commit 3fd88ff4a2
3 changed files with 17 additions and 21 deletions
@@ -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
@@ -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;
}
@@ -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