From: robekras <robekras>
Date: Mon, 28 Mar 2011 16:05:30 +0000 (+0000)
Subject: 1) Added parameter 'parent' to XDebugVariable, so we can determine whether a variable... 
X-Git-Url: http://git.phpeclipse.com?hp=25fbb5f6816e4db4cea29970eea2ab8e66724946

1) Added parameter 'parent' to XDebugVariable, so we can determine whether a variable is a root node or a child node.
2) Prepend a '$' to the php variable names, if it is a root node. This let us add the variable to watch expression window (and also no need for cutting of the '$' in PHPDebugHover.
---

diff --git a/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugArrayValue.java b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugArrayValue.java
index 6174c3e..7680a89 100644
--- a/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugArrayValue.java
+++ b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugArrayValue.java
@@ -10,7 +10,7 @@ import org.w3c.dom.NodeList;
 public class XDebugArrayValue extends XDebugAbstractValue {
 	private int NumChildren;
 
-	public XDebugArrayValue(XDebugStackFrame variable, Node value) throws DebugException {
+	public XDebugArrayValue(XDebugStackFrame variable, Node value, XDebugVariable parent) throws DebugException {
 		super(variable, value);
 
 		NumChildren = 0;
@@ -25,7 +25,7 @@ public class XDebugArrayValue extends XDebugAbstractValue {
 			
 			for (int i = 0; i<property.getLength(); i++) {
 				Node propertyNode = property.item(i);
-				Variables[i] = new XDebugVariable(variable, propertyNode);
+				Variables[i] = new XDebugVariable(variable, propertyNode, parent);
 			}
 			
 			setChildren(Variables);
diff --git a/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugObjectValue.java b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugObjectValue.java
index a94b869..4e7be86 100644
--- a/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugObjectValue.java
+++ b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugObjectValue.java
@@ -12,7 +12,7 @@ import org.w3c.dom.NodeList;
 public class XDebugObjectValue extends XDebugAbstractValue {
 	private int NumChildren;
 
-	public XDebugObjectValue(XDebugStackFrame variable, Node value) throws DebugException {
+	public XDebugObjectValue(XDebugStackFrame variable, Node value, XDebugVariable parent) throws DebugException {
 		super(variable, value);
 
 		NumChildren = 0;
@@ -34,7 +34,7 @@ public class XDebugObjectValue extends XDebugAbstractValue {
 				String name     = PHPDebugUtils.getAttributeValue (propertyNode, "name");
 
 				if (!name.equals ("CLASSNAME")) {
-					a.add(new XDebugVariable(variable, propertyNode));
+					a.add(new XDebugVariable(variable, propertyNode, parent));
 				}
 			}
 
diff --git a/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugStackFrame.java b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugStackFrame.java
index a1c9ab4..0ff0e23 100644
--- a/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugStackFrame.java
+++ b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugStackFrame.java
@@ -287,13 +287,13 @@ public class XDebugStackFrame  extends XDebugElement implements IStackFrame, Com
 
 		int length = property.getLength();
 		for (int i = 0; i < length; i++) {
-			XDebugVariable var = new XDebugVariable(this, property.item(i));
+			XDebugVariable var = new XDebugVariable(this, property.item(i), null);
 			fVariables[i] = var;
 		}
 
 		int globalLength = propertyGlobal.getLength();
 		for (int k = 0; k < globalLength; k++) {
-			XDebugVariable var = new XDebugVariable(this, propertyGlobal.item(k));
+			XDebugVariable var = new XDebugVariable(this, propertyGlobal.item(k), null);
 			fVariables[k + length] = var;
 		}
 	}
diff --git a/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugVariable.java b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugVariable.java
index 35b04a0..31b9b0d 100644
--- a/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugVariable.java
+++ b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugVariable.java
@@ -21,6 +21,7 @@ import org.w3c.dom.Node;
  */
 public class XDebugVariable extends XDebugElement implements IVariable {
 	private String 				fName;
+	private String              fNameFull;
 	private XDebugStackFrame 	fFrame;
 	private XDebugAbstractValue fValue;
 	private String 				fFacet;
@@ -34,13 +35,26 @@ public class XDebugVariable extends XDebugElement implements IVariable {
 	 * @param frame owning stack frame
 	 * @param name variable name
 	 */
-	public XDebugVariable(XDebugStackFrame frame, Node property) throws DebugException {
+	public XDebugVariable(XDebugStackFrame frame, Node property, XDebugVariable parent) throws DebugException {
 		super((XDebugTarget) frame.getDebugTarget());
+		
+		this.fParent = parent;
+		
 		if (frame != null ) {
 			fFrame = frame;
 		}
 
-		fName = PHPDebugUtils.getAttributeValue(property,"name");
+		if (parent == null) {
+		    fName = "$" + PHPDebugUtils.getAttributeValue(property,"name"); // Prepend the variable 'short' name with the php variable prefix '$'
+		}
+		else {
+		    fName = PHPDebugUtils.getAttributeValue(property,"name");       // If this is the root variable don't prepend prefix '$'
+		}
+		  
+		fNameFull = PHPDebugUtils.getAttributeValue(property,"fullname");   // The fullname has the '$' prepended, but it is the fully qualified name
+		                                                                    // e.g. $myvar->child->a_variable. The fullname would be suitable to take for
+		                                                                    // the setting a watch expression
+		
 		if ("".equals(fName)) {
 			fName = PHPDebugUtils.getAttributeValue(property,"address");
 		}
@@ -58,9 +72,9 @@ public class XDebugVariable extends XDebugElement implements IVariable {
 		else if (typeName.equals("string") )
 			fValue = new XDebugStringValue(frame, property);
 		else if (typeName.equals("array") )
-			fValue = new XDebugArrayValue(frame, property);
+			fValue = new XDebugArrayValue(frame, property, this);
 		else if (typeName.equals("object") )
-			fValue = new XDebugObjectValue(frame, property);
+			fValue = new XDebugObjectValue(frame, property, this);
 		else if (typeName.equals("resource") )
 			fValue = new XDebugResourceValue(frame, property);
 		else
@@ -81,6 +95,13 @@ public class XDebugVariable extends XDebugElement implements IVariable {
 		return fName;
 	}
 	
+	/*
+	 * @return The fully qualified name of the variable
+	 */
+    public String getNameFull () {
+        return fNameFull;
+    }
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.debug.core.model.IVariable#getReferenceTypeName()
 	 */
diff --git a/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugWatchExpressionDelegate.java b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugWatchExpressionDelegate.java
index e90aedd..d434a53 100644
--- a/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugWatchExpressionDelegate.java
+++ b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugWatchExpressionDelegate.java
@@ -28,7 +28,7 @@ public class XDebugWatchExpressionDelegate implements IWatchExpressionDelegate {
 
 			XDebugVariable variable = null;
 			try {
-				variable = new XDebugVariable(frame, evalProperty);
+				variable = new XDebugVariable(frame, evalProperty, null);
 				x = new XDebugWatchExpressionResult(expression, variable.getValue(), null);
 			} catch (DebugException e) {
 				// TODO Auto-generated catch block