diff --git a/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureGestureTest.java b/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureGestureTest.java index 15d4110c463e..78b91517c8b1 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureGestureTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureGestureTest.java @@ -22,6 +22,7 @@ import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.actions.EditorActionUtil; +import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.psi.PsiManager; import com.intellij.refactoring.changeSignature.ChangeSignatureDetectorAction; import com.intellij.refactoring.changeSignature.ChangeSignatureGestureDetector; @@ -39,10 +40,11 @@ public class ChangeSignatureGestureTest extends LightCodeInsightFixtureTestCase private void doTest(final Runnable run, boolean shouldShow, final String hint) { myFixture.configureByFile("/refactoring/changeSignatureGesture/" + getTestName(false) + ".java"); final ChangeSignatureGestureDetector detector = ChangeSignatureGestureDetector.getInstance(getProject()); - final Document document = myFixture.getEditor().getDocument(); + final EditorEx editor = (EditorEx)myFixture.getEditor(); + final Document document = editor.getDocument(); try { PsiManager.getInstance(getProject()).addPsiTreeChangeListener(detector); - detector.addDocListener(document); + detector.addDocListener(editor.getVirtualFile()); new WriteCommandAction.Simple(getProject()) { @Override protected void run() throws Throwable { @@ -62,7 +64,7 @@ public class ChangeSignatureGestureTest extends LightCodeInsightFixtureTestCase } } finally { - detector.removeDocListener(document); + detector.removeDocListener(document, editor.getVirtualFile()); PsiManager.getInstance(getProject()).removePsiTreeChangeListener(detector); } } diff --git a/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureGestureDetector.java b/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureGestureDetector.java index 46157ff3f955..5c90d38059ce 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureGestureDetector.java +++ b/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureGestureDetector.java @@ -29,6 +29,7 @@ import com.intellij.openapi.editor.event.DocumentAdapter; import com.intellij.openapi.editor.event.DocumentEvent; import com.intellij.openapi.editor.event.EditorFactoryEvent; import com.intellij.openapi.editor.event.EditorFactoryListener; +import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.project.Project; @@ -214,12 +215,13 @@ public class ChangeSignatureGestureDetector extends PsiTreeChangeAdapter impleme public void editorCreated(EditorFactoryEvent event) { final Editor editor = event.getEditor(); if (editor.getProject() != myProject) return; - addDocListener(editor.getDocument()); + addDocListener(((EditorEx)editor).getVirtualFile()); } - public void addDocListener(Document document) { - final VirtualFile file = myDocumentManager.getFile(document); - if (file != null && file.isValid() && !myListenerMap.containsKey(file)) { + public void addDocListener(VirtualFile file) { + if (file == null) return; + final Document document = myDocumentManager.getDocument(file); + if (file.isValid() && !myListenerMap.containsKey(file)) { final MyDocumentChangeAdapter adapter = new MyDocumentChangeAdapter(); document.addDocumentListener(adapter); myListenerMap.put(file, adapter); @@ -228,20 +230,17 @@ public class ChangeSignatureGestureDetector extends PsiTreeChangeAdapter impleme @Override public void editorReleased(EditorFactoryEvent event) { - removeDocListener(event.getEditor().getDocument()); - } - - public void removeDocListener(Document document) { - final VirtualFile file = myDocumentManager.getFile(document); + final EditorEx editor = (EditorEx)event.getEditor(); + final VirtualFile file = editor.getVirtualFile(); if (file != null && file.isValid()) { if (myFileEditorManager.isFileOpen(file)) { return; } } - removeDocListener(document, file); + removeDocListener(editor.getDocument(), file); } - private void removeDocListener(Document document, VirtualFile file) { + public void removeDocListener(Document document, VirtualFile file) { final MyDocumentChangeAdapter adapter = myListenerMap.remove(file); if (adapter != null) { document.removeDocumentListener(adapter);