From 0aa3d9d80528f54d9faa2933a5f5677b0b77c326 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Mon, 9 Sep 2013 11:53:52 +0200 Subject: [PATCH] continue WEB-1171 javascript live console: add history actions --- .../console/LanguageConsoleImpl.java | 1 + .../AbstractConsoleRunnerWithHistory.java | 24 +++----------- .../runners/ConsoleRunnerWithHistory.java | 13 -------- .../runners/LanguageConsoleBuilder.java | 32 +++++++++++++++++++ .../ProcessBackedConsoleExecuteAction.java | 21 ++++++++++++ 5 files changed, 58 insertions(+), 33 deletions(-) delete mode 100644 platform/lang-impl/src/com/intellij/execution/runners/ConsoleRunnerWithHistory.java create mode 100644 platform/lang-impl/src/com/intellij/execution/runners/LanguageConsoleBuilder.java create mode 100644 platform/lang-impl/src/com/intellij/execution/runners/ProcessBackedConsoleExecuteAction.java diff --git a/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java b/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java index 680f936eed25..b985b1929ba7 100644 --- a/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java @@ -86,6 +86,7 @@ import java.util.concurrent.atomic.AtomicBoolean; /** * @author Gregory.Shrago + * In case of REPL consider to use {@link com.intellij.execution.runners.LanguageConsoleBuilder} */ public class LanguageConsoleImpl implements Disposable, TypeSafeDataProvider { private static final Logger LOG = Logger.getInstance("#" + LanguageConsoleImpl.class.getName()); diff --git a/platform/lang-impl/src/com/intellij/execution/runners/AbstractConsoleRunnerWithHistory.java b/platform/lang-impl/src/com/intellij/execution/runners/AbstractConsoleRunnerWithHistory.java index ea1b098b80b3..a0c840d5d338 100644 --- a/platform/lang-impl/src/com/intellij/execution/runners/AbstractConsoleRunnerWithHistory.java +++ b/platform/lang-impl/src/com/intellij/execution/runners/AbstractConsoleRunnerWithHistory.java @@ -47,7 +47,7 @@ import java.util.List; * This class provides basic functionality for running consoles. * It launches external process and handles line input with history */ -public abstract class AbstractConsoleRunnerWithHistory extends ConsoleRunnerWithHistory { +public abstract class AbstractConsoleRunnerWithHistory { private final String myConsoleTitle; private ProcessHandler myProcessHandler; @@ -55,11 +55,12 @@ public abstract class AbstractConsoleRunnerWithHistory { - protected final Project myProject; - - public ConsoleRunnerWithHistory(@NotNull Project project) { - myProject = project; - } -} \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/execution/runners/LanguageConsoleBuilder.java b/platform/lang-impl/src/com/intellij/execution/runners/LanguageConsoleBuilder.java new file mode 100644 index 000000000000..a64af30d8e25 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/execution/runners/LanguageConsoleBuilder.java @@ -0,0 +1,32 @@ +package com.intellij.execution.runners; + +import com.intellij.execution.console.ConsoleHistoryController; +import com.intellij.execution.console.LanguageConsoleImpl; +import com.intellij.execution.console.LanguageConsoleView; +import com.intellij.execution.process.ProcessHandler; +import org.jetbrains.annotations.NotNull; + +public class LanguageConsoleBuilder { + private LanguageConsoleImpl myConsole; + private ProcessHandler myProcessHandler; + + public LanguageConsoleBuilder console(@NotNull LanguageConsoleView console) { + myConsole = console.getConsole(); + return this; + } + + public LanguageConsoleBuilder processHandler(ProcessHandler processHandler) { + myProcessHandler = processHandler; + return this; + } + + public LanguageConsoleBuilder initActions(@NotNull BaseConsoleExecuteActionHandler executeActionHandler, @NotNull String historyType) { + ConsoleExecuteAction action = myProcessHandler == null + ? new ConsoleExecuteAction(myConsole, executeActionHandler) + : new ProcessBackedConsoleExecuteAction(myConsole, myProcessHandler, executeActionHandler); + action.registerCustomShortcutSet(action.getShortcutSet(), myConsole.getConsoleEditor().getComponent()); + + new ConsoleHistoryController(historyType, "", myConsole, executeActionHandler.getConsoleHistoryModel()).install(); + return this; + } +} \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/execution/runners/ProcessBackedConsoleExecuteAction.java b/platform/lang-impl/src/com/intellij/execution/runners/ProcessBackedConsoleExecuteAction.java new file mode 100644 index 000000000000..7132a2ef99ee --- /dev/null +++ b/platform/lang-impl/src/com/intellij/execution/runners/ProcessBackedConsoleExecuteAction.java @@ -0,0 +1,21 @@ +package com.intellij.execution.runners; + +import com.intellij.execution.console.LanguageConsoleImpl; +import com.intellij.execution.process.ProcessHandler; + +class ProcessBackedConsoleExecuteAction extends ConsoleExecuteAction { + private final ProcessHandler myProcessHandler; + + public ProcessBackedConsoleExecuteAction(LanguageConsoleImpl languageConsole, + ProcessHandler processHandler, + BaseConsoleExecuteActionHandler consoleExecuteActionHandler) { + super(languageConsole, consoleExecuteActionHandler); + + myProcessHandler = processHandler; + } + + @Override + protected boolean isEnabled() { + return !myProcessHandler.isProcessTerminated(); + } +} \ No newline at end of file