RunProfileState (@NotNull final Executor executor, @NotNull final ExecutionEnvironment env) { final Project project = env.getProject(); if (myCommandLine == null) { // can return null if creation of cmd line has been cancelled return null; } final CommandLineState commandLineState = new CommandLineState(env) { GeneralCommandLine createCommandLine() { return myCommandLine; } @Override @NotNull protected OSProcessHandler startProcess() throws ExecutionException { final GeneralCommandLine commandLine = createCommandLine(); final OSProcessHandler processHandler = new ColoredProcessHandler(commandLine); ProcessTerminatedListener.attach(processHandler); return processHandler; } @Override @NotNull public ExecutionResult execute(@NotNull final Executor executor, @NotNull ProgramRunner<?> runner) throws ExecutionException { final ExecutionResult result = super.execute(executor, runner); final ProcessHandler processHandler = result.getProcessHandler(); if (processHandler != null) { processHandler.addProcessListener(new ToolProcessAdapter(project, myTool.synchronizeAfterExecution(), getName())); processHandler.addProcessListener(new ProcessAdapter() { @Override public void onTextAvailable(@NotNull ProcessEvent event, @NotNull Key outputType) { if ((outputType == ProcessOutputTypes.STDOUT && myTool.isShowConsoleOnStdOut()) || (outputType == ProcessOutputTypes.STDERR && myTool.isShowConsoleOnStdErr())) { ApplicationManager.getApplication().invokeLater(() -> { RunContentManager.getInstance(project).toFrontRunContent(executor, processHandler); }, project.getDisposed()); } } }); } return result; } }; TextConsoleBuilder builder = TextConsoleBuilderFactory.getInstance().createBuilder(project); final FilterInfo[] outputFilters = myTool.getOutputFilters(); for (FilterInfo outputFilter : outputFilters) { builder.addFilter(new RegexpFilter(project, outputFilter.getRegExp())); } commandLineState.setConsoleBuilder(builder); return commandLineState; }