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 2c3964d..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; @@ -10,29 +13,82 @@ import org.eclipse.debug.core.model.IWatchExpressionDelegate; import org.eclipse.debug.core.model.IWatchExpressionListener; import org.eclipse.debug.core.model.IWatchExpressionResult; +/** + * + */ public class PHPWatchExpressionDelegate implements IWatchExpressionDelegate { - public void evaluateExpression(String expression, IDebugElement context, - IWatchExpressionListener listener) { - IWatchExpressionResult x; - PHPDBGProxy dbg=((PHPDebugTarget)context.getDebugTarget()).getPHPDBGProxy(); - PHPStackFrame s=null; - if(context instanceof PHPStackFrame) - s=(PHPStackFrame)context; - try{ - PHPVariable result[]=dbg.eval(s,expression); - if(result.length==0) - x=new PHPWatchExpressionResult(expression,null,null); - else - x=new PHPWatchExpressionResult(expression,result[0].getValue(),null); - } - catch(Exception e) - { - String[] s1=new String[1]; - s1[0]=e.toString(); - x=new PHPWatchExpressionResult(expression,null,s1); - } - listener.watchEvaluationFinished(x); - } - -} \ No newline at end of file + public void evaluateExpression(String expression, IDebugElement context, + IWatchExpressionListener listener) { + IWatchExpressionResult x; + PHPDBGProxy dbg; + PHPStackFrame s; + + 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); + } + } catch (Exception e) { + String[] s1; + + s1 = new String[1]; + s1[0] = e.toString(); + x = new PHPWatchExpressionResult(expression, null, s1); + } + + 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; + } + } + +}