http://www.eclipse.org/legal/cpl-v10.html
Contributors:
- IBM Corporation - Initial implementation
- Vicente Fernando - www.alfersoft.com.ar
+ IBM Corporation - Initial implementation
+ Vicente Fernando - www.alfersoft.com.ar
**********************************************************************/
package net.sourceforge.phpdt.internal.debug.core.model;
+import java.util.Arrays;
import java.util.Vector;
import net.sourceforge.phpdt.internal.debug.core.PHPDBGProxy;
private PHPVariable[] variables; // The array of variables TODO: better introduce a vector?
private Vector varList = new Vector ();
private String description; // The source file name with the full path on target/remote system
- private boolean fUpToDate; //
+ private boolean fUpToDate; // Indicates whether the variable list within this stackframe is
+ // up-to-date
+ private boolean fAvailable; // Needed when updating the stackframe list, shows whether the stackframe
+ // is within the list which was received from dbg
/**
*
/**
*
+ */
+ public void setAvailable (boolean available) {
+ fAvailable = available;
+ }
+
+ /**
+ *
+ */
+ public boolean isAvailable () {
+ return fAvailable;
+ }
+
+
+ /**
+ * @see IAdaptable#getAdapter(Class)
+ */
+ public Object getAdapter(Class adapter) {
+ if (adapter == PHPStackFrame.class) {
+ return this;
+ }
+
+ return super.getAdapter(adapter);
+ }
+
+ /**
+ *
*
*/
private void resetHasChangedInfo (Vector varList) {
try {
if (valOld.hasVariables () || // If the 'static' value has child variables
- valNew.hasVariables ()) { // or if the DBG value has child variables
+ valNew.hasVariables ()) { // or if the DBG value has child variables
if (!hasRecursion (varOld) &&
- !hasRecursion (varNew)) { // Both branches should not have a recursion
+ !hasRecursion (varNew)) { // Both branches should not have a recursion
updateVariableList (valOld.getChildVariables (), // Update the variable list for the child variables
valNew.getChildVariables ());
}
* @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
-
- //variablesNew = this.getPHPDBGProxy ().readVariables (this); // Get the variable array from DBG proxy
- //variables = variablesNew; // Store the array the stackframes member variable
-
if (!isUpToDate ()) {
resetHasChangedInfo (varList);
- updateVariableList (varList, this.getPHPDBGProxy ().readVariables (this));
+ updateVariableList (varList, this.getPHPDBGProxy ().readVariables (this));
setUpToDate (true);
variables = (PHPVariable[]) varList.toArray (new PHPVariable[varList.size ()]);
+ Arrays.sort(variables, new PHPVariableComparator());
}
return variables; // Give the array back to user interface
public IVariable findVariable (String s) throws DebugException {
if (!isUpToDate ()) {
resetHasChangedInfo (varList);
- updateVariableList (varList, this.getPHPDBGProxy ().readVariables (this));
+ updateVariableList (varList, this.getPHPDBGProxy ().readVariables (this));
setUpToDate (true);
variables = (PHPVariable[]) varList.toArray (new PHPVariable[varList.size ()]);
*
*/
public boolean hasVariables () throws DebugException {
- return (varList.size () > 0);
+ return true;
+ // return (varList.size () > 0);
}
public int getLineNumber() {
public String getName() {
StringBuffer name = new StringBuffer();
-
+
if (!this.getDescription().equals ("")) {
name.append (this.getDescription ());
}
else {
name.append (this.getFileName ());
}
-
+
name.append (" [line ");
name.append (this.getLineNumber ());
name.append ("]");
-
+
return name.toString();
}
setUpToDate (false);
- thread.prepareForResume (DebugEvent.STEP_INTO); // Don't know why, but this is necessary
+ thread.prepareForResume (DebugEvent.STEP_INTO); // Don't know why, but this is necessary
this.getPHPDBGProxy ().readStepIntoEnd (PHPStackFrame.this);
-
- ev = new DebugEvent (this.getThread (), DebugEvent.RESUME, DebugEvent.STEP_INTO);
- DebugPlugin.getDefault().fireDebugEventSet (new DebugEvent[] { ev });
+
+ // Commented out sending the RESUME event because it was already sent by prepareForResume.
+ // The second RESUME event leads only to a little flickering within the variables view.
+ // It is also not clear why this event was necessary in eclipse < 3.2
+ // Also sending a SUSPEND event here leads to a total rebuild of the variables view.
+ // (eclipse 3.2 has a build in timeout of 500 ms which leads to a auto suspend, with
+ // no flickering... but why???)
+ //
+ //ev = new DebugEvent (this.getThread (), DebugEvent.RESUME, DebugEvent.STEP_INTO);
+ //DebugPlugin.getDefault().fireDebugEventSet (new DebugEvent[] { ev });
}
/**
setUpToDate (false);
- thread.prepareForResume (DebugEvent.STEP_OVER);
+ thread.prepareForResume (DebugEvent.STEP_OVER);
this.getPHPDBGProxy ().readStepOverEnd (PHPStackFrame.this) ;
- ev = new DebugEvent (this.getThread (), DebugEvent.RESUME, DebugEvent.STEP_OVER);
- DebugPlugin.getDefault ().fireDebugEventSet (new DebugEvent[] { ev });
+ // See comment within the previous stepInto method.
+ //
+ //ev = new DebugEvent (this.getThread (), DebugEvent.RESUME, DebugEvent.STEP_OVER);
+ //DebugPlugin.getDefault ().fireDebugEventSet (new DebugEvent[] { ev });
}
/**
setUpToDate (false);
- thread.prepareForResume (DebugEvent.STEP_RETURN);
+ thread.prepareForResume (DebugEvent.STEP_RETURN);
this.getPHPDBGProxy ().readStepReturnEnd (PHPStackFrame.this) ;
ev = new DebugEvent (this.getThread (), DebugEvent.RESUME, DebugEvent.STEP_RETURN);