X-Git-Url: http://git.phpeclipse.com 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 21663d3..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 @@ -8,7 +8,6 @@ package net.sourceforge.phpeclipse.xdebug.php.model; import net.sourceforge.phpeclipse.xdebug.core.PHPDebugUtils; -import org.eclipse.debug.core.DebugEvent; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.model.IValue; import org.eclipse.debug.core.model.IVariable; @@ -16,234 +15,173 @@ import org.w3c.dom.Node; /** * @author Axel - * - * TODO To change the template for this generated type comment go to Window - - * Preferences - Java - Code Style - Code Templates + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates */ public class XDebugVariable extends XDebugElement implements IVariable { - - public static final int VARTYPE_UNKNOWN = -1; - - public static final int VARTYPE_UNINITIALIZED = 0; - - public static final int VARTYPE_STRING = 1; - - public static final int VARTYPE_INT = 2; - - public static final int VARTYPE_FLOAT = 3; - - public static final int VARTYPE_ARRAY = 8; - - public static final int VARTYPE_HASH = 9; - - public static final int VARTYPE_OBJECT = 10; - - // name & stack frmae - private String fName; - - private XDebugStackFrame fFrame; - - private String fFullName; - - // private String fTypeName; - // private int fType; + private String fName; + private String fNameFull; + private XDebugStackFrame fFrame; private XDebugAbstractValue fValue; + private String fFacet; + private XDebugVariable fParent; // The parent variable (a back link) - private String fEncoding; - - private int fNumChildren; - - // private Node fVariableNode; - + /** - * Constructs a variable contained in the given stack frame with the given - * name. + * Constructs a variable contained in the given stack frame + * with the given name. * - * @param frame - * owning stack frame - * @param name - * variable name + * @param frame owning stack frame + * @param name variable name */ - public XDebugVariable(XDebugStackFrame frame, Node property) { + public XDebugVariable(XDebugStackFrame frame, Node property, XDebugVariable parent) throws DebugException { super((XDebugTarget) frame.getDebugTarget()); - fFrame = frame; - init(property); - - } - - private void init(Node property) { - fFullName = PHPDebugUtils.getAttributeValue(property, "fullname"); - fName = PHPDebugUtils.getAttributeValue(property, "name"); - fEncoding = PHPDebugUtils.getAttributeValue(property, "encoding"); - if (PHPDebugUtils.getAttributeValue(property, "numchildren").equals("")) - fNumChildren = 0; - else - fNumChildren = Integer.parseInt(PHPDebugUtils.getAttributeValue( - property, "numchildren")); + + 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 '$' + } + 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"); + } + + fFacet = PHPDebugUtils.getAttributeValue(property, "facet"); String typeName = PHPDebugUtils.getAttributeValue(property, "type"); - // if (typeName.equals("uninitialized") ) - // fValue= new XDebugValue(this,property,typeName); - if (typeName.equals("int")) - fValue = new XDebugIntValue(this, property, typeName); - else if (typeName.equals("float")) - fValue = new XDebugFloatValue(this, property, typeName); - else if (typeName.equals("bool")) - fValue = new XDebugBooleanValue(this, property, typeName); - else if (typeName.equals("string")) - fValue = new XDebugStringValue(this, property, typeName); - else if (typeName.equals("array")) - fValue = new XDebugArrayValue(this, property, typeName); - else if (typeName.equals("hash")) - fValue = new XDebugArrayValue(this, property, typeName); - else if (typeName.equals("object")) - fValue = new XDebugArrayValue(this, property, typeName); + 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(this, property, typeName); - - // else if (typeName.equals("float") ) - // fTypeName= VARTYPE_FLOAT; - // else if (typeName.equals("string") ) - // fTypeName= VARTYPE_STRING; - // else if (typeName.equals("hash") ) - // fTypeName= VARTYPE_HASH; - // else if (typeName.equals("array") ) - // fTypeName= VARTYPE_ARRAY; - // else if (typeName.equals("object") ) - // fTypeName= VARTYPE_OBJECT; - - // fTypeName=type; - // - // fValue= new XDebugValue(this,property); + fValue = new XDebugValue(frame, property); } - - /* - * (non-Javadoc) - * + + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IVariable#getValue() */ - public IValue getValue() throws DebugException { + public IValue getValue() { return fValue; - // return ((XDebugTarget)getDebugTarget()).getVariableValue(this); } - - /* - * (non-Javadoc) - * + + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IVariable#getName() */ - public String getName() throws DebugException { - if (fFullName.endsWith("]")) - return fFullName.substring(fFullName.lastIndexOf('[')); - else - return fName; + public String getName() { + return fName; } - + /* - * (non-Javadoc) - * + * @return The fully qualified name of the variable + */ + public String getNameFull () { + return fNameFull; + } + + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IVariable#getReferenceTypeName() */ public String getReferenceTypeName() throws DebugException { return fValue.getReferenceTypeName(); } - - /* - * (non-Javadoc) - * + + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IVariable#hasValueChanged() */ public boolean hasValueChanged() throws DebugException { - // TODO Auto-generated method stub - return false; + return fValue.hasChanged(); } - - /* - * (non-Javadoc) - * + + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IValueModification#setValue(java.lang.String) */ public void setValue(String expression) throws DebugException { - if (fValue.setValue(expression)) - fireEvent(new DebugEvent(this, DebugEvent.CHANGE, - DebugEvent.CONTENT)); + if (fFrame.setVariableValue(this, expression)) { + fValue.setValue(expression); + } } - - /* - * (non-Javadoc) - * + + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IValueModification#setValue(org.eclipse.debug.core.model.IValue) */ public void setValue(IValue value) throws DebugException { } - /* - * (non-Javadoc) - * + /** + * + * @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.setChanged(changed); + } + + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IValueModification#supportsValueModification() */ public boolean supportsValueModification() { return fValue.supportsValueModification(); } - /* - * (non-Javadoc) - * + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IValueModification#verifyValue(java.lang.String) */ public boolean verifyValue(String expression) throws DebugException { - return fValue.verifyValue(expression); + /*return true; */return fValue.verifyValue(expression); } - /* - * (non-Javadoc) - * + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IValueModification#verifyValue(org.eclipse.debug.core.model.IValue) */ public boolean verifyValue(IValue value) throws DebugException { return false; } - - /** - * Returns the stack frame owning this variable. - * - * @return the stack frame owning this variable - */ - protected XDebugStackFrame getStackFrame() { - return fFrame; - } - - // public int getType() { - // return fType; - // } - + public String getValueString() throws DebugException { return fValue.getValueString(); } - - public boolean hasChildren() { - return (fNumChildren > 0); - } - - public boolean isArray() { - return (fValue.isArray()); - } - - public String getEncoding() { - return fEncoding; - } - - public void setEncoding(String encoding) { - fEncoding = encoding; + + public String getVisibility() { + return fFacet; } - - public String toString() { - return fValue.toString(); + + /** + * + */ + public XDebugVariable getParent() { + return fParent; } - public String getFullName() { - return fFullName; + /** + * + */ + public void setParent(XDebugVariable parent) { + this.fParent = parent; } - -} +} \ No newline at end of file