import java.io.BufferedReader;
import java.io.IOException;
import java.io.OutputStream;
-import java.util.Arrays;
import java.util.Collections;
import java.util.Vector;
private OutputStream os; // The stream which goes to DBG
private boolean shouldStop = false;
private String evalRet = new String("");
- //private String serGlobals = new String("");
private int rawCounter = 1000; // An rawData frame ID counter
private PHPDBGProxy proxy = null;
private int lastCmd = -1;
PHPDBGFrame DBGFrame1;
PHPDBGEvalString evalStr;
+ // get global variables (and assign them to 'main()' stackframe)
Vector globalList = new Vector();
- // IStackFrame[] stacks = stack.getThread().getStackFrames();
- // ( PHPStackFrame.getThread().getStackFrames() returns DBGStackList )
- if (DBGStackList.length > 1) {
- // get global variables (and assign them to 'main()' stackframe)
- globalList = getVariables(DBGStackList[DBGStackList.length - 1], PHPDBGBase.GLOBAL_SCOPE_ID);
- if (!globalList.isEmpty()) {
- // remove unexpected '$this=?' variable
- PHPVariable var = (PHPVariable) globalList.get(0);
- PHPValue val = (PHPValue) var.getValue();
- Vector workList = val.getChildVariables();
- for (int i = 0; i < workList.size(); i++) {
- if (((PHPVariable) workList.get(i)).getName().equals("$this")) {
- workList.remove(i);
- break;
- }
+ globalList = getVariables(DBGStackList[DBGStackList.length - 1], PHPDBGBase.GLOBAL_SCOPE_ID);
+ if (!globalList.isEmpty()) {
+ // remove unexpected '$this=?' variable
+ PHPVariable var = (PHPVariable) globalList.get(0);
+ PHPValue val = (PHPValue) var.getValue();
+ Vector workList = val.getChildVariables();
+ for (int i = 0; i < workList.size(); i++) {
+ if (((PHPVariable) workList.get(i)).getName().equals("$this")) {
+ workList.remove(i);
+ break;
}
- var.setName(GlobalVariablesTitle);
- var.setModifiable(false);
}
+ var.setName(GlobalVariablesTitle);
+ var.setModifiable(false);
}
-// DBGPacket = new PHPDBGPacket (PHPDBGBase.DBGA_REQUEST); //
-// DBGFrame1 = new PHPDBGFrame (PHPDBGBase.FRAME_EVAL); //
-//
-// DBGFrame1.addInt (0); // istr = raw data ID
-// DBGFrame1.addInt (1); // scope_id = -1 means current location, 0 never used, +1 first depth
-//
-// DBGPacket.addFrame (DBGFrame1); // Add command data
-//
-// if (proxy.getSocket ().isClosed ()) { // Do we have a socket for DBG communication?
-// return new Vector (); // No, then leave here with an empty vector
-// }
-//
-// serGlobals = "";
-// DBGPacket.sendPacket (os); // Send the request to DBG
-//
-// waitResponse (1000); // Wait for the DBG response (1 second)
-// flushAllPackets (); // Read and process the response from DBG
-//
-// evalStr = new PHPDBGEvalString (stack, serGlobals); // Process serialized variables
-// DBGVarList = evalStr.getVariables ();
-
- int scopeID = stack.getScopeID();
- if (scopeID == PHPDBGBase.CURLOC_SCOPE_ID) {
- // current stackframe
- DBGVarList = getVariables(stack, PHPDBGBase.CURLOC_SCOPE_ID);
- } else if ((scopeID == PHPDBGBase.CURLOC_SCOPE_ID + 1) && !globalList.isEmpty()) {
+ int scopeID = stack.getScopeID();
+ if (!globalList.isEmpty()
+ && ((DBGStackList.length == 1)
+ || (scopeID == PHPDBGBase.CURLOC_SCOPE_ID + 1))) {
// 'main()' stackframe
PHPVariable var = (PHPVariable) globalList.get(0);
PHPValue val = (PHPValue) var.getValue();
DBGVarList = val.getChildVariables();
return DBGVarList;
+
+ } else if (scopeID == PHPDBGBase.CURLOC_SCOPE_ID) {
+ // current stackframe
+ DBGVarList = getVariables(stack, PHPDBGBase.CURLOC_SCOPE_ID);
+
} else {
// back-trace stackframe
- // Never: DBGVarList = getVariables(stack, scopeID);
+ DBGVarList = getVariables(stack, scopeID);
// DBG 2.15.5 causes Application Error (on win32) in some cases
- DBGVarList.clear();
+ //DBGVarList.clear();
}
if (DBGVarList.size() > 0) { // Did we get back variables?
rawCounter++;
DBGFrame1.addInt(rawCounter); // istr = raw data ID
//DBGFrame1.addInt(1); // scope_id = -1 means current location, 0 never used, +1 first depth
- DBGFrame1.addInt(stack.getScopeID());
+ int scope_id = stack.getScopeID();
+ if (DBGStackList.length == 1 || scope_id == PHPDBGBase.CURLOC_SCOPE_ID + 1) {
+ scope_id = PHPDBGBase.GLOBAL_SCOPE_ID;
+ } //-
+ DBGFrame1.addInt(scope_id);
DBGFrame2.addInt(rawCounter); // FRAME_RAWDATA ID
DBGFrame2.addInt(evalString.length() + 1); // length of rawdata (+ null char)
evalRet = getRawFrameData (entirePack, dbg_eval_tmp[1]); //
evalString = getRawFrameData (entirePack, dbg_eval_tmp[0]); //
- //serGlobals = evalRet; //
break;
case PHPDBGBase.FRAME_BPS: //
**********************************************************************/
package net.sourceforge.phpdt.internal.debug.core.model;
-import java.util.Arrays;
+import java.util.Collections;
import java.util.Vector;
-import net.sourceforge.phpdt.internal.debug.core.PHPDBGBase;
import net.sourceforge.phpdt.internal.debug.core.PHPDBGProxy;
import org.eclipse.core.runtime.IAdaptable;
private int index;
private int modno;
private int scope_id; // scope id
- private PHPVariable[] variables; // The array of variables TODO: better introduce a vector?
+ //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; // Indicates whether the variable list within this stackframe is
* @param line
* @param index
*/
- public PHPStackFrame (PHPThread thread, String file, int line, int index) {
- super (null);
+ public PHPStackFrame(PHPThread thread, String file, int line, int index) {
+ super(null);
this.lineNumber = line;
- this.index = index;
- this.file = file;
- this.thread = thread;
- this.fUpToDate = false;
+ this.index = index;
+ this.file = file;
+ this.thread = thread;
+ this.fUpToDate = false;
}
/**
/**
*
*/
- public IThread getThread () {
+ public IThread getThread() {
return thread;
}
/**
* @param thread
*/
- public void setThread (PHPThread thread) {
+ public void setThread(PHPThread thread) {
this.thread = thread;
}
/**
*
*/
- private void setUpToDate (boolean upToDate) {
+ private void setUpToDate(boolean upToDate) {
fUpToDate = upToDate;
}
/**
*
*/
- private boolean isUpToDate () {
+ private boolean isUpToDate() {
return fUpToDate;
}
/**
*
*/
- public void setAvailable (boolean available) {
+ public void setAvailable(boolean available) {
fAvailable = available;
}
/**
*
*/
- public boolean isAvailable () {
+ public boolean isAvailable() {
return fAvailable;
}
-
/**
* @see IAdaptable#getAdapter(Class)
*/
/**
*
- *
*/
- private void resetHasChangedInfo (Vector varList) {
+ private void resetHasChangedInfo(Vector varList) {
int n;
PHPVariable var;
- PHPValue val;
+ PHPValue val;
- for (n = 0; n < varList.size (); n++) { // For every variable in 'DBG list'
- var = (PHPVariable) varList.get (n); // Get the variable
- val = (PHPValue) var.getValue (); // Get the variable's value
+ for (n = 0; n < varList.size(); n++) { // For every variable in 'DBG list'
+ var = (PHPVariable) varList.get(n); // Get the variable
+ val = (PHPValue) var.getValue(); // Get the variable's value
try {
- if (val.hasVariables ()) { // Do we have other variables within the value
- if (!hasRecursion (var)) { // Is this variable (value) branch recursive?
- resetHasChangedInfo (val.getChildVariables ()); // No, go into branch
+ if (val.hasVariables()) { // Do we have other variables within the value
+ if (!hasRecursion(var)) { // Is this variable (value) branch recursive?
+ resetHasChangedInfo(val.getChildVariables()); // No, go into branch
}
}
- }
- catch (DebugException e) { // That's, because of the hasVariables method
+ } catch (DebugException e) { // That's, because of the hasVariables method
}
- var.setValueChanged (false); // Reset the 'has changed' flag
+ var.setValueChanged(false); // Reset the 'has changed' flag
}
}
* <li> true if the PHPValue is
* </ul>
*/
- private boolean hasRecursion (PHPVariable var) {
+ private boolean hasRecursion(PHPVariable var) {
PHPVariable parentVar;
- PHPValue val;
+ PHPValue val;
- val = (PHPValue) var.getValue (); // Get the PHPValue from the current PHPVariable
+ val = (PHPValue) var.getValue(); // Get the PHPValue from the current PHPVariable
- while (var != null) { // As long as we have PHPVariable
- parentVar = var.getParent (); // Get the parent PHPVariable
+ while (var != null) { // As long as we have PHPVariable
+ parentVar = var.getParent(); // Get the parent PHPVariable
- if (parentVar != null) { // Is there a parent?
- if (parentVar.getValue ().equals (val)) { // Get the PHPValue for the parent PHPVariable and check
+ if (parentVar != null) { // Is there a parent?
+ if (parentVar.getValue().equals(val)) { // Get the PHPValue for the parent PHPVariable and check
// whether it is the same
- return true; // Return, if we have recursion
+ return true; // Return, if we have recursion
}
}
var = parentVar;
}
- return false; // No recursion found
+ return false; // No recursion found
}
/**
* @param varListOld The 'static' list of variables which are to be updated.
* @param varListNew The new list of (current) variables from DBG.
*/
- private void updateVariableList (Vector varListOld, Vector varListNew)
- {
- PHPVariable varOld; // The variable from the 'static' list
- PHPVariable varNew; // The variable from the DBG list
- PHPValue valOld; // The value of the current variable from 'static' list
- PHPValue valNew; // The value of the current variable from DBG list
- int n; // Index for the DBG list
- int o; // Index for the static list
+ private void updateVariableList(Vector varListOld, Vector varListNew) {
+ PHPVariable varOld; // The variable from the 'static' list
+ PHPVariable varNew; // The variable from the DBG list
+ PHPValue valOld; // The value of the current variable from 'static' list
+ PHPValue valNew; // The value of the current variable from DBG list
+ int n; // Index for the DBG list
+ int o; // Index for the static list
// Add the variables (and childs) to the static list if they are new
// and update the values of variables which are already existend within
// the 'static' list.
- for (n = 0; n < varListNew.size (); n++) { // For every variable in 'DBG list'
- varNew = (PHPVariable) varListNew.get (n); // Get the DBG variable
+ for (n = 0; n < varListNew.size(); n++) { // For every variable in 'DBG list'
+ varNew = (PHPVariable) varListNew.get(n); // Get the DBG variable
- for (o = 0; o < varListOld.size (); o++) { // For every variable in static list
- varOld = (PHPVariable) varListOld.get (o); // Get the static variable
+ for (o = 0; o < varListOld.size(); o++) { // For every variable in static list
+ varOld = (PHPVariable) varListOld.get(o); // Get the static variable
- if (varNew.getName ().equals (varOld.getName ())) { // Did we found the variable within the 'static' list?
- valOld = (PHPValue) varOld.getValue (); // Get the value from 'static'
- valNew = (PHPValue) varNew.getValue (); // Get the value from DBG
+ if (varNew.getName().equals(varOld.getName())) { // Did we found the variable within the 'static' list?
+ valOld = (PHPValue) varOld.getValue(); // Get the value from 'static'
+ valNew = (PHPValue) varNew.getValue(); // Get the value from DBG
try {
- if (valOld.hasVariables () || // If the 'static' 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
- updateVariableList (valOld.getChildVariables (), // Update the variable list for the child variables
- valNew.getChildVariables ());
+ if (valOld.hasVariables() || // If the 'static' 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
+ updateVariableList(valOld.getChildVariables(), // Update the variable list for the child variables
+ valNew.getChildVariables());
}
- }
- else if (!valOld.getValueString ().equals (valNew.getValueString ())) { // Has the value changed?
- valOld.setValueString (valNew.getValueString ()); // Yes, set the 'static' value (variable) to the new value
- varOld.setValueChanged (true); // and set the 'has changed' flag, so that the variable view
- // could show the user the changed status with a different
- // color
+ } else if (!valOld.getValueString().equals(
+ valNew.getValueString())) { // Has the value changed?
+ valOld.setValueString(valNew.getValueString()); // Yes, set the 'static' value (variable) to the new value
+ varOld.setValueChanged(true); // and set the 'has changed' flag, so that the variable view
+ // could show the user the changed status with a different
+ // color
}
//else {
// varOld.setValueChanged (false); // Reset the 'has changed' flag
//}
- }
- catch (DebugException e) { // That's, because of the hasVariables method
+ } catch (DebugException e) { // That's, because of the hasVariables method
}
- break; // Found the variable,
+ break; // Found the variable,
}
}
- if (o == varListOld.size ()) { // Did we found the variable within the static list?
- varListOld.add (varNew); // No, then add the DBG variable to the static list
+ if (o == varListOld.size()) { // Did we found the variable within the static list?
+ varListOld.add(varNew); // No, then add the DBG variable to the static list
}
}
// Look for the variables we can remove from the 'static' list
- for (o = 0; o < varListOld.size (); o++) { // For every variable in 'static' list
- varOld = (PHPVariable) varListOld.get (o); // Get the static variable
+ for (o = 0; o < varListOld.size(); o++) { // For every variable in 'static' list
+ varOld = (PHPVariable) varListOld.get(o); // Get the static variable
- for (n = 0; n < varListNew.size (); n++) { // For all variables in 'DBG' list
- varNew = (PHPVariable) varListNew.get (n); // Get the variable from the 'DBG' list
+ for (n = 0; n < varListNew.size(); n++) { // For all variables in 'DBG' list
+ varNew = (PHPVariable) varListNew.get(n); // Get the variable from the 'DBG' list
- if (varNew.getName ().equals (varOld.getName ())) { // Did we found the 'static' list variable within the 'DBG' list?
- break; // Yes we found the variable, then leave the loop
+ if (varNew.getName().equals(varOld.getName())) { // Did we found the 'static' list variable within the 'DBG' list?
+ break; // Yes we found the variable, then leave the loop
}
}
- if (n == varListNew.size ()) { // Did not find the 'static' list variable within the 'DBG' list?
- varListOld.remove (o); // then remove the 'static' list variable from list
- o -= 1; // Adjust the 'static' list index
+ if (n == varListNew.size()) { // Did not find the 'static' list variable within the 'DBG' list?
+ varListOld.remove(o); // then remove the 'static' list variable from list
+ o -= 1; // Adjust the 'static' list index
}
}
}
resetHasChangedInfo(varList);
updateVariableList(varList, this.getPHPDBGProxy().readVariables(this));
setUpToDate(true);
-
- variables = (PHPVariable[]) varList.toArray(new PHPVariable[varList.size()]);
- Arrays.sort(variables, new PHPVariableComparator());
+ Collections.sort(varList, new PHPVariableComparator());
+ //variables = (PHPVariable[]) varList.toArray(new PHPVariable[varList.size()]);
+ //Arrays.sort(variables, new PHPVariableComparator());
}
- return variables; // Give the array back to user interface
+ //return variables; // Give the array back to user interface
+ return (PHPVariable[]) varList.toArray(new PHPVariable[varList.size()]);
}
/**
*
*/
- private PHPVariable findVariable (Vector varList, String varname) {
- PHPVariable variable;
- PHPValue value;
- int 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
+ 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
- if (!hasRecursion (variable)) { // Don't follow recursive variable/values
- variable = findVariable (value.getChildVariables (), varname);
+ if (value.hasVariables()) { // Does the variable/value have children
+ if (!hasRecursion(variable)) { // Don't follow recursive variable/values
+ variable = findVariable(value.getChildVariables(),
+ varname);
if (variable != null) {
return variable;
}
}
+ } else if ((variable.getName()).equals(varname)) { //
+ return variable; //
}
- else if ((variable.getName ()).equals (varname)) { //
- return variable; //
- }
+ } catch (DebugException e) { // That's, because of the hasVariables method
}
- catch (DebugException e) { // That's, because of the hasVariables method
- }
}
return null;
* @param s The variable name we are looking for.
* @return
*/
- public IVariable findVariable (String s) throws DebugException {
- if (!isUpToDate ()) {
- resetHasChangedInfo (varList);
- updateVariableList (varList, this.getPHPDBGProxy ().readVariables (this));
- setUpToDate (true);
-
- variables = (PHPVariable[]) varList.toArray (new PHPVariable[varList.size ()]);
+ public IVariable findVariable(String s) throws DebugException {
+ if (!isUpToDate()) {
+ //resetHasChangedInfo(varList);
+ //updateVariableList(varList, this.getPHPDBGProxy().readVariables(this));
+ //setUpToDate(true);
+ //variables = (PHPVariable[]) varList.toArray(new PHPVariable[varList.size()]);
+ getVariables();
}
- return (findVariable (varList, s)); // Prefix the variable name with $
+ return (findVariable(varList, s)); // Prefix the variable name with $
}
/**
*
*/
- public boolean hasVariables () throws DebugException {
+ public boolean hasVariables() throws DebugException {
return true;
// return (varList.size () > 0);
}
public String getName() {
StringBuffer name = new StringBuffer();
- if (!this.getDescription().equals ("")) {
- name.append (this.getDescription ());
- }
- else {
- name.append (this.getFileName ());
+ if (!this.getDescription().equals("")) {
+ name.append(this.getDescription());
+ } else {
+ name.append(this.getFileName());
}
- name.append (" [line ");
- name.append (this.getLineNumber ());
- name.append ("]");
+ name.append(" [line ");
+ name.append(this.getLineNumber());
+ name.append("]");
return name.toString();
}
}
public void setDescription(String desc) {
- this.description= desc;
+ this.description = desc;
}
public String getDescription() {
/**
*
*/
- public void stepInto () throws DebugException {
- DebugEvent ev;
+ public void stepInto() throws DebugException {
+ DebugEvent ev;
- setUpToDate (false);
+ setUpToDate(false);
- thread.prepareForResume (DebugEvent.STEP_INTO); // Don't know why, but this is necessary
- this.getPHPDBGProxy ().readStepIntoEnd (PHPStackFrame.this);
+ thread.prepareForResume(DebugEvent.STEP_INTO); // Don't know why, but this is necessary
+ this.getPHPDBGProxy().readStepIntoEnd(PHPStackFrame.this);
// 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.
/**
*
*/
- public void stepOver () throws DebugException {
- DebugEvent ev;
+ public void stepOver() throws DebugException {
+ DebugEvent ev;
- setUpToDate (false);
+ setUpToDate(false);
- thread.prepareForResume (DebugEvent.STEP_OVER);
- this.getPHPDBGProxy ().readStepOverEnd (PHPStackFrame.this) ;
+ thread.prepareForResume(DebugEvent.STEP_OVER);
+ this.getPHPDBGProxy().readStepOverEnd(PHPStackFrame.this);
// See comment within the previous stepInto method.
//
/**
*
*/
- public void stepReturn () throws DebugException {
- DebugEvent ev;
+ public void stepReturn() throws DebugException {
+ DebugEvent ev;
- setUpToDate (false);
+ setUpToDate(false);
- thread.prepareForResume (DebugEvent.STEP_RETURN);
- this.getPHPDBGProxy ().readStepReturnEnd (PHPStackFrame.this) ;
+ thread.prepareForResume(DebugEvent.STEP_RETURN);
+ this.getPHPDBGProxy().readStepReturnEnd(PHPStackFrame.this);
//ev = new DebugEvent (this.getThread (), DebugEvent.RESUME, DebugEvent.STEP_RETURN);
//DebugPlugin.getDefault ().fireDebugEventSet (new DebugEvent[] { ev });
}
-
public boolean canResume() {
return this.getThread().canResume();
}
}
public void resume() throws DebugException {
- setUpToDate (false);
+ setUpToDate(false);
this.getThread().resume();
}
return index;
}
- public void setIndex (int index) {
+ public void setIndex(int index) {
this.index = index;
}
public PHPDBGProxy getPHPDBGProxy() {
PHPDebugTarget DebugTarget;
- DebugTarget = (PHPDebugTarget) thread.getDebugTarget ();
+ DebugTarget = (PHPDebugTarget) thread.getDebugTarget();
- return DebugTarget.getPHPDBGProxy ();
+ return DebugTarget.getPHPDBGProxy();
}
public void setFile(String file) {
* <li> 1 if the index of this stackfram is greater.
* </ul>
*/
- public int compareTo (Object obj)
- {
- if (index < ((PHPStackFrame) obj).getIndex ()) {
- return -1;
- }
- else if (index > ((PHPStackFrame) obj).getIndex ()) {
- return 1;
- }
-
- return 0;
+ public int compareTo(Object obj) {
+ //if (index < ((PHPStackFrame) obj).getIndex()) {
+ // return -1;
+ //} else if (index > ((PHPStackFrame) obj).getIndex()) {
+ // return 1;
+ //}
+
+ //return 0;
+ return Integer.signum(index - ((PHPStackFrame) obj).getIndex());
}
}
/**********************************************************************
-Copyright (c) 2000, 2002 IBM Corp. and others.
-All rights reserved. This program and the accompanying materials
-are made available under the terms of the Common Public License v1.0
-which accompanies this distribution, and is available at
-http://www.eclipse.org/legal/cpl-v10.html
-
-Contributors:
- IBM Corporation - Initial implementation
- Vicente Fernando - www.alfersoft.com.ar
- Christian Perkonig - cperkonig@gmx.at
-**********************************************************************/
+ Copyright (c) 2000, 2002 IBM Corp. and others.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Common Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/cpl-v10.html
+
+ Contributors:
+ IBM Corporation - Initial implementation
+ Vicente Fernando - www.alfersoft.com.ar
+ Christian Perkonig - cperkonig@gmx.at
+ **********************************************************************/
package net.sourceforge.phpdt.internal.debug.core.model;
-
+import java.util.Collections;
import java.util.Iterator;
import java.util.Vector;
import org.eclipse.debug.core.model.IValue;
import org.eclipse.debug.core.model.IVariable;
-
/**
* PHPValue object belongs to a PHPVariable (is a member of PHPVariable).
* A PHPValue itself can have PHPVariables as children.
*/
public class PHPValue implements IValue {
- final static String[] PEV_NAMES = {"undefined", // 0
- "long", // 1
- "double", // 2
- "string", // 3
- "array", // 4
- "object", // 5
- "boolean", // 6
- "resource", // 7
- "reference", // 8
- "soft reference"}; // 9
+ final static String[] PEV_NAMES = {
+ "undefined", // 0
+ "long", // 1
+ "double", // 2
+ "string", // 3
+ "array", // 4
+ "object", // 5
+ "boolean", // 6
+ "resource", // 7
+ "reference", // 8
+ "soft reference" }; // 9
+
final static int PEVT_UNKNOWN = 0;
final static int PEVT_LONG = 1;
- final static int PEVT_DOUBLE = 2;
- final static int PEVT_STRING = 3;
- final static int PEVT_ARRAY = 4;
- final static int PEVT_OBJECT = 5;
- final static int PEVT_BOOLEAN = 6;
- final static int PEVT_RESOURCE = 7;
- final static int PEVT_REF = 8;
- final static int PEVT_SOFTREF = 9;
-
- private int fValueType; // The type of this value (see the PEVT_... values)
- private boolean hasChildren; // This value (variable) has children (more variables)
- private String fValueString; // The value of this variable as text
- private Vector fVariables; // The children of this variable (other variables) if any
- private PHPStackFrame fStackFrame; // The stackframe this value (variable) belongs to
- private boolean fHasChanged; // The value has changed between two suspends
+ final static int PEVT_DOUBLE = 2;
+ final static int PEVT_STRING = 3;
+ final static int PEVT_ARRAY = 4;
+ final static int PEVT_OBJECT = 5;
+ final static int PEVT_BOOLEAN = 6;
+ final static int PEVT_RESOURCE = 7;
+ final static int PEVT_REF = 8;
+ final static int PEVT_SOFTREF = 9;
+
+ private int fValueType; // The type of this value (see the PEVT_... values)
+ //private boolean hasChildren; // This value (variable) has children (more variables)
+ private String fValueString; // The value of this variable as text
+ private Vector fVariables; // The children of this variable (other variables) if any
+ private PHPStackFrame fStackFrame; // The stackframe this value (variable) belongs to
+ private boolean fHasChanged; // The value has changed between two suspends
// This variable was moved from PHPVariable due to the fact,
// that two PHPVariables can reference the same PHPValue,
// so only the first PHPVariable would win, when we check the variable tree
// for changed values.
+ private boolean fSorted;
/**
*
*/
- PHPValue () {
- this (null, "", PEVT_UNKNOWN, null); // Creates an empty value
+ PHPValue() {
+ this(null, "", PEVT_UNKNOWN, null); // Creates an empty value
}
/**
* @param fValueType The type of this value (see the PEVT_... values).
* @param subitems This value has subitems.
*/
- PHPValue (PHPStackFrame frame, String value, int fValueType, Vector subitems)
- {
- this.fValueType = fValueType;
+ public PHPValue(PHPStackFrame frame, String value, int fValueType, Vector subitems) {
+ this.fValueType = fValueType;
this.fValueString = value;
- this.fStackFrame = frame;
- this.fHasChanged = false;
-
- if (subitems != null) { // If there are children for this value (variable)
- this.fVariables = new Vector (subitems); // Then add the children to this value (variable)
- }
- else {
- this.fVariables = new Vector (); // Create an empty vector
+ this.fStackFrame = frame;
+ this.fHasChanged = false;
+ this.fSorted = false;
+
+ if (subitems != null) { // If there are children for this value (variable)
+ this.fVariables = new Vector(subitems); // Then add the children to this value (variable)
+ } else {
+ this.fVariables = new Vector(); // Create an empty vector
}
}
*
* @param item
*/
- Vector addVariable (Vector item)
- {
- if (item != null) { // If there is something we want to add
- this.fVariables.addAll (item); //
+ public Vector addVariable(Vector item) {
+ if (item != null) { // If there is something we want to add
+ this.fVariables.addAll(item);
+ this.fSorted = false;
}
return this.fVariables;
*
* @param parent
*/
- public void setParent (PHPVariable parent) {
- if (!fVariables.isEmpty ()) { // If we have child variables
- Iterator iter = fVariables.iterator (); // Create an iterator for the children
+ public void setParent(PHPVariable parent) {
+ if (!fVariables.isEmpty()) { // If we have child variables
+ Iterator iter = fVariables.iterator(); // Create an iterator for the children
- while (iter.hasNext ()) { // As long as we have children
- ((PHPVariable) iter.next ()).setParent (parent); // Set all child's parent
+ while (iter.hasNext()) { // As long as we have children
+ ((PHPVariable) iter.next()).setParent(parent); // Set all child's parent
}
}
}
/**
* @see org.eclipse.debug.core.model.IValue#getReferenceTypeName()
*/
- public String getReferenceTypeName(){
+ public String getReferenceTypeName() {
return PEV_NAMES[fValueType];
}
/**
*
*/
- public int getReferenceType(){
+ public int getReferenceType() {
return fValueType;
}
/**
* @param type Set the reference type (see the PEVT_... values).
*/
- public int setReferenceType (int type) {
+ public int setReferenceType(int type) {
return fValueType = type;
}
*
* @param value The changed value for this variable.
*/
- public void setValueString (String value) {
+ public void setValueString(String value) {
fValueString = value;
}
* @return The array of child variable for this value (variable).
*/
public IVariable[] getVariables() {
- return (PHPVariable[]) fVariables.toArray (new PHPVariable[fVariables.size ()]);
-// return (IVariable[])fVariables.toArray();
+ return (PHPVariable[]) getChildVariables().toArray(
+ new PHPVariable[fVariables.size()]);
}
/**
*
*/
- public Vector getChildVariables () {
- return (fVariables);
+ public Vector getChildVariables() {
+ if (!fSorted) {
+ Collections.sort(fVariables, new PHPVariableComparator());
+ fSorted = true;
+ }
+
+ return fVariables;
}
/**
* </ul>
*/
public boolean hasVariables() throws DebugException {
- // return (!fVariables.isEmpty ());
- return (fVariables.size () != 0);
+ // return (!fVariables.isEmpty());
+ return (fVariables.size() != 0);
}
/**
return null;
}
- public boolean hasValueChanged () throws DebugException {
+ public boolean hasValueChanged() throws DebugException {
return fHasChanged;
}
- public void setValueChanged (boolean changed) {
+ public void setValueChanged(boolean changed) {
fHasChanged = changed;
}
-
}