diff --git a/platform/editor-ui-api/src/com/intellij/openapi/editor/Editor.java b/platform/editor-ui-api/src/com/intellij/openapi/editor/Editor.java index eece2f3abded..3dda397c78c3 100644 --- a/platform/editor-ui-api/src/com/intellij/openapi/editor/Editor.java +++ b/platform/editor-ui-api/src/com/intellij/openapi/editor/Editor.java @@ -353,7 +353,11 @@ public interface Editor extends UserDataHolder { /** Returns the project to which the editor is related, if any. */ @Nullable Project getProject(); - /** Returns the file being edited, if any. */ + /** + * Returns the file being edited, if any. Not necessary matching the {@link #getDocument()}, often null. + *

+ * See also {@link com.intellij.openapi.fileEditor.FileDocumentManager#getFile(Document)} as a more reliable alternative. + */ default VirtualFile getVirtualFile() { return null; } diff --git a/platform/vcs-impl/api-dump.txt b/platform/vcs-impl/api-dump.txt index a2cf3e0b9718..5e923fd728ef 100644 --- a/platform/vcs-impl/api-dump.txt +++ b/platform/vcs-impl/api-dump.txt @@ -871,6 +871,7 @@ f:com.intellij.openapi.vcs.actions.VcsAnnotateUtil - s:getBackgroundableLock(com.intellij.openapi.project.Project,com.intellij.openapi.vfs.VirtualFile):com.intellij.openapi.vcs.impl.BackgroundableActionLock - s:getEditorFor(com.intellij.openapi.vfs.VirtualFile,com.intellij.openapi.actionSystem.DataContext):com.intellij.openapi.editor.Editor - s:getEditors(com.intellij.openapi.project.Project,com.intellij.openapi.vfs.VirtualFile):java.util.List +- s:isEditorForFile(com.intellij.openapi.editor.Editor,com.intellij.openapi.vfs.VirtualFile):Z f:com.intellij.openapi.vcs.actions.VcsColorsPageFactory - com.intellij.application.options.colors.ColorAndFontPanelFactory - com.intellij.openapi.options.colors.ColorAndFontDescriptorsProvider diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateLocalFileAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateLocalFileAction.java index 1926f59b1fd8..b052503fbe5e 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateLocalFileAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateLocalFileAction.java @@ -84,7 +84,7 @@ public final class AnnotateLocalFileAction { } else { Editor editor = e.getData(CommonDataKeys.EDITOR); - if (editor != null && !Objects.equals(editor.getVirtualFile(), selectedFile)) { + if (editor != null && !VcsAnnotateUtil.isEditorForFile(editor, selectedFile)) { editor = null; } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/VcsAnnotateUtil.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/VcsAnnotateUtil.java index ddf8a791469a..1fc1c2a63362 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/VcsAnnotateUtil.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/VcsAnnotateUtil.java @@ -5,7 +5,9 @@ import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.PlatformCoreDataKeys; import com.intellij.openapi.actionSystem.PlatformDataKeys; +import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.fileEditor.FileEditor; import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.fileEditor.TextEditor; @@ -28,7 +30,7 @@ public final class VcsAnnotateUtil { public static @Nullable Editor getEditorFor(@NotNull VirtualFile file, @NotNull DataContext dataContext) { Editor editor = dataContext.getData(CommonDataKeys.EDITOR); - if (editor != null && file.equals(editor.getVirtualFile())) { + if (editor != null && isEditorForFile(editor, file)) { return editor; } @@ -43,6 +45,12 @@ public final class VcsAnnotateUtil { .first(); } + public static boolean isEditorForFile(@NotNull Editor editor, @NotNull VirtualFile file) { + // Editor.getVirtualFile is not being set for many editors + Document document = FileDocumentManager.getInstance().getCachedDocument(file); + return editor.getDocument().equals(document); + } + public static @NotNull BackgroundableActionLock getBackgroundableLock(@NotNull Project project, @NotNull VirtualFile file) { return BackgroundableActionLock.getLock(project, VcsBackgroundableActions.ANNOTATE, file); }