diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateRevisionAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateRevisionAction.java index baad9ad8a236..c53510b7c956 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateRevisionAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateRevisionAction.java @@ -1,7 +1,9 @@ package com.intellij.openapi.vcs.actions; import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.PlatformDataKeys; +import com.intellij.openapi.editor.Editor; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.PlainTextFileType; import com.intellij.openapi.project.DumbAware; @@ -94,6 +96,12 @@ abstract class AnnotateRevisionAction extends AnnotateRevisionActionBase impleme return revisions.get(currentLine); } + @Nullable + @Override + protected Editor getEditor(@NotNull AnActionEvent e) { + return e.getData(CommonDataKeys.EDITOR); + } + @Override public void consume(Integer integer) { currentLine = integer; diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateRevisionActionBase.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateRevisionActionBase.java index 37b9ecd0717b..659fa094589c 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateRevisionActionBase.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateRevisionActionBase.java @@ -37,6 +37,11 @@ public abstract class AnnotateRevisionActionBase extends AnAction { @Nullable protected abstract VcsFileRevision getFileRevision(@NotNull AnActionEvent e); + @Nullable + protected Editor getEditor(@NotNull AnActionEvent e) { + return null; + } + public void update(@NotNull AnActionEvent e) { e.getPresentation().setEnabled(isEnabled(e)); } @@ -70,7 +75,7 @@ public abstract class AnnotateRevisionActionBase extends AnAction { assert file != null; assert fileRevision != null; - final Editor editor = e.getData(CommonDataKeys.EDITOR); + final Editor editor = getEditor(e); final CharSequence oldContent = editor == null ? null : editor.getDocument().getImmutableCharSequence(); final int oldLine = editor == null ? 0 : editor.getCaretModel().getLogicalPosition().line; diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/history/FileHistoryPanelImpl.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/history/FileHistoryPanelImpl.java index 9955dc7cf306..587919c0e51c 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/history/FileHistoryPanelImpl.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/history/FileHistoryPanelImpl.java @@ -27,8 +27,8 @@ import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; -import com.intellij.openapi.fileEditor.FileDocumentManager; -import com.intellij.openapi.fileEditor.OpenFileDescriptor; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.fileEditor.*; import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; @@ -1064,6 +1064,25 @@ public class FileHistoryPanelImpl extends PanelWithActionsAndCloseButton { setShortcutSet(ActionManager.getInstance().getAction("Annotate").getShortcutSet()); } + @Nullable + @Override + protected Editor getEditor(@NotNull AnActionEvent e) { + VirtualFile virtualFile = getVirtualFile(); + if (virtualFile == null) return null; + + Editor editor = e.getData(CommonDataKeys.EDITOR); + if (editor != null) { + VirtualFile editorFile = FileDocumentManager.getInstance().getFile(editor.getDocument()); + if (Comparing.equal(editorFile, virtualFile)) return editor; + } + + FileEditor fileEditor = FileEditorManager.getInstance(myProject).getSelectedEditor(virtualFile); + if (fileEditor instanceof TextEditor) { + return ((TextEditor)fileEditor).getEditor(); + } + return null; + } + @Nullable @Override protected AbstractVcs getVcs(@NotNull AnActionEvent e) {