import org.eclipse.debug.core.model.IValue;
import org.eclipse.debug.core.model.IVariable;
+
+/**
+ *
+ */
public class PHPVariable implements IVariable {
-
- private PHPValue fValue;
- private String fName;
- private PHPStackFrame fStackFrame;
- private PHPVariable fParent;
- private String fLongName;
-
- PHPVariable(){
- this(null,"",null,"",PHPValue.PEVT_UNKNOWN,null);
- }
-
- PHPVariable(PHPStackFrame frame,String name, PHPVariable parent,String value,int valueType,Vector subitems)
+ private PHPValue fValue; // The value of this variable
+ private String fName; // The name of the variable
+ private PHPStackFrame fStackFrame; // The stackframe this variable belongs to
+ private PHPVariable fParent; // The parent variable (a back link)
+ private String fLongName; // ???
+
+ /**
+ *
+ */
+ PHPVariable () {
+ this (null, "", null, "", PHPValue.PEVT_UNKNOWN, null); // create an empty variable (a simple dummy node?)
+ }
+
+ /**
+ *
+ * @param frame The stackframe this variable belongs to
+ * @param name The name for this variable
+ * @param parent The parent variable if this is not the root
+ * @param value The value of this variable which is a simple value or again a variable
+ * @param valueType The type of the value (e.g. int, double, string etc.) @see PHPValue
+ * @param subitems
+ */
+ PHPVariable (PHPStackFrame frame, String name, PHPVariable parent, String value, int valueType, Vector subitems)
{
- this.fStackFrame=frame;
- this.fValue=new PHPValue(frame,value,valueType,subitems);
- this.fParent=parent;
- setName(name);
+ this.fStackFrame = frame;
+ this.fValue = new PHPValue (frame, value, valueType, subitems);
+ this.fParent = parent;
+
+ setName (name);
}
-
- private void setName(String name) {
- if ((fParent==null) || (fParent.getName()=="")) {
- fLongName=name;
- fName=name;
+
+ /**
+ *
+ * @param name
+ */
+ public void setName (String name) {
+ if ((fParent == null) || // If we have no parent for this variable
+ (fParent.getName () == "")) { // or we have a parent which is just a simple node ???
+ fLongName = name; // Set the long name
+ fName = name; // and set the name
+
return;
}
- switch (fParent.getReferenceType()) {
- case PHPValue.PEVT_ARRAY :
- fName="['"+name+"']";
- fLongName=fParent.getLongName()+fName;
- break;
- case PHPValue.PEVT_OBJECT :
- fName=name;
- fLongName=fParent.getLongName()+"."+fName;
- break;
- default :
- fName=name;
- fLongName=name;
- break;
+
+ switch (fParent.getReferenceType ()) { // Get the type of the parent variable
+ case PHPValue.PEVT_ARRAY : // It's an array
+ fName = "['" + name + "']"; // So set the variable name as [name]
+ fLongName = fParent.getLongName () + fName; // Set the longname to parentVariableLongname[name]
+ break;
+
+ case PHPValue.PEVT_OBJECT : // It's an object
+ fName = name; // Set the name to name
+ fLongName = fParent.getLongName () + "." + fName; // Set the longname to parentVariableLongname.name
+ break;
+
+ default :
+ fName = name; // Set the name to name
+ fLongName = name; // Set the Longname to name
+ break;
}
}
+
/**
* @see org.eclipse.debug.core.model.IVariable#getValue()
*/
public String getName() {
return fName;
}
-
+
+ /**
+ *
+ */
public PHPVariable getParent()
{
return fParent;
}
-
+
+ /**
+ *
+ */
public void setParent(PHPVariable parent)
{
this.fParent=parent;
fLongName=parent.getLongName()+fName;
}
-
+
+ /**
+ *
+ */
public String getLongName() {
return fLongName;
}
public String getReferenceTypeName() {
return fValue.getReferenceTypeName();
}
-
+
+ /**
+ *
+ */
public int getReferenceType() {
return fValue.getReferenceType();
}
-
+
+ /**
+ *
+ */
public int setReferenceType(int type) {
return ((PHPValue) getValue()).setReferenceType(type);
}
* @see org.eclipse.debug.core.model.IVariable#hasValueChanged()
*/
public boolean hasValueChanged() throws DebugException {
- // TODO Auto-generated method stub
- return false;
+ return fValue.hasValueChanged ();
+ }
+
+ /**
+ *
+ * @param changed This method is called after a suspend when the list of
+ * variables is updated, to mark that this variable has a changed
+ * value. The variable view will show this variable in
+ * a different color.
+ */
+ public void setValueChanged (boolean changed) {
+ fValue.setValueChanged (changed);
}
-
- /**
+
+ /**
* @see org.eclipse.debug.core.model.IDebugElement#getModelIdentifier()
*/
public String getModelIdentifier() {
return getDebugTarget().getLaunch();
}
-
/**
* @see org.eclipse.debug.core.model.IValueModification#setValue(java.lang.String)
*/
public Object getAdapter(Class adapter) {
return Platform.getAdapterManager().getAdapter(this, adapter);
}
-
- public String toString() {
- int type=-1;
- String str="";
-
- switch (getReferenceType())
- {
- case PHPValue.PEVT_ARRAY :
- int elements=fValue.getVariables().length;
- switch (elements) {
- case 0:
- str= this.getName() + " [no elements]";
- break;
- case 1:
- str= this.getName() + " [1 element]";
- break;
- default:
- str= this.getName() + " [" + elements + " elements]";
- break;
+
+ /**
+ * This method is called from variable view and denominates the variables with
+ * a type specific explanation.
+ *
+ */
+ public String toString () {
+ int type = -1;
+ String str = "";
+
+ switch (getReferenceType ()) {
+ case PHPValue.PEVT_ARRAY : // Variable is an array
+ int elements = fValue.getVariables ().length; // Get the number of child elements
+
+ switch (elements) { // Switch for the number of child elements
+ case 0: // We have no child element
+ str = this.getName () + " [no elements]"; // string => 'varname [no elements]'
+ break;
+
+ case 1: // We have exactly one child element
+ str = this.getName () + " [1 element]"; // string => 'varname [1 element]'
+ break;
+
+ default: // We have more than one element
+ str = this.getName () + " [" + elements + " elements]"; // string => 'varname [x elements]'
+ break;
}
break;
- case PHPValue.PEVT_OBJECT :
- str =this.getName() + " [class: " + fValue.getValueString() + "]";
+
+ case PHPValue.PEVT_OBJECT : // Variable is an object
+ str = this.getName () + " [class: " + fValue.getValueString() + "]"; // string => 'varname [class: varvalue]'
break;
- case PHPValue.PEVT_STRING :
- str =this.getName() + " = \"" + fValue.getValueString() +"\"" ;
+
+ case PHPValue.PEVT_STRING : // Variable is a string
+ str = this.getName () + " = \"" + fValue.getValueString() +"\"" ; // string => 'varname = "varvalue"'
break;
- case PHPValue.PEVT_SOFTREF :
- default :
- str =this.getName() + " = " + fValue.getValueString();
+
+ case PHPValue.PEVT_SOFTREF : // Variable is a soft reference
+ default : // or anything else
+ str = this.getName () + " = " + fValue.getValueString(); // string => 'varname = varvalue'
break;
}
-
+
return str;
-
}
}