package com.intellij.flex.flexunit.execution;
import com.intellij.execution.ExecutionException;
import com.intellij.execution.ExecutionManager;
import com.intellij.execution.configurations.RunProfileState;
import com.intellij.execution.process.ProcessHandler;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.runners.ExecutionUtil;
import com.intellij.execution.ui.RunContentDescriptor;
import com.intellij.lang.javascript.flex.run.FlexRunner;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
class FlexUnitTestRunner extends FlexRunner {
@Override
public void execute(@NotNull final ExecutionEnvironment env, @Nullable final Callback callback) throws ExecutionException {
final Project project = env.getProject();
final RunProfileState state = env.getState();
if (state == null) {
return;
}
Runnable startRunnable = () -> {
try {
if (project.isDisposed()) return;
final RunContentDescriptor descriptor = doExecute(state, env);
if (callback != null) callback.processStarted(descriptor);
if (descriptor != null) {
ExecutionManager.getInstance(project).getContentManager().showRunContent(env.getExecutor(), descriptor);
final ProcessHandler processHandler = descriptor.getProcessHandler();
if (processHandler != null) processHandler.startNotify();
}
}
catch (ExecutionException e) {
ExecutionUtil.handleExecutionError(env, e);
}
};
ExecutionManager.getInstance(project).compileAndRun(startRunnable, env, state, null);
}
}