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 com.intellij.execution.process.ProcessHandler;
import jetbrains.mps.baseLanguage.tuples.runtime.Tuples;
import java.io.File;
import jetbrains.mps.execution.api.commands.OutputRedirector;
import com.intellij.execution.process.ProcessAdapter;
import com.intellij.execution.process.ProcessEvent;
import jetbrains.mps.util.FileUtil;
import com.intellij.execution.ui.ConsoleView;
import jetbrains.mps.execution.api.configurations.ConsoleCreator;
import jetbrains.mps.ide.actions.StandaloneMPSStackTraceFilter;
import jetbrains.mps.execution.api.configurations.DefaultExecutionResult;
import jetbrains.mps.execution.api.configurations.DefaultExecutionConsole;
import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes;
import jetbrains.mps.debug.api.run.IDebuggerConfiguration;
import com.intellij.execution.executors.DefaultRunExecutor;
import com.intellij.execution.executors.DefaultDebugExecutor;
public class MPSInstance_Configuration_RunProfileState extends DebuggerRunProfileState implements RunProfileState {
@NotNull
private final MPSInstance_Configuration myRunConfiguration;
@NotNull
private final ExecutionEnvironment myEnvironment;
public MPSInstance_Configuration_RunProfileState(@NotNull MPSInstance_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();
ProcessHandler process;
final Tuples._2<File, File> files = myRunConfiguration.getMpsSettings().prepareFilesToOpenAndToDelete(project);
process = new Mps_Command().setVirtualMachineParameters_String(myRunConfiguration.getMpsSettings().getVmOptions()).setJrePath_String(myRunConfiguration.getMpsSettings().getJrePath()).setConfigurationPath_String(myRunConfiguration.getMpsSettings().expandPath(myRunConfiguration.getMpsSettings().getConfigurationPath())).setSystemPath_String(myRunConfiguration.getMpsSettings().expandPath(myRunConfiguration.getMpsSettings().getSystemPath())).setDebuggerSettings_String(myDebuggerSettings.getCommandLine(true)).createProcess(files._0());
if (files._1() != null) {
OutputRedirector.redirect(process, new ProcessAdapter() {
@Override
public void processTerminated(ProcessEvent event) {
super.processTerminated(event);
FileUtil.delete(files._1());
}
});
}
ConsoleView console = ConsoleCreator.createConsoleView(project, false);
console.addMessageFilter(new StandaloneMPSStackTraceFilter(project));
{
ProcessHandler _processHandler = process;
final ConsoleView _consoleView = console;
_consoleView.attachToProcess(_processHandler);
return new DefaultExecutionResult(_processHandler, new DefaultExecutionConsole(_consoleView.getComponent(), new _FunctionTypes._void_P0_E0() {
public void invoke() {
_consoleView.dispose();
}
}));
}
}
@NotNull
public IDebuggerConfiguration getDebuggerConfiguration() {
return Mps_Command.getDebuggerConfiguration();
}
public static boolean canExecute(String executorId) {
if (DefaultRunExecutor.EXECUTOR_ID.equals(executorId)) {
return true;
}
if (DefaultDebugExecutor.EXECUTOR_ID.equals(executorId)) {
return true;
}
return false;
}
}