diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEvaluationDialog.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEvaluationDialog.java index 37c657d85bfb..df24ad3c7464 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEvaluationDialog.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEvaluationDialog.java @@ -33,7 +33,6 @@ import com.intellij.xdebugger.impl.breakpoints.XExpressionImpl; import com.intellij.xdebugger.impl.settings.XDebuggerSettingsManager; import com.intellij.xdebugger.impl.ui.DebuggerUIUtil; import com.intellij.xdebugger.impl.ui.XDebuggerEditorBase; -import com.intellij.xdebugger.impl.ui.XDebuggerExpressionComboBox; import com.intellij.xdebugger.impl.ui.tree.XDebuggerTree; import com.intellij.xdebugger.impl.ui.tree.XDebuggerTreePanel; import com.intellij.xdebugger.impl.ui.tree.nodes.EvaluatingExpressionRootNode; @@ -193,13 +192,11 @@ public class XDebuggerEvaluationDialog extends DialogWrapper { private void evaluate() { final XDebuggerEditorBase inputEditor = myInputComponent.getInputEditor(); int offset = -1; - Editor editor; + //try to save caret position - if (inputEditor instanceof XDebuggerExpressionComboBox) { - editor = ((XDebuggerExpressionComboBox)inputEditor).getEditor(); - if (editor != null) { - offset = editor.getCaretModel().getOffset(); - } + Editor editor = inputEditor.getEditor(); + if (editor != null) { + offset = editor.getCaretModel().getOffset(); } final XDebuggerTree tree = myTreePanel.getTree(); @@ -213,12 +210,13 @@ public class XDebuggerEvaluationDialog extends DialogWrapper { myResultPanel.invalidate(); //editor is already changed - editor = inputEditor instanceof XDebuggerExpressionComboBox ? ((XDebuggerExpressionComboBox)inputEditor).getEditor() : null; + editor = inputEditor.getEditor(); //selectAll puts focus back inputEditor.selectAll(); //try to restore caret position and clear selection if (offset >= 0 && editor != null) { + offset = Math.min(editor.getDocument().getTextLength(), offset); editor.getCaretModel().moveToOffset(offset); editor.getSelectionModel().setSelection(offset, offset); } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebuggerEditorBase.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebuggerEditorBase.java index 32b3f5511f2e..991036b7f438 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebuggerEditorBase.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebuggerEditorBase.java @@ -22,6 +22,7 @@ import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.DefaultActionGroup; import com.intellij.openapi.editor.Document; +import com.intellij.openapi.editor.Editor; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.LanguageFileType; import com.intellij.openapi.project.Project; @@ -128,6 +129,9 @@ public abstract class XDebuggerEditorBase { return myMode; } + @Nullable + public abstract Editor getEditor(); + public abstract JComponent getComponent(); protected abstract void doSetText(XExpression text); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebuggerMultilineEditor.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebuggerMultilineEditor.java index 95a698832fb3..0c41a5d1015b 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebuggerMultilineEditor.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebuggerMultilineEditor.java @@ -80,6 +80,12 @@ public class XDebuggerMultilineEditor extends XDebuggerEditorBase { return editor != null ? editor.getContentComponent() : null; } + @Nullable + @Override + public Editor getEditor() { + return myEditorTextField.getEditor(); + } + @Override public void selectAll() { myEditorTextField.selectAll();