package org.elixir_lang.mix.runner; import com.intellij.execution.ExecutionException; import com.intellij.execution.ExecutionResult; import com.intellij.execution.Executor; import com.intellij.execution.configurations.CommandLineState; import com.intellij.execution.configurations.GeneralCommandLine; import com.intellij.execution.filters.TextConsoleBuilder; import com.intellij.execution.filters.TextConsoleBuilderFactory; import com.intellij.execution.filters.TextConsoleBuilderImpl; 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 org.elixir_lang.console.ElixirConsoleUtil; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; import static org.elixir_lang.mix.runner.MixRunningStateUtil.runMix; /** * Created by zyuyou on 15/7/8. * https://github.com/ignatov/intellij-erlang/blob/master/src/org/intellij/erlang/rebar/runner/RebarRunningState.java */ public class MixRunningState extends CommandLineState { protected final MixRunConfigurationBase myConfiguration; public MixRunningState(@NotNull ExecutionEnvironment environment, MixRunConfigurationBase configuration) { super(environment); myConfiguration = configuration; } @NotNull @Override public ExecutionResult execute(@NotNull Executor executor, @NotNull ProgramRunner runner) throws ExecutionException { TextConsoleBuilder consoleBuilder = new TextConsoleBuilderImpl(myConfiguration.getProject()) { @Override public ConsoleView getConsole() { ConsoleView consoleView = super.getConsole(); ElixirConsoleUtil.attachFilters(myConfiguration.getProject(), consoleView); return consoleView; } }; setConsoleBuilder(consoleBuilder); return super.execute(executor, runner); } @NotNull @Override protected ProcessHandler startProcess() throws ExecutionException { GeneralCommandLine commandLine = MixRunningStateUtil.commandLine( myConfiguration, setupElixirParams(), myConfiguration.getMixArgs() ); return runMix(myConfiguration.getProject(), commandLine); } @NotNull public ConsoleView createConsoleView(Executor executor) { TextConsoleBuilder consoleBuilder = TextConsoleBuilderFactory.getInstance().createBuilder(myConfiguration.getProject()); return consoleBuilder.getConsole(); } @NotNull public List<String> setupElixirParams() throws ExecutionException { return new ArrayList<>(); } }