parent disposable in addListener

This commit is contained in:
Alexey Kudravtsev
2010-10-26 11:56:54 +04:00
parent 7700db0955
commit 30d70f71b6
11 changed files with 35 additions and 38 deletions
@@ -60,7 +60,6 @@ public class EditorTracker extends AbstractProjectComponent {
private final Map<Editor, Window> myEditorToWindowMap = new HashMap<Editor, Window>();
private List<Editor> myActiveEditors = Collections.emptyList();
private MyEditorFactoryListener myEditorFactoryListener;
private final EventDispatcher<EditorTrackerListener> myDispatcher = EventDispatcher.create(EditorTrackerListener.class);
private IdeFrameImpl myIdeFrame;
@@ -85,12 +84,11 @@ public class EditorTracker extends AbstractProjectComponent {
}
});
myEditorFactoryListener = new MyEditorFactoryListener();
myEditorFactory.addEditorFactoryListener(myEditorFactoryListener);
final MyEditorFactoryListener myEditorFactoryListener = new MyEditorFactoryListener();
myEditorFactory.addEditorFactoryListener(myEditorFactoryListener,myProject);
Disposer.register(myProject, new Disposable() {
public void dispose() {
myEditorFactoryListener.dispose(null);
myEditorFactory.removeEditorFactoryListener(myEditorFactoryListener);
}
});
}
@@ -222,12 +220,8 @@ public class EditorTracker extends AbstractProjectComponent {
myDispatcher.getMulticaster().activeEditorsChanged(editors);
}
public void addEditorTrackerListener(EditorTrackerListener listener) {
myDispatcher.addListener(listener);
}
public void removeEditorTrackerListener(EditorTrackerListener listener) {
myDispatcher.removeListener(listener);
public void addEditorTrackerListener(@NotNull EditorTrackerListener listener, @NotNull Disposable parentDisposable) {
myDispatcher.addListener(listener,parentDisposable);
}
private class MyEditorFactoryListener implements EditorFactoryListener {
@@ -24,14 +24,12 @@ import com.intellij.codeInsight.documentation.DocumentationManager;
import com.intellij.codeInsight.hint.EditorHintListener;
import com.intellij.codeInsight.hint.HintManager;
import com.intellij.codeInsight.lookup.*;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.EditorFactory;
import com.intellij.openapi.editor.event.EditorFactoryAdapter;
import com.intellij.openapi.editor.event.EditorFactoryEvent;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiFile;
import com.intellij.ui.LightweightHint;
@@ -84,12 +82,7 @@ public class LookupManagerImpl extends LookupManager {
}
}
};
EditorFactory.getInstance().addEditorFactoryListener(myEditorFactoryListener);
Disposer.register(myProject, new Disposable() {
public void dispose() {
EditorFactory.getInstance().removeEditorFactoryListener(myEditorFactoryListener);
}
});
EditorFactory.getInstance().addEditorFactoryListener(myEditorFactoryListener, myProject);
}
public Lookup showLookup(final Editor editor,
@@ -78,12 +78,7 @@ public class TemplateManagerImpl extends TemplateManager implements ProjectCompo
editor.putUserData(TEMPLATE_STATE_KEY, null);
}
};
EditorFactory.getInstance().addEditorFactoryListener(myEditorFactoryListener);
Disposer.register(myProject, new Disposable() {
public void dispose() {
EditorFactory.getInstance().removeEditorFactoryListener(myEditorFactoryListener);
}
});
EditorFactory.getInstance().addEditorFactoryListener(myEditorFactoryListener, myProject);
}
public void setTemplateTesting(final boolean templateTesting) {
@@ -492,12 +492,7 @@ public class LanguageConsoleImpl implements Disposable, TypeSafeDataProvider {
}
}
};
EditorFactory.getInstance().addEditorFactoryListener(factoryListener);
Disposer.register(this, new Disposable() {
public void dispose() {
EditorFactory.getInstance().removeEditorFactoryListener(factoryListener);
}
});
EditorFactory.getInstance().addEditorFactoryListener(factoryListener, this);
}
protected void registerActionShortcuts(JComponent component) {
@@ -105,11 +105,10 @@ public class ChangeSignatureGestureDetector extends PsiTreeChangeAdapter impleme
@Override
public void projectOpened() {
myPsiManager.addPsiTreeChangeListener(this);
EditorFactory.getInstance().addEditorFactoryListener(this);
EditorFactory.getInstance().addEditorFactoryListener(this,myProject);
Disposer.register(myProject, new Disposable() {
public void dispose() {
myPsiManager.removePsiTreeChangeListener(ChangeSignatureGestureDetector.this);
EditorFactory.getInstance().removeEditorFactoryListener(ChangeSignatureGestureDetector.this);
LOG.assertTrue(myListenerMap.isEmpty(), myListenerMap);
}
});
@@ -15,6 +15,7 @@
*/
package com.intellij.openapi.editor;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.ApplicationComponent;
@@ -161,14 +162,25 @@ public abstract class EditorFactory implements ApplicationComponent {
* and released.
*
* @param listener the listener instance.
* @deprecated use the {@link #addEditorFactoryListener(EditorFactoryListener, Disposable)} instead
*/
public abstract void addEditorFactoryListener(@NotNull EditorFactoryListener listener);
/**
* Registers a listener for receiving notifications when editor instances are created and released
* and removes the listener when {@link parentDisposable} get disposed.
*
* @param listener the listener instance.
* @param parentDisposable the Disposable which triggers the removal of the listener
*/
public abstract void addEditorFactoryListener(@NotNull EditorFactoryListener listener, @NotNull Disposable parentDisposable);
/**
* Unregisters a listener for receiving notifications when editor instances are created
* and released.
*
* @param listener the listener instance.
* @deprecated you should have used the {@link #addEditorFactoryListener(EditorFactoryListener, Disposable)} instead
*/
public abstract void removeEditorFactoryListener(@NotNull EditorFactoryListener listener);
@@ -16,6 +16,7 @@
package com.intellij.openapi.editor.impl;
import com.intellij.injected.editor.DocumentWindow;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ModalityStateListener;
import com.intellij.openapi.application.impl.LaterInvocator;
import com.intellij.openapi.diagnostic.Logger;
@@ -212,6 +213,11 @@ public class EditorFactoryImpl extends EditorFactory {
myEditorFactoryEventDispatcher.addListener(listener);
}
@Override
public void addEditorFactoryListener(@NotNull EditorFactoryListener listener, @NotNull Disposable parentDisposable) {
myEditorFactoryEventDispatcher.addListener(listener,parentDisposable);
}
public void removeEditorFactoryListener(@NotNull EditorFactoryListener listener) {
myEditorFactoryEventDispatcher.removeListener(listener);
}
@@ -934,8 +934,7 @@ public class ProjectManagerImpl extends ProjectManagerEx implements NamedJDOMExt
public void addProjectManagerListener(Project project, ProjectManagerListener listener) {
List<ProjectManagerListener> listeners = project.getUserData(LISTENERS_IN_PROJECT_KEY);
if (listeners == null) {
listeners = new ArrayList<ProjectManagerListener>();
project.putUserData(LISTENERS_IN_PROJECT_KEY, listeners);
listeners = ((UserDataHolderEx)project).putUserDataIfAbsent(LISTENERS_IN_PROJECT_KEY, new ArrayList<ProjectManagerListener>());
}
listeners.add(listener);
}
@@ -15,6 +15,7 @@
*/
package com.intellij.mock;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.EditorFactory;
@@ -88,6 +89,10 @@ public class MockEditorFactory extends EditorFactory {
public void addEditorFactoryListener(@NotNull EditorFactoryListener listener) {
}
@Override
public void addEditorFactoryListener(@NotNull EditorFactoryListener listener, @NotNull Disposable parentDisposable) {
}
@Override
public void removeEditorFactoryListener(@NotNull EditorFactoryListener listener) {
}
@@ -114,7 +114,7 @@ public class LineStatusTrackerManager implements ProjectComponent {
fsManager.addFileStatusListener(fileStatusListener, myProject);
final EditorFactory editorFactory = EditorFactory.getInstance();
editorFactory.addEditorFactoryListener(editorFactoryListener);
editorFactory.addEditorFactoryListener(editorFactoryListener,myProject);
final VirtualFileManager virtualFileManager = VirtualFileManager.getInstance();
virtualFileManager.addVirtualFileListener(virtualFileListener,myProject);
@@ -126,7 +126,6 @@ public class LineStatusTrackerManager implements ProjectComponent {
public void dispose() {
trackAwtThread();
fsManager.removeFileStatusListener(fileStatusListener);
editorFactory.removeEditorFactoryListener(editorFactoryListener);
virtualFileManager.removeVirtualFileListener(virtualFileListener);
editorColorsManager.removeEditorColorsListener(editorColorsListener);
}
@@ -128,7 +128,7 @@ public class QuickEditAction implements IntentionAction, LowPriorityAction {
return false;
}
private static Key<MyHandler> QUICK_EDIT_HANDLER = Key.create("QUICK_EDIT_HANDLER");
private static final Key<MyHandler> QUICK_EDIT_HANDLER = Key.create("QUICK_EDIT_HANDLER");
@NotNull
private static MyHandler getHandler(Project project, PsiFile injectedFile, Editor editor, PsiFile origFile) {
MyHandler handler = injectedFile.getUserData(QUICK_EDIT_HANDLER);
@@ -212,7 +212,7 @@ public class QuickEditAction implements IntentionAction, LowPriorityAction {
myInjectedFile.putUserData(QUICK_EDIT_HANDLER, null);
}
}
});
}, project);
initMarkers(shreds);
}