*/
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.DebugEvent;
import org.eclipse.debug.core.model.IValue;
import org.eclipse.debug.core.model.IVariable;
import org.w3c.dom.Node;
* 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_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
private String fName;
private XDebugStackFrame fFrame;
private String fFullName;
-// private String fTypeName;
-// private int fType;
private XDebugAbstractValue fValue;
private String fEncoding;
private int fNumChildren;
-// private Node fVariableNode;
/**
* 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) {
+ 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) {
fValue= new XDebugArrayValue(this,property,typeName);
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);
}
+
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.IVariable#getValue()
*/
return fValue;
// return ((XDebugTarget)getDebugTarget()).getVariableValue(this);
}
+
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.IVariable#getName()
*/
else
return fName;
}
+
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.IVariable#getReferenceTypeName()
*/
public String getReferenceTypeName() throws DebugException {
return fValue.getReferenceTypeName();
}
+
/* (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)
* @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);
}
+
/* (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#supportsValueModification()
*/
public boolean supportsValueModification() {
return fValue.supportsValueModification();
}
+
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.IValueModification#verifyValue(java.lang.String)
*/
public boolean verifyValue(String expression) throws DebugException {
return fValue.verifyValue(expression);
}
+
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.IValueModification#verifyValue(org.eclipse.debug.core.model.IValue)
*/
protected XDebugStackFrame getStackFrame() {
return fFrame;
}
+
+ public void setStackFrame(XDebugStackFrame frame) {
+ fFrame=frame;
+ super.setDebugTarget((XDebugTarget)frame.getDebugTarget());
+ }
// public int getType() {
// return fType;
return fValue.getValueString();
}
+ /*public setValueString(String newValueStrig) throws DebugException {
+ fValue.setValueString getValueString();
+ }*/
+
public boolean hasChildren() {
- return (fNumChildren>0);
+ return (fNumChildren > 0);
}
public boolean isArray() {
return fFullName;
}
-}
+ public int getNumChildren() {
+ return fNumChildren;
+ }
+
+ 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