package org.jetbrains.plugins.ruby.motion.run;
import com.intellij.execution.configurations.RunProfile;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.util.io.FileUtilRt;
import com.intellij.xdebugger.breakpoints.XBreakpoint;
import com.intellij.xdebugger.breakpoints.XBreakpointProperties;
import com.intellij.xdebugger.breakpoints.XLineBreakpoint;
import com.intellij.xdebugger.evaluation.XDebuggerEditorsProvider;
import com.jetbrains.cidr.execution.debugger.CidrDebugProcess;
import com.jetbrains.cidr.execution.debugger.CidrDebuggerLanguageSupportFactory;
import com.jetbrains.cidr.execution.debugger.CidrEvaluator;
import com.jetbrains.cidr.execution.debugger.CidrStackFrame;
import com.jetbrains.cidr.execution.debugger.evaluation.CidrDebuggerTypesHelper;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.ruby.ruby.debugger.impl.RubyDebuggerEditorsProvider;
import org.jetbrains.plugins.ruby.ruby.lang.RubyFileType;
import org.jetbrains.plugins.ruby.ruby.run.configuration.AbstractRubyRunConfiguration;
/**
* @author Dennis.Ushakov
*/
public class MotionDebuggerLanguageSupportFactory extends CidrDebuggerLanguageSupportFactory {
@Nullable
@Override
public XDebuggerEditorsProvider createEditor(RunProfile profile) {
if (profile instanceof AbstractRubyRunConfiguration) {
return new RubyDebuggerEditorsProvider();
}
return null;
}
@Nullable
@Override
public XDebuggerEditorsProvider createEditor(XBreakpoint<? extends XBreakpointProperties> breakpoint) {
if (breakpoint instanceof XLineBreakpoint) {
final String extension = FileUtilRt.getExtension(((XLineBreakpoint)breakpoint).getShortFilePath());
if (FileTypeManager.getInstance().getFileTypeByExtension(extension) == RubyFileType.RUBY) {
return new RubyDebuggerEditorsProvider();
}
}
return null;
}
@Override
public CidrDebuggerTypesHelper createTypesHelper(CidrDebugProcess process) {
return new MotionDebuggerTypesHelper(process);
}
@Nullable
@Override
public CidrEvaluator createEvaluator(@NotNull CidrStackFrame frame) {
return null;
}
}