X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/model/PHPStackFrame.java b/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/model/PHPStackFrame.java index 4130898..a819140 100644 --- a/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/model/PHPStackFrame.java +++ b/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/model/PHPStackFrame.java @@ -11,6 +11,8 @@ Contributors: **********************************************************************/ package net.sourceforge.phpdt.internal.debug.core.model; +import java.util.Vector; + import net.sourceforge.phpdt.internal.debug.core.PHPDBGProxy; import org.eclipse.debug.core.DebugEvent; @@ -23,14 +25,20 @@ import org.eclipse.debug.core.model.IStackFrame; import org.eclipse.debug.core.model.IThread; import org.eclipse.debug.core.model.IVariable; -public class PHPStackFrame extends PHPDebugElement implements IStackFrame { +/** + * + * TODO Remove the variables array and use only the varList vector + * Have also to change hasVariables + */ +public class PHPStackFrame extends PHPDebugElement implements IStackFrame, Comparable{ private PHPThread thread; // The thread to which this stackframe belongs private String file; // The file name??? private int lineNumber; // private int index; // private int modno; // - private PHPVariable[] variables; // The array of variables + private PHPVariable[] variables; // The array of variables TODO: better introduce a vector? + private Vector varList = new Vector (); private String description; // /** @@ -96,39 +104,60 @@ public class PHPStackFrame extends PHPDebugElement implements IStackFrame { * @return The array of PHPVariables for this stackframe. */ public IVariable[] getVariables() throws DebugException { - PHPVariable[] variablesNew; // The intermediate storage of the variable array we get from DBG proxy + //PHPVariable[] variablesNew; // The intermediate storage of the variable array we get from DBG proxy + + //variablesNew = this.getPHPDBGProxy ().readVariables (this); // Get the variable array from DBG proxy + //variables = variablesNew; // Store the array the stackframes member variable + varList = this.getPHPDBGProxy ().readVariables (this); - variablesNew = this.getPHPDBGProxy ().readVariables (this); // Get the variable array from DBG proxy - variables = variablesNew; // Store the array the stackframes member variable + variables = (PHPVariable[]) varList.toArray (new PHPVariable[varList.size ()]); return variables; // Give the array back to user interface } /** - * TODO Is this really used (who calls this) - * I think this method could be removed * - * @param s The variables name we are looking for. - * @return */ - public IVariable findVariable (String s) throws DebugException { - String name; - int i; - - if (this.hasVariables ()) { // Does this stackframe have variables? - name = "$" + s; // Prefix the variable name with $ - - for (i = 0; i < variables.length; i++) { // For all variables - if ((variables[i].getName ()).equals (name)) { - return variables[i]; + private PHPVariable findVariable (Vector varList, String varname) { + PHPVariable variable; + PHPValue value; + int i; + + for (i = 0; i < varList.size (); i++) { // For all variables + variable = (PHPVariable) varList.get (i); // Get the variable + value = (PHPValue) variable.getValue (); // Get the value of the variable + + try { + if (value.hasVariables ()) { // Does the variable/value have children + variable = findVariable (value.getChildVariables (), varname); + + if (variable != null) { + return variable; + } + } + else if ((variable.getName ()).equals (varname)) { // + return variable; // } } + catch (DebugException e) { // That's, because of the hasVariables method + } } return null; } /** + * This method is called from the UI (e.g. from PHPDebugHover + * to find the variable the mouse is pointing to) + * + * @param s The variable name we are looking for. + * @return + */ + public IVariable findVariable (String s) throws DebugException { + return (findVariable (varList, s)); // Prefix the variable name with $ + } + + /** * */ public boolean hasVariables () throws DebugException { @@ -287,6 +316,10 @@ public class PHPStackFrame extends PHPDebugElement implements IStackFrame { return index; } + public void setIndex (int index) { + this.index = index; + } + public PHPDBGProxy getPHPDBGProxy() { PHPDebugTarget DebugTarget; @@ -302,4 +335,27 @@ public class PHPStackFrame extends PHPDebugElement implements IStackFrame { public int getModNo() { return modno; } + + /** + * This function is needed when sorting the stackframes by their index numbers. + * + * @param obj The stackframe which this one is compared to. + * @return + * + */ + public int compareTo (Object obj) + { + if (index < ((PHPStackFrame) obj).getIndex ()) { + return -1; + } + else if (index > ((PHPStackFrame) obj).getIndex ()) { + return 1; + } + + return 0; + } }