blob: e5a218607ac80a936c03aef0ef3d0c3ad2e14d7a [file] [log] [blame]
package com.jetbrains.python.debugger.pydev;
import com.jetbrains.python.debugger.PyDebugValue;
public class GetVariableCommand extends GetFrameCommand {
public static final String BY_ID = "BY_ID";
private final String myVariableName;
private final PyDebugValue myParent;
public GetVariableCommand(final RemoteDebugger debugger, final String threadId, final String frameId, PyDebugValue var) {
super(debugger, GET_VARIABLE, threadId, frameId);
myVariableName = composeName(var);
myParent = var;
}
public static String composeName(final PyDebugValue var) {
final StringBuilder sb = new StringBuilder();
PyDebugValue p = var;
while (p != null) {
if (sb.length() > 0 ) {
sb.insert(0, '\t');
}
if (p.getId() != null) {
sb.insert(0, BY_ID).insert(0, '\t').insert(0, p.getId());
break;
} else {
sb.insert(0, p.getTempName());
}
p = p.getParent();
}
return sb.toString();
}
@Override
protected void buildPayload(Payload payload) {
if (myParent.getVariableLocator() != null) {
payload.add(myParent.getVariableLocator().getThreadId()).add(myParent.getVariableLocator().getPyDBLocation());
}
else if (myVariableName.contains(BY_ID)) {
payload.add(getThreadId()).add(myVariableName);
}
else {
super.buildPayload(payload);
payload.add(myVariableName);
}
}
@Override
protected PyDebugValue extend(final PyDebugValue value) {
return new PyDebugValue(value.getName(), value.getType(), value.getValue(), value.isContainer(), value.isErrorOnEval(), myParent,
myDebugProcess);
}
}