From 3181d9a5e2443c48a38d545e8e88c3665d69131d Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Wed, 5 Mar 2014 14:11:18 +0100 Subject: [PATCH] CR-IC-4638 EvaluateInConsoleFromTreeAction --- .../console/ConsoleExecuteAction.java | 16 ++++++++-- .../src/messages/ActionsBundle.properties | 7 ++-- .../src/idea/LangActions.xml | 14 ++++---- .../impl/actions/AddToWatchesAction.java | 3 -- ...luateInConsoleFromEditorActionHandler.java | 11 +++++-- .../xdebugger/impl/ui/XDebugSessionTab.java | 3 ++ .../EvaluateInConsoleFromTreeAction.java | 32 +++++++++++++++++++ .../ui/tree/actions/XAddToWatchesAction.java | 4 +-- 8 files changed, 73 insertions(+), 17 deletions(-) create mode 100644 platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/EvaluateInConsoleFromTreeAction.java diff --git a/platform/lang-impl/src/com/intellij/execution/console/ConsoleExecuteAction.java b/platform/lang-impl/src/com/intellij/execution/console/ConsoleExecuteAction.java index a63d1c0a3949..bcb78d83ae64 100644 --- a/platform/lang-impl/src/com/intellij/execution/console/ConsoleExecuteAction.java +++ b/platform/lang-impl/src/com/intellij/execution/console/ConsoleExecuteAction.java @@ -24,6 +24,7 @@ import com.intellij.openapi.actionSystem.EmptyAction; import com.intellij.openapi.command.impl.UndoManagerImpl; import com.intellij.openapi.command.undo.DocumentReferenceManager; import com.intellij.openapi.command.undo.UndoManager; +import com.intellij.openapi.editor.ex.DocumentEx; import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.project.DumbAwareAction; import com.intellij.openapi.util.Condition; @@ -115,8 +116,19 @@ public class ConsoleExecuteAction extends DumbAwareAction { return myEnabledCondition.value(myConsole); } - public void execute(@NotNull TextRange range, @NotNull String text, @NotNull EditorEx editor) { - myConsole.addTextRangeToHistory(range, editor, myExecuteActionHandler.myPreserveMarkup); + public void execute(@Nullable TextRange range, @NotNull String text, @Nullable EditorEx editor) { + if (range == null) { + myConsole.doAddPromptToHistory(); + DocumentEx document = myConsole.getHistoryViewer().getDocument(); + document.insertString(document.getTextLength(), text); + if (!text.endsWith("\n")) { + document.insertString(document.getTextLength(), "\n"); + } + } + else { + assert editor != null; + myConsole.addTextRangeToHistory(range, editor, myExecuteActionHandler.myPreserveMarkup); + } myExecuteActionHandler.addToCommandHistoryAndExecute(myConsole, myConsoleView, text); } diff --git a/platform/platform-resources-en/src/messages/ActionsBundle.properties b/platform/platform-resources-en/src/messages/ActionsBundle.properties index 0fa895e09a4c..79c6129ca776 100644 --- a/platform/platform-resources-en/src/messages/ActionsBundle.properties +++ b/platform/platform-resources-en/src/messages/ActionsBundle.properties @@ -911,8 +911,10 @@ action.XDebugger.JumpToSource.description=Open source of the selected item action.XDebugger.JumpToTypeSource.text=Jump To Type Source action.XDebugger.JumpToTypeSource.description=Open source of the selected value's type action.XDebugger.Inspect.text=Inspect... -action.XDebugger.AddToWatches.text=Add to Watches -action.XDebugger.EvaluateInConsole.text=Evaluate In Console + +action.Debugger.Tree.AddToWatches.text=Add to Watches +action.Debugger.Tree.EvaluateInConsole.text=Evaluate In Console + action.XDebugger.RemoveWatch.text=Remove Watch action.XDebugger.RemoveAllWatches.text=Remove All Watches action.XDebugger.NewWatch.text=New Watch... @@ -951,6 +953,7 @@ action.Debugger.MarkObject.text=Mark Object... action.Debugger.MarkObject.unmark.text=Unmark Object action.Debugger.MarkObject.description=Mark/unmark the object so that it can be visually distinguished in in debugger views action.Debugger.AddToWatch.text=Add to Watches +action.Debugger.EvaluateInConsole.text=Evaluate in Console action.Debugger.AutoRenderer.text=Auto group.EditorPopupMenu.text=Editor Popup Menu group.EditorPopupMenu.description=Editor Popup Menu diff --git a/platform/platform-resources/src/idea/LangActions.xml b/platform/platform-resources/src/idea/LangActions.xml index 13f072504442..3b8798230323 100644 --- a/platform/platform-resources/src/idea/LangActions.xml +++ b/platform/platform-resources/src/idea/LangActions.xml @@ -645,6 +645,7 @@ + @@ -652,6 +653,7 @@ + @@ -667,8 +669,8 @@ - - + + @@ -719,8 +721,8 @@ - - + + @@ -741,8 +743,8 @@ - - + + diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/AddToWatchesAction.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/AddToWatchesAction.java index 6f779e5a91d2..c93496be2699 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/AddToWatchesAction.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/AddToWatchesAction.java @@ -18,9 +18,6 @@ package com.intellij.xdebugger.impl.actions; import com.intellij.xdebugger.impl.DebuggerSupport; import org.jetbrains.annotations.NotNull; -/** - * @author nik - */ final class AddToWatchesAction extends XDebuggerActionBase { public AddToWatchesAction() { super(true); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/handlers/XEvaluateInConsoleFromEditorActionHandler.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/handlers/XEvaluateInConsoleFromEditorActionHandler.java index 880f588d9c2b..fb5f3d7d8b66 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/handlers/XEvaluateInConsoleFromEditorActionHandler.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/handlers/XEvaluateInConsoleFromEditorActionHandler.java @@ -2,6 +2,7 @@ package com.intellij.xdebugger.impl.actions.handlers; import com.intellij.execution.console.ConsoleExecuteAction; import com.intellij.execution.console.LanguageConsoleView; +import com.intellij.execution.ui.ConsoleView; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataContext; @@ -27,10 +28,16 @@ public class XEvaluateInConsoleFromEditorActionHandler extends XAddToWatchesFrom @Nullable private static ConsoleExecuteAction getConsoleExecuteAction(@NotNull XDebugSession session) { - if (!(session.getConsoleView() instanceof LanguageConsoleView)) { + return getConsoleExecuteAction(session.getConsoleView()); + } + + @Nullable + public static ConsoleExecuteAction getConsoleExecuteAction(@Nullable ConsoleView consoleView) { + if (!(consoleView instanceof LanguageConsoleView)) { return null; } - List actions = ActionUtil.getActions(((LanguageConsoleView)session.getConsoleView()).getConsole().getConsoleEditor().getComponent()); + + List actions = ActionUtil.getActions(((LanguageConsoleView)consoleView).getConsole().getConsoleEditor().getComponent()); ConsoleExecuteAction action = ContainerUtil.findInstance(actions, ConsoleExecuteAction.class); return action == null || !action.isEnabled() ? null : action; } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java index e442654c560a..1aa9e2cb53fb 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java @@ -144,6 +144,9 @@ public class XDebugSessionTab extends DebuggerSessionTabBase { if (XWatchesView.DATA_KEY.is(dataId)) { return myWatchesView; } + if (LangDataKeys.CONSOLE_VIEW.is(dataId)) { + return session.getConsoleView(); + } return null; } }); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/EvaluateInConsoleFromTreeAction.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/EvaluateInConsoleFromTreeAction.java new file mode 100644 index 000000000000..5bff527452c4 --- /dev/null +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/EvaluateInConsoleFromTreeAction.java @@ -0,0 +1,32 @@ +package com.intellij.xdebugger.impl.ui.tree.actions; + +import com.intellij.execution.console.ConsoleExecuteAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.LangDataKeys; +import com.intellij.xdebugger.impl.actions.handlers.XEvaluateInConsoleFromEditorActionHandler; +import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +class EvaluateInConsoleFromTreeAction extends XAddToWatchesAction { + @Override + protected boolean isEnabled(@NotNull XValueNodeImpl node, @NotNull AnActionEvent e) { + return super.isEnabled(node, e) && getConsoleExecuteAction(e) != null; + } + + @Nullable + private static ConsoleExecuteAction getConsoleExecuteAction(@NotNull AnActionEvent e) { + return XEvaluateInConsoleFromEditorActionHandler.getConsoleExecuteAction(e.getData(LangDataKeys.CONSOLE_VIEW)); + } + + @Override + protected void perform(XValueNodeImpl node, @NotNull String nodeName, AnActionEvent e) { + ConsoleExecuteAction action = getConsoleExecuteAction(e); + if (action != null) { + String expression = node.getValueContainer().getEvaluationExpression(); + if (expression != null) { + action.execute(null, expression, null); + } + } + } +} \ No newline at end of file diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XAddToWatchesAction.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XAddToWatchesAction.java index a3621cb1a621..eb6c1586f103 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XAddToWatchesAction.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XAddToWatchesAction.java @@ -21,9 +21,9 @@ import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl; import org.jetbrains.annotations.NotNull; /** - * @author nik + * This action works only in the variables view, it is not generic action like {@see com.intellij.xdebugger.impl.actions.AddToWatchesAction} */ -public class XAddToWatchesAction extends XDebuggerTreeActionBase { +class XAddToWatchesAction extends XDebuggerTreeActionBase { @Override protected boolean isEnabled(@NotNull final XValueNodeImpl node, @NotNull AnActionEvent e) { return super.isEnabled(node, e) && node.getValueContainer().getEvaluationExpression() != null && e.getData(XWatchesView.DATA_KEY) != null;