boolean (AnActionEvent event, DataContext dataContext, long executionId, @Nullable final ProcessListener processListener) { final Project project = CommonDataKeys.PROJECT.getData(dataContext); if (project == null) { return false; } FileDocumentManager.getInstance().saveAllDocuments(); try { if (isUseConsole()) { ExecutionEnvironment environment = ExecutionEnvironmentBuilder.create(project, DefaultRunExecutor.getRunExecutorInstance(), new ToolRunProfile(this, dataContext)) .build(new ProgramRunner.Callback() { @Override public void processStarted(RunContentDescriptor descriptor) { ProcessHandler processHandler = descriptor.getProcessHandler(); if (processHandler != null && processListener != null) { LOG.assertTrue(!processHandler.isStartNotified(), "ProcessHandler is already startNotified, the listener won't be correctly notified"); processHandler.addProcessListener(processListener); } } @Override public void processNotStarted() { if (processListener != null) { processListener.processNotStarted(); } } }); if (environment.getState() == null) { return false; } environment.setExecutionId(executionId); environment.getRunner().execute(environment); } else { GeneralCommandLine commandLine = createCommandLine(dataContext); if (commandLine == null) { return false; } OSProcessHandler handler = new OSProcessHandler(commandLine); handler.addProcessListener(new ToolProcessAdapter(project, synchronizeAfterExecution(), getName())); if (processListener != null) { handler.addProcessListener(processListener); } handler.startNotify(); } } catch (ExecutionException ex) { ExecutionErrorDialog.show(ex, ToolsBundle.message("tools.process.start.error"), project); notifyCouldNotStart(processListener); return false; } return true; }