From 96967b40c8764e4ce5b9704e36781b2930bf5f3c Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Wed, 22 Nov 2017 13:06:30 +0300 Subject: [PATCH] IDEA-180365 Undo in editor does not scroll to changed position Fix a case with making a change in a diff pane, then performing undo in main editor. In this case comparing classes of editors doesn't work: we have PsiAwareTextEditorProvider.PsiAwareEditorWrapper in the diff pane and PsiAwareTextEditorImpl in the main editor. --- .../intellij/openapi/command/impl/EditorAndState.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/command/impl/EditorAndState.java b/platform/platform-impl/src/com/intellij/openapi/command/impl/EditorAndState.java index 6ddc227a81f8..8f1207d40199 100644 --- a/platform/platform-impl/src/com/intellij/openapi/command/impl/EditorAndState.java +++ b/platform/platform-impl/src/com/intellij/openapi/command/impl/EditorAndState.java @@ -3,23 +3,26 @@ package com.intellij.openapi.command.impl; import com.intellij.openapi.fileEditor.FileEditor; import com.intellij.openapi.fileEditor.FileEditorState; +import com.intellij.openapi.fileEditor.FileEditorStateLevel; import com.intellij.openapi.vfs.VirtualFile; import java.util.Objects; class EditorAndState { private final FileEditorState myState; - private final Class myEditorClass; private final VirtualFile myVirtualFile; public EditorAndState(FileEditor editor, FileEditorState state) { - myEditorClass = editor.getClass(); myVirtualFile = editor.getFile(); myState = state; } public boolean canBeAppliedTo(FileEditor editor) { - return editor.getClass() == myEditorClass && Objects.equals(myVirtualFile, editor.getFile()); + if (editor == null) return false; + if (!Objects.equals(myVirtualFile, editor.getFile())) return false; + if (myState == null) return false; + FileEditorState currentState = editor.getState(FileEditorStateLevel.UNDO); + return myState.getClass() == currentState.getClass(); } public FileEditorState getState() {