X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/watch/PHPWatchExpressionDelegate.java b/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/watch/PHPWatchExpressionDelegate.java index 1f38d53..3d2df36 100644 --- a/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/watch/PHPWatchExpressionDelegate.java +++ b/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/watch/PHPWatchExpressionDelegate.java @@ -1,8 +1,11 @@ package net.sourceforge.phpdt.internal.debug.core.watch; +import java.util.Vector; + import net.sourceforge.phpdt.internal.debug.core.PHPDBGProxy; import net.sourceforge.phpdt.internal.debug.core.model.PHPDebugTarget; import net.sourceforge.phpdt.internal.debug.core.model.PHPStackFrame; +import net.sourceforge.phpdt.internal.debug.core.model.PHPValue; import net.sourceforge.phpdt.internal.debug.core.model.PHPVariable; import org.eclipse.debug.core.model.IDebugElement; @@ -21,19 +24,28 @@ public class PHPWatchExpressionDelegate implements IWatchExpressionDelegate { PHPDBGProxy dbg; PHPStackFrame s; - dbg = ((PHPDebugTarget) context.getDebugTarget()).getPHPDBGProxy(); - s = null; - - if (context instanceof PHPStackFrame) { - s = (PHPStackFrame) context; + if (!(context instanceof PHPStackFrame)) { + x = new PHPWatchExpressionResult(expression, null, null); + listener.watchEvaluationFinished(x); + return; } + dbg = ((PHPDebugTarget) context.getDebugTarget()).getPHPDBGProxy(); + s = (PHPStackFrame) context; + try { PHPVariable result[] = dbg.eval(s, expression); if (result.length == 0) { x = new PHPWatchExpressionResult(expression, null, null); } else { + switch (result[0].getReferenceType()) { + case PHPValue.PEVT_ARRAY: + case PHPValue.PEVT_OBJECT: + result[0].setName(expression); + reset(result[0]); + break; + } x = new PHPWatchExpressionResult(expression, result[0] .getValue(), null); } @@ -47,4 +59,36 @@ public class PHPWatchExpressionDelegate implements IWatchExpressionDelegate { listener.watchEvaluationFinished(x); } + + private void reset(PHPVariable variable) { + PHPValue value; + Vector variables; + + switch (variable.getReferenceType()) { + case PHPValue.PEVT_ARRAY: + value = (PHPValue) variable.getValue(); + variables = value.getChildVariables(); + for (int i = 0; i < variables.size(); i++) { + PHPVariable var = (PHPVariable) variables.get(i); + String name = var.getName(); + if (var.getLongName().equals(name)) { + var.setName(name); + } else { + var.setParent(variable); + } + reset(var); + } + break; + case PHPValue.PEVT_OBJECT: + value = (PHPValue) variable.getValue(); + variables = value.getChildVariables(); + for (int i = 0; i < variables.size(); i++) { + PHPVariable var = (PHPVariable) variables.get(i); + var.setParent(variable); + reset(var); + } + break; + } + } + }