change signature: documents for binary files do not exist => after file type change it is impossible to retrieve vFile by document (IDEA-64004)

This commit is contained in:
anna
2011-01-17 17:42:22 +01:00
parent 434aba1728
commit 4a608f52fe
2 changed files with 15 additions and 14 deletions
@@ -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);
}
}
@@ -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);