summaryrefslogtreecommitdiff
path: root/platform/lang-impl/src/com/intellij/execution/console
diff options
context:
space:
mode:
Diffstat (limited to 'platform/lang-impl/src/com/intellij/execution/console')
-rw-r--r--platform/lang-impl/src/com/intellij/execution/console/ConsoleExecuteAction.java29
-rw-r--r--platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleBuilder.java23
-rw-r--r--platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java5
-rw-r--r--platform/lang-impl/src/com/intellij/execution/console/UseConsoleInputAction.java56
4 files changed, 103 insertions, 10 deletions
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 fcec06644765..f5bec9ac6be4 100644
--- a/platform/lang-impl/src/com/intellij/execution/console/ConsoleExecuteAction.java
+++ b/platform/lang-impl/src/com/intellij/execution/console/ConsoleExecuteAction.java
@@ -18,6 +18,7 @@ package com.intellij.execution.console;
import com.intellij.codeInsight.lookup.Lookup;
import com.intellij.codeInsight.lookup.LookupManager;
import com.intellij.execution.process.ConsoleHistoryModel;
+import com.intellij.execution.ui.ConsoleViewContentType;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.EmptyAction;
@@ -39,7 +40,7 @@ public class ConsoleExecuteAction extends DumbAwareAction {
private final LanguageConsoleView myConsoleView;
private final LanguageConsoleImpl myConsole;
- private final ConsoleExecuteActionHandler myExecuteActionHandler;
+ final ConsoleExecuteActionHandler myExecuteActionHandler;
private final Condition<LanguageConsoleImpl> myEnabledCondition;
@SuppressWarnings("UnusedDeclaration")
@@ -95,7 +96,7 @@ public class ConsoleExecuteAction extends DumbAwareAction {
}
@Override
- public final void update(AnActionEvent e) {
+ public final void update(@NotNull AnActionEvent e) {
EditorEx editor = myConsole.getConsoleEditor();
boolean enabled = !editor.isRendererMode() && isEnabled() &&
(myExecuteActionHandler.isEmptyCommandExecutionAllowed() || !StringUtil.isEmptyOrSpaces(editor.getDocument().getCharsSequence()));
@@ -109,7 +110,7 @@ public class ConsoleExecuteAction extends DumbAwareAction {
}
@Override
- public final void actionPerformed(AnActionEvent e) {
+ public final void actionPerformed(@NotNull AnActionEvent e) {
myExecuteActionHandler.runExecuteAction(myConsole, myConsoleView);
}
@@ -139,6 +140,8 @@ public class ConsoleExecuteAction extends DumbAwareAction {
private boolean myAddToHistory = true;
final boolean myPreserveMarkup;
+ boolean useProcessStdIn;
+
public ConsoleExecuteActionHandler(boolean preserveMarkup) {
myCommandHistoryModel = new ConsoleHistoryModel();
myPreserveMarkup = preserveMarkup;
@@ -156,19 +159,25 @@ public class ConsoleExecuteAction extends DumbAwareAction {
myAddToHistory = addCurrentToHistory;
}
- /**
- * @deprecated
- */
protected void beforeExecution(@NotNull LanguageConsoleImpl console) {
}
protected void runExecuteAction(@NotNull LanguageConsoleImpl console, @Nullable LanguageConsoleView consoleView) {
- //noinspection deprecation
- beforeExecution(console);
+ if (!useProcessStdIn) {
+ beforeExecution(console);
+ }
- String text = console.prepareExecuteAction(myAddToHistory, myPreserveMarkup, true);
+ String text = console.prepareExecuteAction(myAddToHistory && !useProcessStdIn, myPreserveMarkup, true);
((UndoManagerImpl)UndoManager.getInstance(console.getProject())).invalidateActionsFor(DocumentReferenceManager.getInstance().create(console.getCurrentEditor().getDocument()));
- addToCommandHistoryAndExecute(console, consoleView, text);
+
+ if (useProcessStdIn) {
+ assert consoleView != null;
+ consoleView.print(text, ConsoleViewContentType.USER_INPUT);
+ consoleView.print("\n", ConsoleViewContentType.USER_INPUT);
+ }
+ else {
+ addToCommandHistoryAndExecute(console, consoleView, text);
+ }
}
private void addToCommandHistoryAndExecute(@NotNull LanguageConsoleImpl console, @Nullable LanguageConsoleView consoleView, @NotNull String text) {
diff --git a/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleBuilder.java b/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleBuilder.java
index 329b9f0e3f13..a20b8c706ff2 100644
--- a/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleBuilder.java
+++ b/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleBuilder.java
@@ -1,6 +1,8 @@
package com.intellij.execution.console;
+import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
import com.intellij.execution.process.ProcessHandler;
+import com.intellij.ide.util.PropertiesComponent;
import com.intellij.lang.Language;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.editor.Document;
@@ -60,6 +62,8 @@ public final class LanguageConsoleBuilder {
private boolean oneLineInput;
+ private String processInputStateKey;
+
// todo to be removed
public LanguageConsoleBuilder(@SuppressWarnings("NullableProblems") @NotNull LanguageConsoleView consoleView) {
this.consoleView = consoleView;
@@ -87,6 +91,7 @@ public final class LanguageConsoleBuilder {
return this;
}
+ @NotNull
public LanguageConsoleBuilder initActions(@NotNull BaseConsoleExecuteActionHandler executeActionHandler, @NotNull String historyType) {
if (consoleView == null) {
this.executeActionHandler = executeActionHandler;
@@ -150,6 +155,13 @@ public final class LanguageConsoleBuilder {
return this;
}
+ @NotNull
+ public LanguageConsoleBuilder processInputStateKey(@Nullable String value) {
+ processInputStateKey = value;
+ return this;
+ }
+
+ @NotNull
public LanguageConsoleView build(@NotNull Project project, @NotNull Language language) {
GutteredLanguageConsole console = new GutteredLanguageConsole(language.getDisplayName() + " Console", project, language, gutterContentProvider, psiFileFactory);
if (oneLineInput) {
@@ -160,6 +172,17 @@ public final class LanguageConsoleBuilder {
assert historyType != null;
doInitAction(consoleView, executeActionHandler, historyType);
}
+
+ if (processInputStateKey != null) {
+ assert executeActionHandler != null;
+ if (PropertiesComponent.getInstance().getBoolean(processInputStateKey, false)) {
+ executeActionHandler.useProcessStdIn = true;
+ DaemonCodeAnalyzer daemonCodeAnalyzer = DaemonCodeAnalyzer.getInstance(consoleView.getProject());
+ daemonCodeAnalyzer.setHighlightingEnabled(consoleView.getConsole().getFile(), false);
+ }
+ consoleView.addCustomConsoleAction(new UseConsoleInputAction(processInputStateKey));
+ }
+
console.initComponents();
return consoleView;
}
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 d7f40f35a219..711184d9b705 100644
--- a/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java
+++ b/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java
@@ -659,6 +659,7 @@ public class LanguageConsoleImpl implements Disposable, TypeSafeDataProvider {
if (myCurrentEditor != null && myCurrentEditor.isDisposed()) {
myCurrentEditor = null;
}
+ if (!isValid()) return;
ApplicationManager.getApplication().runReadAction(myUiUpdateRunnable);
}
}
@@ -680,6 +681,10 @@ public class LanguageConsoleImpl implements Disposable, TypeSafeDataProvider {
return ObjectUtils.assertNotNull(myVirtualFile.getLanguage());
}
+ public boolean isValid() {
+ return myVirtualFile.isValid() && myProject.isOpen();
+ }
+
public void setLanguage(@NotNull Language language) {
myVirtualFile.setLanguage(language);
myVirtualFile.setContent(myEditorDocument, myEditorDocument.getText(), false);
diff --git a/platform/lang-impl/src/com/intellij/execution/console/UseConsoleInputAction.java b/platform/lang-impl/src/com/intellij/execution/console/UseConsoleInputAction.java
new file mode 100644
index 000000000000..5b450e3bd154
--- /dev/null
+++ b/platform/lang-impl/src/com/intellij/execution/console/UseConsoleInputAction.java
@@ -0,0 +1,56 @@
+package com.intellij.execution.console;
+
+import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
+import com.intellij.icons.AllIcons;
+import com.intellij.ide.util.PropertiesComponent;
+import com.intellij.openapi.actionSystem.AnAction;
+import com.intellij.openapi.actionSystem.AnActionEvent;
+import com.intellij.openapi.actionSystem.LangDataKeys;
+import com.intellij.openapi.actionSystem.ToggleAction;
+import com.intellij.openapi.actionSystem.ex.ActionUtil;
+import com.intellij.openapi.project.DumbAware;
+import com.intellij.psi.PsiFile;
+import com.intellij.util.containers.ContainerUtil;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+final class UseConsoleInputAction extends ToggleAction implements DumbAware {
+ private final String processInputStateKey;
+ private boolean useProcessStdIn;
+
+ public UseConsoleInputAction(@NotNull String processInputStateKey) {
+ super("Use Console Input", null, AllIcons.Debugger.CommandLine);
+
+ this.processInputStateKey = processInputStateKey;
+ useProcessStdIn = PropertiesComponent.getInstance().getBoolean(processInputStateKey, false);
+ }
+
+ @Override
+ public boolean isSelected(@Nullable AnActionEvent event) {
+ return !useProcessStdIn;
+ }
+
+ @Override
+ public void setSelected(AnActionEvent event, boolean state) {
+ useProcessStdIn = !state;
+
+ LanguageConsoleView consoleView = (LanguageConsoleView)event.getData(LangDataKeys.CONSOLE_VIEW);
+ assert consoleView != null;
+ DaemonCodeAnalyzer daemonCodeAnalyzer = DaemonCodeAnalyzer.getInstance(consoleView.getProject());
+ PsiFile file = consoleView.getConsole().getFile();
+ daemonCodeAnalyzer.setHighlightingEnabled(file, state);
+ daemonCodeAnalyzer.restart(file);
+ if (state) {
+ PropertiesComponent.getInstance().unsetValue(processInputStateKey);
+ }
+ else {
+ PropertiesComponent.getInstance().setValue(processInputStateKey, "true");
+ }
+
+ List<AnAction> actions = ActionUtil.getActions(consoleView.getConsole().getConsoleEditor().getComponent());
+ ConsoleExecuteAction action = ContainerUtil.findInstance(actions, ConsoleExecuteAction.class);
+ action.myExecuteActionHandler.useProcessStdIn = !state;
+ }
+} \ No newline at end of file