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; } }