import net.sourceforge.phpeclipse.xdebug.core.PHPDebugUtils;
+import org.eclipse.core.runtime.Platform;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.model.IValue;
import org.eclipse.debug.core.model.IVariable;
private XDebugAbstractValue fValue;
private String fFacet;
private XDebugVariable fParent; // The parent variable (a back link)
+ private String fTypeName;
+
-
/**
* Constructs a variable contained in the given stack frame
* with the given name.
- *
+ *
* @param frame owning stack frame
* @param name variable name
*/
public XDebugVariable(XDebugStackFrame frame, Node property, XDebugVariable parent) throws DebugException {
super((XDebugTarget) frame.getDebugTarget());
-
+
this.fParent = parent;
-
+
if (frame != null ) {
fFrame = frame;
}
- if (parent == null) {
- fName = "$" + PHPDebugUtils.getAttributeValue(property,"name"); // Prepend the variable 'short' name with the php variable prefix '$'
+ String name = PHPDebugUtils.getAttributeValue (property, "name"); // Get the name of the variable (XDebug submits the name without the '$' prefix)
+
+ if (fParent == null) {
+ fName = "$" + 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 '$'
+ if (fParent.isArray ()) {
+ fName = "['" + name + "']";
+ }
+ else if (fParent.isObject ()) {
+ fName = name;
+ }
+ else {
+ fName = 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");
+ fName = PHPDebugUtils.getAttributeValue (property, "address");
+ }
+
+ fFacet = PHPDebugUtils.getAttributeValue (property, "facet");
+ fTypeName = PHPDebugUtils.getAttributeValue (property, "type");
+
+ if (fTypeName.equals ("int")) {
+ fValue = new XDebugIntValue (frame, property);
+ }
+ else if (fTypeName.equals ("float")) {
+ fValue = new XDebugFloatValue (frame, property);
+ }
+ else if (fTypeName.equals ("bool")) {
+ fValue = new XDebugBooleanValue (frame, property);
+ }
+ else if (fTypeName.equals ("string")) {
+ fValue = new XDebugStringValue (frame, property);
+ }
+ else if (fTypeName.equals ("array")) {
+ fValue = new XDebugArrayValue (frame, property, this);
+ }
+ else if (fTypeName.equals ("object")) {
+ fValue = new XDebugObjectValue (frame, property, this);
+ }
+ else if (fTypeName.equals ("resource")) {
+ fValue = new XDebugResourceValue (frame, property);
+ }
+ else {
+ fValue = new XDebugValue (frame, property);
}
-
- fFacet = PHPDebugUtils.getAttributeValue(property, "facet");
-
- String typeName = PHPDebugUtils.getAttributeValue(property, "type");
-
- if (typeName.equals("int") )
- fValue = new XDebugIntValue(frame, property);
- else if (typeName.equals("float") )
- fValue = new XDebugFloatValue(frame, property);
- else if (typeName.equals("bool") )
- fValue = new XDebugBooleanValue(frame, property);
- else if (typeName.equals("string") )
- fValue = new XDebugStringValue(frame, property);
- else if (typeName.equals("array") )
- fValue = new XDebugArrayValue(frame, property, this);
- else if (typeName.equals("object") )
- fValue = new XDebugObjectValue(frame, property, this);
- else if (typeName.equals("resource") )
- fValue = new XDebugResourceValue(frame, property);
- else
- fValue = new XDebugValue(frame, property);
- }
-
+ }
+
+ public boolean isArray () {
+ return fTypeName.equals ("array");
+ }
+
+ public boolean isObject () {
+ return fTypeName.equals ("object");
+ }
+
+ /**
+ * @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class)
+ */
+ public Object getAdapter(Class adapter) {
+ if (adapter.getName ().equals ("org.eclipse.debug.ui.actions.IWatchExpressionFactoryAdapter")) {
+ return new XDebugWatchExpressionFactoryAdapter ();
+ }
+
+ return Platform.getAdapterManager().getAdapter (this, adapter);
+ }
+
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.IVariable#getValue()
*/
public IValue getValue() {
return fValue;
}
-
+
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.IVariable#getName()
*/
- public String getName() {
+ public String getName () {
return fName;
}
-
+
/*
* @return The fully qualified name of the variable
*/
public String getReferenceTypeName() throws DebugException {
return fValue.getReferenceTypeName();
}
-
+
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.IVariable#hasValueChanged()
*/
public boolean hasValueChanged() throws DebugException {
return fValue.hasChanged();
}
-
+
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.IValueModification#setValue(java.lang.String)
*/
fValue.setValue(expression);
}
}
-
+
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.IValueModification#setValue(org.eclipse.debug.core.model.IValue)
*/
public boolean verifyValue(IValue value) throws DebugException {
return false;
}
-
+
public String getValueString() throws DebugException {
return fValue.getValueString();
}
-
+
public String getVisibility() {
return fFacet;
}
-
+
/**
*
*/
public void setParent(XDebugVariable parent) {
this.fParent = parent;
}
-}
\ No newline at end of file
+}