mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[vcs-log] dispose single task controller with project as well
This commit is contained in:
@@ -18,6 +18,8 @@ package com.intellij.vcs.log.data;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -50,10 +52,13 @@ public abstract class SingleTaskController<Request, Result> implements Disposabl
|
||||
|
||||
private boolean myIsDisposed = false;
|
||||
|
||||
public SingleTaskController(@NotNull Consumer<Result> handler, boolean cancelRunning) {
|
||||
public SingleTaskController(@NotNull Project project, @NotNull Consumer<Result> handler, boolean cancelRunning, @NotNull Disposable parent) {
|
||||
myResultHandler = handler;
|
||||
myAwaitingRequests = ContainerUtil.newLinkedList();
|
||||
myCancelRunning = cancelRunning;
|
||||
|
||||
Disposer.register(parent, () -> Disposer.dispose(this));
|
||||
Disposer.register(project, this);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -158,7 +163,7 @@ public abstract class SingleTaskController<Request, Result> implements Disposabl
|
||||
synchronized (LOCK) {
|
||||
if (myIsDisposed) return;
|
||||
myIsDisposed = true;
|
||||
|
||||
|
||||
if (myRunningTask != null) {
|
||||
myRunningTask.cancel();
|
||||
myRunningTask = null;
|
||||
|
||||
@@ -80,17 +80,16 @@ public class VcsLogRefresherImpl implements VcsLogRefresher, Disposable {
|
||||
myRecentCommitCount = recentCommitsCount;
|
||||
myProgress = progress;
|
||||
|
||||
mySingleTaskController = new SingleTaskController<RefreshRequest, DataPack>(dataPack -> {
|
||||
mySingleTaskController = new SingleTaskController<RefreshRequest, DataPack>(myProject, dataPack -> {
|
||||
myDataPack = dataPack;
|
||||
dataPackUpdateHandler.consume(dataPack);
|
||||
}, false) {
|
||||
}, false, this) {
|
||||
@NotNull
|
||||
@Override
|
||||
protected ProgressIndicator startNewBackgroundTask() {
|
||||
return VcsLogRefresherImpl.this.startNewBackgroundTask(new MyRefreshTask(myDataPack));
|
||||
}
|
||||
};
|
||||
Disposer.register(this, mySingleTaskController);
|
||||
}
|
||||
|
||||
protected ProgressIndicator startNewBackgroundTask(@NotNull final Task.Backgroundable refreshTask) {
|
||||
|
||||
+4
-4
@@ -106,7 +106,6 @@ public class VcsLogPersistentIndex implements VcsLogIndex, Disposable {
|
||||
myProviders = providers;
|
||||
myFatalErrorsConsumer = fatalErrorsConsumer;
|
||||
myRoots = ContainerUtil.newLinkedHashSet();
|
||||
mySingleTaskController = new MySingleTaskController(project);
|
||||
myBigRepositoriesList = VcsLogBigRepositoriesList.getInstance();
|
||||
|
||||
for (Map.Entry<VirtualFile, VcsLogProvider> entry : providers.entrySet()) {
|
||||
@@ -131,7 +130,8 @@ public class VcsLogPersistentIndex implements VcsLogIndex, Disposable {
|
||||
myIndexingLimit.put(root, new AtomicInteger(getIndexingLimit()));
|
||||
}
|
||||
|
||||
Disposer.register(myIndexStorage != null ? myIndexStorage : this, mySingleTaskController);
|
||||
mySingleTaskController = new MySingleTaskController(project, myIndexStorage != null ? myIndexStorage : this);
|
||||
|
||||
Disposer.register(disposableParent, this);
|
||||
}
|
||||
|
||||
@@ -542,8 +542,8 @@ public class VcsLogPersistentIndex implements VcsLogIndex, Disposable {
|
||||
private static final int LOW_PRIORITY = Thread.MIN_PRIORITY;
|
||||
@NotNull private final HeavyAwareExecutor myHeavyAwareExecutor;
|
||||
|
||||
public MySingleTaskController(@NotNull Project project) {
|
||||
super(EmptyConsumer.getInstance(), false);
|
||||
public MySingleTaskController(@NotNull Project project, @NotNull Disposable parent) {
|
||||
super(project, EmptyConsumer.getInstance(), false, parent);
|
||||
myHeavyAwareExecutor = new HeavyAwareExecutor(project, 50, 100, VcsLogPersistentIndex.this);
|
||||
}
|
||||
|
||||
|
||||
+2
-3
@@ -60,7 +60,7 @@ public class VisiblePackRefresherImpl implements VisiblePackRefresher, Disposabl
|
||||
myVisiblePackBuilder = builder;
|
||||
myState = new State(initialSortType);
|
||||
|
||||
myTaskController = new SingleTaskController<Request, State>(state -> {
|
||||
myTaskController = new SingleTaskController<Request, State>(project, state -> {
|
||||
boolean hasChanges = myState.getVisiblePack() != state.getVisiblePack();
|
||||
myState = state;
|
||||
if (hasChanges) {
|
||||
@@ -68,7 +68,7 @@ public class VisiblePackRefresherImpl implements VisiblePackRefresher, Disposabl
|
||||
listener.onVisiblePackChange(state.getVisiblePack());
|
||||
}
|
||||
}
|
||||
}, true) {
|
||||
}, true, this) {
|
||||
@NotNull
|
||||
@Override
|
||||
protected ProgressIndicator startNewBackgroundTask() {
|
||||
@@ -80,7 +80,6 @@ public class VisiblePackRefresherImpl implements VisiblePackRefresher, Disposabl
|
||||
return indicator;
|
||||
}
|
||||
};
|
||||
Disposer.register(this, myTaskController);
|
||||
|
||||
myIndexingFinishedListener = root -> myTaskController.request(new IndexingFinishedRequest(root));
|
||||
myLogData.getIndex().addListener(myIndexingFinishedListener);
|
||||
|
||||
Reference in New Issue
Block a user