EA-545599 git: better listeners disposal

* Do not throw NPE on race between activate and deactivate calls.

GitOrigin-RevId: 42c98973a9797afa5bfbc2fe02404627782eb206
This commit is contained in:
Aleksey Pivovarov
2022-07-11 14:43:14 +00:00
committed by intellij-monorepo-bot
parent 25b9e71248
commit bc88579b96
2 changed files with 11 additions and 12 deletions
+7 -11
View File
@@ -206,19 +206,18 @@ public final class GitVcs extends AbstractVcs {
@Override
protected void activate() {
myDisposable = Disposer.newDisposable();
Disposable disposable = Disposer.newDisposable();
myDisposable = disposable;
BackgroundTaskUtil.executeOnPooledThread(myDisposable, ()
BackgroundTaskUtil.executeOnPooledThread(disposable, ()
-> GitExecutableManager.getInstance().testGitExecutableVersionValid(myProject));
if (myVFSListener == null) {
myVFSListener = GitVFSListener.createInstance(this);
}
myVFSListener = GitVFSListener.createInstance(this, disposable);
// make sure to read the registry before opening commit dialog
myProject.getService(VcsUserRegistry.class);
GitAnnotationsListener.registerListener(myProject, myDisposable);
GitAdvancedSettingsListener.registerListener(myProject, myDisposable);
GitAnnotationsListener.registerListener(myProject, disposable);
GitAdvancedSettingsListener.registerListener(myProject, disposable);
GitUserRegistry.getInstance(myProject).activate();
GitBranchIncomingOutgoingManager.getInstance(myProject).activate();
@@ -226,10 +225,7 @@ public final class GitVcs extends AbstractVcs {
@Override
protected void deactivate() {
if (myVFSListener != null) {
Disposer.dispose(myVFSListener);
myVFSListener = null;
}
myVFSListener = null;
if (myDisposable != null) {
Disposer.dispose(myDisposable);
myDisposable = null;
@@ -1,10 +1,12 @@
// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package git4idea.vfs;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.progress.Task;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.NlsContexts;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.vcs.FilePath;
@@ -40,8 +42,9 @@ public final class GitVFSListener extends VcsVFSListener {
}
@NotNull
public static GitVFSListener createInstance(@NotNull GitVcs vcs) {
public static GitVFSListener createInstance(@NotNull GitVcs vcs, @NotNull Disposable disposable) {
GitVFSListener listener = new GitVFSListener(vcs);
Disposer.register(disposable, listener);
listener.installListeners();
return listener;
}