package org.jetbrains.plugins.ruby.motion.run; import com.intellij.execution.ExecutionException; import com.intellij.execution.configurations.ConfigurationFactory; import com.intellij.execution.configurations.GeneralCommandLine; import com.intellij.execution.filters.TextConsoleBuilder; import com.intellij.execution.filters.TextConsoleBuilderFactory; import com.intellij.execution.process.ProcessHandler; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.jetbrains.cidr.execution.debugger.CidrDebuggerSettings; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.ruby.console.config.IrbConsoleBuilder; import org.jetbrains.plugins.ruby.console.config.IrbRunConfiguration; import org.jetbrains.plugins.ruby.console.config.IrbRunConfigurationType; import org.jetbrains.plugins.ruby.motion.RubyMotionUtil; import org.jetbrains.plugins.ruby.ruby.run.configuration.RubyRunner; import org.jetbrains.plugins.ruby.tasks.rake.runConfigurations.RakeConsoleModifier; import org.jetbrains.plugins.ruby.tasks.rake.runConfigurations.RakeRunConfiguration; /** * @author Dennis.Ushakov */ public class SimulatorRakeConsoleModifier implements RakeConsoleModifier { @Override public boolean isApplicable(@NotNull RakeRunConfiguration config) { final Module module = config.getModule(); return RubyMotionUtil.getInstance().hasRubyMotionSupport(module); } @NotNull @Override public TextConsoleBuilder createConsoleBuilder(@NotNull RakeRunConfiguration config) { if (onDevice(config)) { return TextConsoleBuilderFactory.getInstance().createBuilder(config.getProject()); } final ConfigurationFactory factory = IrbRunConfigurationType.getInstance().getConfigurationFactories()[0]; final Project project = config.getProject(); return new IrbConsoleBuilder(project, (IrbRunConfiguration)factory.createTemplateConfiguration(project)); } @NotNull @Override public ProcessHandler createProcessHandler(RakeRunConfiguration config, final GeneralCommandLine cmd, String runnerId) throws ExecutionException { final MotionSimulatorRunExtension.MotionProcessOutputReaders readers = cmd.getUserData(MotionSimulatorRunExtension.FILE_OUTPUT_READERS); cmd.putUserData(MotionSimulatorRunExtension.FILE_OUTPUT_READERS, null); CidrDebuggerSettings.getInstance().VALUES_FILTER_ENABLED = false; assert readers != null; final Module module = config.getModule(); assert module != null; return onDevice(config) ? new MotionDeviceProcessHandler(cmd.createProcess(), cmd, runnerId) : simulator(config) ? new SimulatorConsoleProcessHandler(module, cmd.createProcess(), cmd.getCommandLineString(), readers) : new MotionProcessHandler(module, cmd.createProcess(), cmd.getCommandLineString(), runnerId, readers); } private static boolean simulator(RakeRunConfiguration config) { final Module module = config.getModule(); assert module != null; return RubyMotionUtil.getInstance().getMainRakeTask(module).equals(config.getTaskName()); } private static boolean onDevice(RakeRunConfiguration config) { return config.getTaskName().contains("device"); } @NotNull @Override public String overrideRunnerId(String id) { return RubyRunner.RUBY_RUNNER_ID; } }