package net.sourceforge.phpeclipse.xdebug.php.model;
import net.sourceforge.phpeclipse.xdebug.core.PHPDebugUtils;
+
import org.eclipse.debug.core.DebugException;
-import org.eclipse.debug.core.DebugEvent;
import org.eclipse.debug.core.model.IValue;
import org.eclipse.debug.core.model.IVariable;
import org.w3c.dom.Node;
* 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;
- public static final int VARTYPE_RESOURCE = 11;
-
- // name & stack frmae
+public class XDebugVariable extends XDebugElement implements IVariable {
private String fName;
private XDebugStackFrame fFrame;
- private String fFullName;
private XDebugAbstractValue fValue;
- private String fEncoding;
- private int fNumChildren;
+ private String fFacet;
/**
* Constructs a variable contained in the given stack frame
* @param frame owning stack frame
* @param name variable name
*/
- public XDebugVariable( String typeName, String fullname ) {
- fFullName = fullname;
- fName = fullname;
- if (typeName.equals("int") )
- fValue= new XDebugIntValue(this,typeName);
- else if (typeName.equals("float") )
- fValue= new XDebugFloatValue(this,typeName);
- else if (typeName.equals("bool") )
- fValue= new XDebugBooleanValue(this,typeName);
- else if (typeName.equals("string") )
- fValue= new XDebugStringValue(this,typeName);
- else if (typeName.equals("array") )
- fValue= new XDebugArrayValue(this,typeName);
- else if (typeName.equals("hash") )
- fValue= new XDebugArrayValue(this,typeName);
- else if (typeName.equals("object") )
- fValue= new XDebugArrayValue(this,typeName);
- else if (typeName.equals("resource") )
- fValue= new XDebugResourceValue(this,typeName);
- else
- fValue= new XDebugValue(this,typeName);
- }
-
- public XDebugVariable(XDebugStackFrame frame, Node property) {
- super((XDebugTarget) frame.getDebugTarget());
- fFrame = frame;
- init(property);
- }
-
- public XDebugVariable(XDebugStackFrame frame, String fullname, String name, String typeName) {
+ public XDebugVariable(XDebugStackFrame frame, Node property) throws DebugException {
super((XDebugTarget) frame.getDebugTarget());
- fFrame = frame;
- fFullName = fullname;
- fName = name;
- if (typeName.equals("int") )
- fValue= new XDebugIntValue(this,typeName);
- else if (typeName.equals("float") )
- fValue= new XDebugFloatValue(this,typeName);
- else if (typeName.equals("bool") )
- fValue= new XDebugBooleanValue(this,typeName);
- else if (typeName.equals("string") )
- fValue= new XDebugStringValue(this,typeName);
- else if (typeName.equals("array") )
- fValue= new XDebugArrayValue(this,typeName);
- else if (typeName.equals("hash") )
- fValue= new XDebugArrayValue(this,typeName);
- else if (typeName.equals("object") )
- fValue= new XDebugArrayValue(this,typeName);
- else if (typeName.equals("resource") )
- fValue= new XDebugResourceValue(this,typeName);
- else
- fValue= new XDebugValue(this,typeName);
- }
-
- 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"));
+ if (frame != null ) {
+ fFrame = frame;
+ }
+
+ fName = PHPDebugUtils.getAttributeValue(property,"name");
+ if ("".equals(fName)) {
+ fName = PHPDebugUtils.getAttributeValue(property,"address");
+ }
+
+ fFacet = PHPDebugUtils.getAttributeValue(property, "facet");
- String typeName=PHPDebugUtils.getAttributeValue(property,"type");
+ 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);
+ fValue = new XDebugIntValue(frame, property);
else if (typeName.equals("float") )
- fValue= new XDebugFloatValue(this,property,typeName);
+ fValue = new XDebugFloatValue(frame, property);
else if (typeName.equals("bool") )
- fValue= new XDebugBooleanValue(this,property,typeName);
+ fValue = new XDebugBooleanValue(frame, property);
else if (typeName.equals("string") )
- fValue= new XDebugStringValue(this,property,typeName);
+ fValue = new XDebugStringValue(frame, property);
else if (typeName.equals("array") )
- fValue= new XDebugArrayValue(this,property,typeName);
- else if (typeName.equals("hash") )
- fValue= new XDebugArrayValue(this,property,typeName);
+ fValue = new XDebugArrayValue(frame, property);
else if (typeName.equals("object") )
- fValue= new XDebugArrayValue(this,property,typeName);
+ fValue = new XDebugObjectValue(frame, property);
+ else if (typeName.equals("resource") )
+ fValue = new XDebugResourceValue(frame, property);
else
- fValue= new XDebugValue(this,property,typeName);
+ fValue = new XDebugValue(frame, property);
}
-
+
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.IVariable#getValue()
*/
public IValue getValue() throws DebugException {
return fValue;
-// return ((XDebugTarget)getDebugTarget()).getVariableValue(this);
}
/* (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;
+ return fName;
}
/* (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));
- //fValue.setValueA(expression);
+ if (fFrame.setVariableValue(this, expression)) {
+ fValue.setValue(expression);
+ }
}
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.IValueModification#setValue(org.eclipse.debug.core.model.IValue)
*/
public void setValue(IValue value) throws DebugException {
- fValue.setValueB(value);
}
/* (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)
return false;
}
- /**
- * Returns the stack frame owning this variable.
- *
- * @return the stack frame owning this variable
- */
- protected XDebugStackFrame getStackFrame() {
- return fFrame;
- }
-
- public void setStackFrame(XDebugStackFrame frame) {
- fFrame=frame;
- super.setDebugTarget((XDebugTarget)frame.getDebugTarget());
- }
-
-// public int getType() {
-// return fType;
-// }
-
public String getValueString() throws DebugException {
return fValue.getValueString();
}
- /*public setValueString(String newValueStrig) throws DebugException {
- fValue.setValueString 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 toString() {
- return fValue.toString();
- }
-
- public String getFullName() {
- return fFullName;
- }
-
- public int getNumChildren() {
- return fNumChildren;
+ public String getVisibility() {
+ return fFacet;
}
-
- public void setNumChildren(int numChildren) {
- fNumChildren = numChildren;
- }
-
- public void setChange(IVariable oldVariable) throws DebugException {
- XDebugAbstractValue oldValue = null;
- IVariable[] newVariable = null;
- IVariable[] oldVariable1 = null;
-
- try {
- oldValue = (XDebugAbstractValue) oldVariable.getValue();
- } catch (DebugException e) {
- }
-
- try {
- oldVariable1 = ((XDebugVariable)oldVariable).getValue().getVariables();
- newVariable = fValue.getVariables();
- } catch (DebugException e) {
- }
-
-
- if(((XDebugVariable) oldVariable).getNumChildren() > 0) {
- if ( this.getNumChildren() == 0) {
- try {
- if (!fValue.getValueString().equals(((XDebugAbstractValue)oldValue).getValueString())) {
- fValue.sethasChanged(true);
- } else {
- fValue.sethasChanged(false);
- }
- } catch (DebugException e) {
- }
- } else {
- for(int i = 0; i < newVariable.length; i++) {
- ((XDebugVariable)newVariable[i]).setChange(((XDebugVariable)oldVariable1[i]));
- }
- }
- } else {
- if ( this.getNumChildren() == 0) {
- // controllare anche il tipo (unknow)
- //if (!fValue.getValueString().equals("uninitialized")) {
- if (!fValue.getValueString().equals(oldValue.getValueString())) {
- fValue.sethasChanged(true);
- } else {
- fValue.sethasChanged(false);
- }
- } else {
- IVariable dummy = new XDebugVariable("UNKNOWN", "");
- dummy.setValue("uninitialized");
- for(int i = 0; i < newVariable.length; i++) {
- ((XDebugVariable)newVariable[i]).setChange(dummy);
- }
- fValue.sethasChanged(true);
- }
- }
- }
-
}
\ No newline at end of file