package org.jetbrains.plugins.ruby.ruby.codeInsight.types;
import com.intellij.execution.ExecutionException;
import com.intellij.execution.configurations.RunProfile;
import com.intellij.execution.configurations.RunProfileState;
import com.intellij.execution.executors.CollectTypeExecutor;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.ui.RunContentDescriptor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.ruby.ruby.run.configuration.AbstractRubyRunConfiguration;
import org.jetbrains.plugins.ruby.ruby.run.configuration.CollectTypeExecSettings;
import org.jetbrains.plugins.ruby.ruby.run.configuration.RubyAbstractCommandLineState;
import org.jetbrains.plugins.ruby.ruby.run.configuration.RubyRunner;
public class RubyCollectTypeRunner extends RubyRunner {
@NotNull
private static final String RUBY_COLLECT_TYPE_RUNNER_ID = "RubyCollectType";
@Nullable
@Override
protected RunContentDescriptor doExecute(@NotNull final RunProfileState state,
@NotNull final ExecutionEnvironment env) throws ExecutionException {
if (state instanceof RubyAbstractCommandLineState) {
final AbstractRubyRunConfiguration newConfig = ((RubyAbstractCommandLineState) state).getConfig().clone();
CollectTypeExecSettings.putTo(newConfig, CollectTypeExecSettings.createSettings(true));
final RunProfileState newState = newConfig.getState(env.getExecutor(), env);
if (newState != null) {
return super.doExecute(newState, env);
}
}
return null;
}
@Override
public boolean canRun(@NotNull final String executorId, @NotNull final RunProfile profile) {
return executorId.equals(CollectTypeExecutor.EXECUTOR_ID) && profile instanceof AbstractRubyRunConfiguration;
}
@NotNull
@Override
public String getRunnerId() {
return RUBY_COLLECT_TYPE_RUNNER_ID;
}
}