fixed 'Add to Watches' (PY-2267) and 'Set Value' on dictionary (PY-2267)

This commit is contained in:
Dmitry Trofimov
2010-11-15 19:32:34 +03:00
parent d05eadba77
commit b1cbc7f979
3 changed files with 38 additions and 17 deletions
-2
View File
@@ -1045,8 +1045,6 @@ def usage(doExit=0):
if doExit:
sys.exit(0)
def SetTraceForParents(frame, dispatch_func):
frame = frame.f_back
while frame:
+7 -1
View File
@@ -224,12 +224,18 @@ class DictResolver:
raise UnableToResolveVariableException()
def keyStr(self, key):
if isinstance(key, str):
return "'%s'"%key
else:
return key
def getDictionary(self, dict):
ret = {}
for key, val in dict.items():
#we need to add the id because otherwise we cannot find the real object to get its contents later on.
key = '%s (%s)' % (key, id(key))
key = '%s (%s)' % (self.keyStr(key), id(key))
ret[key] = val
ret['__len__'] = len(dict)
@@ -73,27 +73,45 @@ public class PyDebugValue extends XValue {
return myParent == null ? this : myParent.getTopParent();
}
// todo: pass StringBuilder to recursive calls
public String getEvaluationExpression() {
StringBuilder stringBuilder = new StringBuilder();
buildExpression(stringBuilder);
return stringBuilder.toString();
}
void buildExpression(StringBuilder result) {
if (myParent == null) {
return getTempName();
}
else if ("list".equals(myParent.getType()) || "tuple".equals(myParent.getType())) {
return new StringBuilder().append(myParent.getEvaluationExpression()).append('[').append(myName).append(']').toString();
}
else if ("dict".equals(myParent.getType())) {
return new StringBuilder().append(myParent.getEvaluationExpression()).append("['").append(myName).append("']").toString();
result.append(getTempName());
}
else {
return new StringBuilder().append(myParent.getEvaluationExpression()).append('.').append(myName).toString();
myParent.buildExpression(result);
if (("dict".equals(myParent.getType()) || "list".equals(myParent.getType()) || "tuple".equals(myParent.getType())) &&
!isLen(myName)) {
result.append('[').append(removeId(myName)).append(']');
}
else if (("set".equals(myParent.getType())) && !isLen(myName)) {
result.append("[").append(myName).append("]");
}
else if (isLen(myName)) {
result.append('.').append(myName).append("()");
}
else {
result.append('.').append(myName);
}
}
}
/*
private void buildQualifiedExpression(final StringBuilder sb, final PyDebugValue child) {
if ()
private static String removeId(@NotNull String name) {
if (name.indexOf('(') != -1) {
name = name.substring(0, name.indexOf('(')).trim();
}
return name;
}
private static boolean isLen(String name) {
return "__len__".equals(name);
}
*/
@Override
public void computePresentation(@NotNull final XValueNode node) {
@@ -139,5 +157,4 @@ public class PyDebugValue extends XValue {
return DebuggerIcons.VALUE_ICON;
}
}
}