StartupActivity: dispose resources on project or extension disposal

GitOrigin-RevId: a3eb464e443fa97fd06503b62f13e71504835077
This commit is contained in:
Piotr Tomiak
2020-01-02 13:34:21 +00:00
committed by intellij-monorepo-bot
parent c3e494e7a6
commit 81ecffeeec
3 changed files with 39 additions and 20 deletions
@@ -2,17 +2,20 @@
package com.intellij.codeInsight.highlighting;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.EditorFactory;
import com.intellij.openapi.editor.SelectionModel;
import com.intellij.openapi.editor.event.*;
import com.intellij.openapi.extensions.ExtensionPointUtil;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.fileEditor.FileEditorManagerEvent;
import com.intellij.openapi.fileEditor.FileEditorManagerListener;
import com.intellij.openapi.fileEditor.TextEditor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.startup.StartupActivity;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.TextRange;
import com.intellij.util.Alarm;
import org.jetbrains.annotations.NotNull;
@@ -25,6 +28,10 @@ public class BraceHighlighter implements StartupActivity.DumbAware {
@Override
public void runActivity(@NotNull final Project project) {
if (ApplicationManager.getApplication().isHeadlessEnvironment()) return; // sorry, upsource
Disposable activityDisposable = ExtensionPointUtil.createExtensionDisposable(this, StartupActivity.POST_STARTUP_ACTIVITY);
Disposer.register(project, activityDisposable);
final EditorEventMulticaster eventMulticaster = EditorFactory.getInstance().getEventMulticaster();
eventMulticaster.addCaretListener(new CaretListener() {
@@ -40,7 +47,7 @@ public class BraceHighlighter implements StartupActivity.DumbAware {
}
updateBraces(editor, myAlarm);
}
}, project);
}, activityDisposable);
final SelectionListener selectionListener = new SelectionListener() {
@Override
@@ -60,7 +67,7 @@ public class BraceHighlighter implements StartupActivity.DumbAware {
updateBraces(editor, myAlarm);
}
};
eventMulticaster.addSelectionListener(selectionListener, project);
eventMulticaster.addSelectionListener(selectionListener, activityDisposable);
DocumentListener documentListener = new DocumentListener() {
@Override
@@ -72,22 +79,23 @@ public class BraceHighlighter implements StartupActivity.DumbAware {
}
}
};
eventMulticaster.addDocumentListener(documentListener, project);
eventMulticaster.addDocumentListener(documentListener, activityDisposable);
project.getMessageBus().connect().subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, new FileEditorManagerListener() {
@Override
public void selectionChanged(@NotNull FileEditorManagerEvent e) {
myAlarm.cancelAllRequests();
FileEditor oldEditor = e.getOldEditor();
if (oldEditor instanceof TextEditor) {
clearBraces(((TextEditor)oldEditor).getEditor());
project.getMessageBus().connect(activityDisposable)
.subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, new FileEditorManagerListener() {
@Override
public void selectionChanged(@NotNull FileEditorManagerEvent e) {
myAlarm.cancelAllRequests();
FileEditor oldEditor = e.getOldEditor();
if (oldEditor instanceof TextEditor) {
clearBraces(((TextEditor)oldEditor).getEditor());
}
FileEditor newEditor = e.getNewEditor();
if (newEditor instanceof TextEditor) {
updateBraces(((TextEditor)newEditor).getEditor(), myAlarm);
}
}
FileEditor newEditor = e.getNewEditor();
if (newEditor instanceof TextEditor) {
updateBraces(((TextEditor)newEditor).getEditor(), myAlarm);
}
}
});
});
}
static void updateBraces(@NotNull final Editor editor, @NotNull final Alarm alarm) {
@@ -1,11 +1,14 @@
package com.intellij.tasks.context;
import com.intellij.notification.*;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.application.TransactionGuard;
import com.intellij.openapi.extensions.ExtensionPointUtil;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.startup.StartupActivity;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.vcs.BranchChangeListener;
import com.intellij.openapi.vcs.VcsConfiguration;
import com.intellij.tasks.BranchInfo;
@@ -24,10 +27,11 @@ public class BranchContextTracker implements BranchChangeListener {
private final Project myProject;
private String myLastBranch;
private BranchContextTracker(Project project) {
private BranchContextTracker(@NotNull Project project, @NotNull Disposable activityDisposable) {
myProject = project;
myContextManager = WorkingContextManager.getInstance(project);
project.getMessageBus().connect().subscribe(BranchChangeListener.VCS_BRANCH_CHANGED, this);
project.getMessageBus().connect(activityDisposable)
.subscribe(BranchChangeListener.VCS_BRANCH_CHANGED, this);
}
@Override
@@ -93,7 +97,9 @@ public class BranchContextTracker implements BranchChangeListener {
@Override
public void runActivity(@NotNull Project project) {
new BranchContextTracker(project);
Disposable activityDisposable = ExtensionPointUtil.createExtensionDisposable(this, StartupActivity.POST_STARTUP_ACTIVITY);
Disposer.register(project, activityDisposable);
new BranchContextTracker(project, activityDisposable);
}
}
}
@@ -3,8 +3,10 @@ package com.intellij.lang.ant.config.impl;
import com.intellij.lang.ant.config.AntConfiguration;
import com.intellij.lang.ant.config.actions.TargetActionStub;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.ActionManager;
import com.intellij.openapi.actionSystem.ex.ActionManagerEx;
import com.intellij.openapi.extensions.ExtensionPointUtil;
import com.intellij.openapi.keymap.Keymap;
import com.intellij.openapi.keymap.ex.KeymapManagerEx;
import com.intellij.openapi.project.Project;
@@ -15,6 +17,9 @@ import org.jetbrains.annotations.NotNull;
public class AntShortcutStartupActivity implements StartupActivity {
@Override
public void runActivity(@NotNull Project project) {
Disposable activityDisposable = ExtensionPointUtil.createExtensionDisposable(this, StartupActivity.POST_STARTUP_ACTIVITY);
Disposer.register(project, activityDisposable);
final String prefix = AntConfiguration.getActionIdPrefix(project);
final ActionManager actionManager = ActionManager.getInstance();
@@ -26,7 +31,7 @@ public class AntShortcutStartupActivity implements StartupActivity {
}
}
Disposer.register(project, () -> unregisterAction(project));
Disposer.register(activityDisposable, () -> unregisterAction(project));
}
private static void unregisterAction(@NotNull Project project) {