package com.aptana.ruby.internal.debug.core;
import org.eclipse.core.runtime.CoreException;
import com.aptana.ruby.debug.core.IRubyLineBreakpoint;
import com.aptana.ruby.debug.core.model.IRubyExceptionBreakpoint;
import com.aptana.ruby.debug.core.model.IRubyStackFrame;
import com.aptana.ruby.internal.debug.core.model.RubyStackFrame;
import com.aptana.ruby.internal.debug.core.model.RubyThread;
import com.aptana.ruby.internal.debug.core.model.RubyVariable;
@SuppressWarnings("nls")
public class ClassicDebuggerCommandFactory implements ICommandFactory
{
public String createReadFrames(RubyThread thread)
{
return "th " + thread.getId() + " ; w";
}
public String createReadLocalVariables(RubyStackFrame frame)
{
return "th " + ((RubyThread) frame.getThread()).getId() + " ; frame " + frame.getIndex() + " ; v l ";
}
public String createReadInstanceVariable(RubyVariable variable)
{
return "th " + ((RubyThread) variable.getStackFrame().getThread()).getId() + " ; v i "
+ variable.getStackFrame().getIndex() + " " + variable.getObjectId();
}
public String createStepOver(RubyStackFrame stackFrame)
{
return "th " + ((RubyThread) stackFrame.getThread()).getId() + " ; next";
}
public String createForcedStepOver(RubyStackFrame stackFrame)
{
// not supported by Classic Debugger
return createStepOver(stackFrame);
}
public String createStepReturn(RubyStackFrame stackFrame)
{
return "th " + ((RubyThread) stackFrame.getThread()).getId() + " ; next " + (stackFrame.getLineNumber() + 1);
}
public String createStepInto(RubyStackFrame stackFrame)
{
return "th " + ((RubyThread) stackFrame.getThread()).getId() + " ; step";
}
public String createForcedStepInto(RubyStackFrame stackFrame)
{
// not supported by Classic Debugger
return createStepInto(stackFrame);
}
public String createReadThreads()
{
return "th l";
}
public String createLoad(String filename)
{
return "load " + filename;
}
public String createInspect(IRubyStackFrame frame, String expression)
{
return "th " + ((RubyThread) frame.getThread()).getId() + " ; v inspect " + frame.getIndex() + " " + expression;
}
public String createResume(RubyThread thread)
{
return "th " + thread.getId() + ";cont";
}
public String createAddBreakpoint(String file, int line)
{
StringBuffer setBreakPointCommand = new StringBuffer();
setBreakPointCommand.append("b ");
setBreakPointCommand.append(file);
setBreakPointCommand.append(":");
setBreakPointCommand.append(line);
return setBreakPointCommand.toString();
}
public String createRemoveBreakpoint(int index)
{
return "delete " + index;
}
public String createCatchOff(IRubyExceptionBreakpoint breakpoint)
{
// Only allows a single catchpoint
return "catch off";
}
public String createCatchOn(IRubyExceptionBreakpoint breakpoint) throws CoreException
{
return "catch " + breakpoint.getTypeName();
}
public String createThreadStop(RubyThread thread)
{
return "th stop " + thread.getId();
}
public String createAddMethodBreakpoint(String file, String typeName, String methodName, int line)
{
// FIXME Can this support method breakpoints?
StringBuffer setBreakPointCommand = new StringBuffer();
setBreakPointCommand.append("b ");
setBreakPointCommand.append(file);
setBreakPointCommand.append(":");
setBreakPointCommand.append(line);
return setBreakPointCommand.toString();
}
public String createSetCondition(IRubyLineBreakpoint lineBreakpoint) throws CoreException
{
// TODO Auto-generated method stub
return null;
}
}