mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
+10
-11
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user