diff --git a/platform/lang-api/src/com/intellij/execution/configurations/CommandLineState.java b/platform/lang-api/src/com/intellij/execution/configurations/CommandLineState.java index 8703cd4128dc..f1dd5ce22ae7 100644 --- a/platform/lang-api/src/com/intellij/execution/configurations/CommandLineState.java +++ b/platform/lang-api/src/com/intellij/execution/configurations/CommandLineState.java @@ -2,7 +2,6 @@ package com.intellij.execution.configurations; import com.intellij.execution.*; -import com.intellij.execution.executors.DefaultRunExecutor; import com.intellij.execution.filters.Filter; import com.intellij.execution.filters.TextConsoleBuilder; import com.intellij.execution.filters.TextConsoleBuilderFactory; @@ -10,13 +9,7 @@ import com.intellij.execution.process.ProcessHandler; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.runners.ProgramRunner; import com.intellij.execution.ui.ConsoleView; -import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.AnAction; -import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.actionSystem.Presentation; -import com.intellij.openapi.actionSystem.ToggleAction; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; import com.intellij.psi.search.GlobalSearchScope; import org.jetbrains.annotations.NotNull; @@ -96,10 +89,7 @@ public abstract class CommandLineState implements RunProfileState { @NotNull protected AnAction[] createActions(final ConsoleView console, final ProcessHandler processHandler, Executor executor) { - if (console == null || !console.canPause() || (executor != null && !DefaultRunExecutor.EXECUTOR_ID.equals(executor.getId()))) { - return AnAction.EMPTY_ARRAY; - } - return new AnAction[]{new PauseOutputAction(console, processHandler)}; + return AnAction.EMPTY_ARRAY; } public TextConsoleBuilder getConsoleBuilder() { @@ -109,49 +99,4 @@ public abstract class CommandLineState implements RunProfileState { public void setConsoleBuilder(final TextConsoleBuilder consoleBuilder) { myConsoleBuilder = consoleBuilder; } - - protected static class PauseOutputAction extends ToggleAction implements DumbAware{ - private final ConsoleView myConsole; - private final ProcessHandler myProcessHandler; - - public PauseOutputAction(final ConsoleView console, final ProcessHandler processHandler) { - super(ExecutionBundle.message("run.configuration.pause.output.action.name"), null, AllIcons.Actions.Pause); - myConsole = console; - myProcessHandler = processHandler; - } - - @Override - public boolean isSelected(@NotNull final AnActionEvent event) { - return myConsole.isOutputPaused(); - } - - @Override - public void setSelected(@NotNull final AnActionEvent event, final boolean flag) { - myConsole.setOutputPaused(flag); - ApplicationManager.getApplication().invokeLater(() -> update(event)); - } - - @Override - public void update(@NotNull final AnActionEvent event) { - super.update(event); - final Presentation presentation = event.getPresentation(); - final boolean isRunning = myProcessHandler != null && !myProcessHandler.isProcessTerminated(); - if (isRunning) { - presentation.setEnabled(true); - } - else { - if (!myConsole.canPause()) { - presentation.setEnabled(false); - return; - } - if (!myConsole.hasDeferredOutput()) { - presentation.setEnabled(false); - } - else { - presentation.setEnabled(true); - myConsole.performWhenNoDeferredOutput(() -> update(event)); - } - } - } - } } diff --git a/platform/lang-impl/src/com/intellij/execution/actions/PauseOutputAction.java b/platform/lang-impl/src/com/intellij/execution/actions/PauseOutputAction.java new file mode 100644 index 000000000000..0106fcae9117 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/execution/actions/PauseOutputAction.java @@ -0,0 +1,64 @@ +// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package com.intellij.execution.actions; + +import com.intellij.execution.ExecutionBundle; +import com.intellij.execution.process.ProcessHandler; +import com.intellij.execution.ui.ConsoleView; +import com.intellij.execution.ui.RunContentDescriptor; +import com.intellij.icons.AllIcons; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.LangDataKeys; +import com.intellij.openapi.actionSystem.Presentation; +import com.intellij.openapi.actionSystem.ToggleAction; +import com.intellij.openapi.project.DumbAware; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class PauseOutputAction extends ToggleAction implements DumbAware { + public PauseOutputAction() { + super(ExecutionBundle.message("run.configuration.pause.output.action.name"), null, AllIcons.Actions.Pause); + } + + @Nullable + private static ConsoleView getConsoleView(AnActionEvent event) { + return event.getData(LangDataKeys.CONSOLE_VIEW); + } + + @Override + public boolean isSelected(@NotNull AnActionEvent event) { + ConsoleView consoleView = getConsoleView(event); + return consoleView != null && consoleView.isOutputPaused(); + } + + @Override + public void setSelected(@NotNull AnActionEvent event, boolean flag) { + ConsoleView consoleView = getConsoleView(event); + if (consoleView != null) { + consoleView.setOutputPaused(flag); + } + } + + @Override + public void update(@NotNull AnActionEvent event) { + super.update(event); + final Presentation presentation = event.getPresentation(); + RunContentDescriptor descriptor = StopAction.getRecentlyStartedContentDescriptor(event.getDataContext()); + ProcessHandler handler = descriptor != null ? descriptor.getProcessHandler() : null; + if (handler != null && !handler.isProcessTerminated()) { + presentation.setEnabled(true); + } + else { + ConsoleView consoleView = getConsoleView(event); + if (consoleView == null || !consoleView.canPause()) { + presentation.setEnabled(false); + return; + } + if (!consoleView.hasDeferredOutput()) { + presentation.setEnabled(false); + } + else { + presentation.setEnabled(true); + } + } + } + } \ No newline at end of file diff --git a/platform/platform-resources/src/idea/PlatformActions.xml b/platform/platform-resources/src/idea/PlatformActions.xml index 53d30ba89a80..98e07dc4515e 100644 --- a/platform/platform-resources/src/idea/PlatformActions.xml +++ b/platform/platform-resources/src/idea/PlatformActions.xml @@ -640,6 +640,7 @@ +