| /** |
| * |
| */ |
| package org.eclipse.dltk.rhino.dbgp; |
| |
| import java.io.File; |
| import java.util.HashMap; |
| |
| final class StackGetCommand extends DBGPDebugger.Command { |
| /** |
| * |
| */ |
| private final DBGPDebugger debugger; |
| |
| /** |
| * @param debugger |
| */ |
| StackGetCommand(DBGPDebugger debugger) { |
| this.debugger = debugger; |
| } |
| |
| @Override |
| void parseAndExecute(String command, final HashMap options) { |
| String string = (String) options.get("-d"); |
| int level = -1; |
| if (string != null) { |
| level = Integer.parseInt(string); |
| } |
| StringBuffer stack = new StringBuffer(); |
| if (this.debugger.stackmanager.getStackDepth() >= level) { |
| if (level == -1) { |
| for (int a = 0; a < this.debugger.stackmanager |
| .getStackDepth(); a++) { |
| appendLevel(a, stack); |
| } |
| } else { |
| |
| appendLevel(level, stack); |
| } |
| this.debugger.printResponse("<response command=\"stack_get\"\r\n" |
| + "\r\n" + " transaction_id=\"" + options.get("-i") |
| + "\">\r\n" + |
| |
| stack + "</response>\r\n" + ""); |
| } |
| |
| } |
| |
| private void appendLevel(int level, StringBuffer stack) { |
| DBGPDebugFrame stackFrame = this.debugger.stackmanager |
| .getStackFrame(level); |
| stack.append("<stack level=\"" + level + "\"\r\n" |
| + " type=\"file\"\r\n" + " filename=\"" |
| + new File(stackFrame.getSourceName()).toURI().toASCIIString() |
| + "\"\r\n" + " lineno=\"" |
| + (stackFrame.getLineNumber()) + "\"\r\n" |
| + " where=\"" + stackFrame.getWhere() + "\"\r\n" |
| + " cmdbegin=\"" + stackFrame.getLineNumber() |
| + ":0\"\r\n" + " cmdend=\"" |
| + stackFrame.getLineNumber() + ":-1\"/>"); |
| } |
| } |