diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonListeners.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonListeners.java index cd02cbd09382..7689d1a7cada 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonListeners.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonListeners.java @@ -85,8 +85,6 @@ class DaemonListeners implements Disposable { private final EditorColorsListener myEditorColorsListener = new MyEditorColorsListener(); private final PropertyChangeListener myTodoListener = new MyTodoListener(); - private final EditorFactoryListener myEditorFactoryListener; - private final Project myProject; private final DaemonCodeAnalyzerImpl myDaemonCodeAnalyzer; private final ModalityStateListener myModalityStateListener; @@ -97,7 +95,6 @@ class DaemonListeners implements Disposable { private volatile boolean cutOperationJustHappened; private final EditorTracker myEditorTracker; - private final EditorTrackerListener myEditorTrackerListener; public DaemonListeners(Project project, DaemonCodeAnalyzerImpl daemonCodeAnalyzer, EditorTracker editorTracker) { myProject = project; @@ -137,20 +134,23 @@ class DaemonListeners implements Disposable { eventMulticaster.addEditorMouseListener(new MyEditorMouseListener(), this); myEditorTracker = editorTracker; - myEditorTrackerListener = new EditorTrackerListener() { + EditorTrackerListener editorTrackerListener = new EditorTrackerListener() { private List myActiveEditors = Collections.emptyList(); - public void activeEditorsChanged(@NotNull List editors) { List activeEditors = myEditorTracker.getActiveEditors(); if (!myActiveEditors.equals(activeEditors)) { myActiveEditors = activeEditors; stopDaemon(true); // do not stop daemon if idea loses/gains focus + if (LaterInvocator.isInModalContext()) { + // editor appear in modal context, reenable the daemon + myDaemonCodeAnalyzer.setUpdateByTimerEnabled(true); + } } } }; - myEditorTracker.addEditorTrackerListener(myEditorTrackerListener); + myEditorTracker.addEditorTrackerListener(editorTrackerListener, this); - myEditorFactoryListener = new EditorFactoryAdapter() { + EditorFactoryListener editorFactoryListener = new EditorFactoryAdapter() { public void editorCreated(EditorFactoryEvent event) { Editor editor = event.getEditor(); Document document = editor.getDocument(); @@ -160,7 +160,7 @@ class DaemonListeners implements Disposable { myDaemonCodeAnalyzer.repaintErrorStripeRenderer(editor); } }; - EditorFactory.getInstance().addEditorFactoryListener(myEditorFactoryListener); + EditorFactory.getInstance().addEditorFactoryListener(editorFactoryListener,this); PsiDocumentManagerImpl documentManager = (PsiDocumentManagerImpl)PsiDocumentManager.getInstance(myProject); PsiChangeHandler changeHandler = new PsiChangeHandler(myProject, documentManager, EditorFactory.getInstance(),connection, @@ -282,13 +282,11 @@ class DaemonListeners implements Disposable { public void dispose() { EditorEventMulticaster eventMulticaster = EditorFactory.getInstance().getEventMulticaster(); - EditorFactory.getInstance().removeEditorFactoryListener(myEditorFactoryListener); ApplicationManager.getApplication().removeApplicationListener(myApplicationListener); EditorColorsManager.getInstance().removeEditorColorsListener(myEditorColorsListener); TodoConfiguration.getInstance().removePropertyChangeListener(myTodoListener); ((EditorEventMulticasterEx)eventMulticaster).removeErrorStripeListener(myErrorStripeHandler); - myEditorTracker.removeEditorTrackerListener(myEditorTrackerListener); LaterInvocator.removeModalityStateListener(myModalityStateListener); }