X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/model/PHPValue.java b/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/model/PHPValue.java index beca6a3..bf97de2 100644 --- a/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/model/PHPValue.java +++ b/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/model/PHPValue.java @@ -8,55 +8,146 @@ 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.Iterator; +import java.util.Vector; + import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.model.IDebugTarget; import org.eclipse.debug.core.model.IValue; import org.eclipse.debug.core.model.IVariable; + /** - * @author Administrator + * PHPValue object belongs to a PHPVariable (is a member of PHPVariable). + * A PHPValue itself can have PHPVariables as children. * - * To change this generated comment edit the template variable "typecomment": - * Window>Preferences>Java>Templates. - * To enable and disable the creation of type comments go to - * Window>Preferences>Java>Code Generation. */ public class PHPValue implements IValue { - private String valueString ; - private String referenceTypeName ; - private boolean hasChildren= false ; - private PHPVariable owner ; - private PHPVariable[] variables ; - - public PHPValue(PHPVariable owner) { - this(owner, "nil", null, false) ; - } - - public PHPValue(PHPVariable owner, String valueString, String type, boolean hasChildren) { - this.valueString = valueString ; - this.owner = owner ; - this.hasChildren = hasChildren ; - this.referenceTypeName = type ; - } - + 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 + // + + /** + * + */ + PHPValue () { + this (null, "", PEVT_UNKNOWN, null); // Creates an empty value + } + + /** + * + * @param frame The stackframe this value (and variable) belongs to. + * @param value The value of this 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; + this.fValueString = value; + this.fStackFrame = frame; + + 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); // + } + + 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 + + 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() { - return this.referenceTypeName; + public String getReferenceTypeName(){ + return PEV_NAMES[fValueType]; + } + + /** + * + */ + public int getReferenceType(){ + return fValueType; + } + + /** + * @param type Set the reference type (see the PEVT_... values). + */ + public int setReferenceType (int type) { + return fValueType = type; } /** - * @see org.eclipse.debug.core.model.IValue#getValueString() + * This method is called whenever this value (variable) is changed. + * + * @param value The changed value for this variable. + */ + public void setValueString (String value) { + fValueString = value; + } + + /** + * @see org.eclipse.debug.core.model.IValue#getfValueString() */ public String getValueString() { - return valueString; + return fValueString; } /** @@ -68,57 +159,62 @@ public class PHPValue implements IValue { /** * @see org.eclipse.debug.core.model.IValue#getVariables() + * + * @return The array of child variable for this value (variable). */ - public IVariable[] getVariables() throws DebugException { - if (!hasChildren) { - return new PHPVariable[0] ; - } - if (variables == null) { - variables = ((PHPDebugTarget) this.getDebugTarget()).getPHPDBGProxy().readInstanceVariables(owner); - } - return variables; + public IVariable[] getVariables() { + return (PHPVariable[]) fVariables.toArray (new PHPVariable[fVariables.size ()]); +// return (IVariable[])fVariables.toArray(); + } + + /** + * + */ + public Vector getChildVariables () { + return (fVariables); } /** * @see org.eclipse.debug.core.model.IValue#hasVariables() + * + * @return + * */ public boolean hasVariables() throws DebugException { - return hasChildren; + // return (!fVariables.isEmpty ()); + return (fVariables.size () != 0); } /** * @see org.eclipse.debug.core.model.IDebugElement#getModelIdentifier() */ public String getModelIdentifier() { - return owner.getModelIdentifier(); + // TODO Auto-generated method stub + return null; } /** * @see org.eclipse.debug.core.model.IDebugElement#getDebugTarget() */ public IDebugTarget getDebugTarget() { - return owner.getDebugTarget(); + return fStackFrame.getDebugTarget(); } /** * @see org.eclipse.debug.core.model.IDebugElement#getLaunch() */ public ILaunch getLaunch() { - return this.getDebugTarget().getLaunch(); + return getDebugTarget().getLaunch(); } /** - * @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class) + * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) */ public Object getAdapter(Class adapter) { return null; } - - public String toString() { - if (this.getReferenceTypeName() == null) { - return this.getValueString() ; - } - return this.getValueString() ; - } }