package jetbrains.mps.execution.configurations.implementation.plugin.plugin;
/*Generated by MPS */
import jetbrains.mps.debug.api.run.DebuggerRunProfileState;
import com.intellij.execution.configurations.RunProfileState;
import org.jetbrains.annotations.NotNull;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.Executor;
import com.intellij.execution.configurations.ConfigurationPerRunnerSettings;
import com.intellij.execution.configurations.RunnerSettings;
import org.jetbrains.annotations.Nullable;
import com.intellij.execution.ExecutionResult;
import com.intellij.execution.runners.ProgramRunner;
import com.intellij.execution.ExecutionException;
import com.intellij.openapi.project.Project;
import jetbrains.mps.baseLanguage.unitTest.execution.settings.JUnitSettings_Configuration;
import com.intellij.execution.executors.DefaultDebugExecutor;
import jetbrains.mps.project.MPSProject;
import jetbrains.mps.ide.project.ProjectHelper;
import java.util.List;
import jetbrains.mps.baseLanguage.unitTest.execution.client.ITestNodeWrapper;
import jetbrains.mps.baseLanguage.unitTest.execution.client.TestRunState;
import jetbrains.mps.baseLanguage.unitTest.execution.client.TestEventsDispatcher;
import com.intellij.execution.process.ProcessHandler;
import jetbrains.mps.baseLanguage.unitTest.execution.tool.UnitTestViewComponent;
import com.intellij.execution.process.ProcessListener;
import jetbrains.mps.baseLanguage.unitTest.execution.client.UnitTestProcessListener;
import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes;
import jetbrains.mps.execution.api.configurations.DefaultExecutionResult;
import jetbrains.mps.execution.api.configurations.DefaultExecutionConsole;
import jetbrains.mps.debug.api.run.IDebuggerConfiguration;
import jetbrains.mps.debug.api.IDebuggerSettings;
import jetbrains.mps.debugger.java.api.settings.LocalConnectionSettings;
import jetbrains.mps.debug.api.IDebugger;
import jetbrains.mps.debug.api.Debuggers;
import com.intellij.execution.executors.DefaultRunExecutor;
public class JUnitTests_Configuration_RunProfileState extends DebuggerRunProfileState implements RunProfileState {
@NotNull
private final JUnitTests_Configuration myRunConfiguration;
@NotNull
private final ExecutionEnvironment myEnvironment;
public JUnitTests_Configuration_RunProfileState(@NotNull JUnitTests_Configuration configuration, @NotNull Executor executor, @NotNull ExecutionEnvironment environment) {
myRunConfiguration = configuration;
myEnvironment = environment;
}
public ConfigurationPerRunnerSettings getConfigurationSettings() {
return null;
}
public RunnerSettings getRunnerSettings() {
return null;
}
@Nullable
public ExecutionResult execute(Executor executor, @NotNull ProgramRunner runner) throws ExecutionException {
Project project = myEnvironment.getProject();
JUnitSettings_Configuration jUnitSettings = myRunConfiguration.getJUnitSettings();
boolean debugExecutor = executor.getId().equals(DefaultDebugExecutor.EXECUTOR_ID);
jUnitSettings.setDebug(debugExecutor);
MPSProject mpsProject = ProjectHelper.fromIdeaProject(project);
List<ITestNodeWrapper> testNodes = jUnitSettings.getTests(mpsProject);
TestRunState runState = new TestRunState(testNodes, mpsProject);
TestEventsDispatcher eventsDispatcher = new TestEventsDispatcher(runState);
jetbrains.mps.execution.configurations.implementation.plugin.plugin.Executor processExecutor;
if (jUnitSettings.canExecuteInProcess(testNodes)) {
processExecutor = new JUnitInProcessExecutor(testNodes, eventsDispatcher);
} else {
processExecutor = new JUnitExecutor(project, executor, jUnitSettings, myDebuggerSettings, myRunConfiguration.getJavaRunParameters(), testNodes);
}
ProcessHandler process = processExecutor.execute();
final UnitTestViewComponent testViewComponent = myRunConfiguration.createTestViewComponent(runState, process);
ProcessListener listener = new UnitTestProcessListener(eventsDispatcher);
_FunctionTypes._void_P0_E0 disposeHandler = new _FunctionTypes._void_P0_E0() {
public void invoke() {
testViewComponent.dispose();
}
};
{
ProcessHandler _processHandler = process;
_processHandler.addProcessListener(listener);
return new DefaultExecutionResult(_processHandler, new DefaultExecutionConsole(testViewComponent, disposeHandler));
}
}
@NotNull
public IDebuggerConfiguration getDebuggerConfiguration() {
return new IDebuggerConfiguration() {
@Nullable
public IDebuggerSettings createDebuggerSettings() {
return new LocalConnectionSettings(true);
}
public IDebugger getDebugger() {
return Debuggers.getInstance().getDebuggerByName("Java");
}
};
}
public static boolean canExecute(String executorId) {
if (DefaultRunExecutor.EXECUTOR_ID.equals(executorId)) {
return true;
}
if (DefaultDebugExecutor.EXECUTOR_ID.equals(executorId)) {
return true;
}
return false;
}
}