X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugAbstractValue.java b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugAbstractValue.java index a3c7cdd..f60537c 100644 --- a/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugAbstractValue.java +++ b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugAbstractValue.java @@ -17,158 +17,319 @@ import org.w3c.dom.NodeList; /** * @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 abstract class XDebugAbstractValue extends XDebugElement implements - IValue { - +public abstract class XDebugAbstractValue extends XDebugElement implements IValue { + public static final int VALUETYPE_UNKNOWN = -1; - public static final int VALUETYPE_UNINITIALIZED = 0; - public static final int VALUETYPE_STRING = 1; - public static final int VALUETYPE_INT = 4; - public static final int VALUETYPE_FLOAT = 5; - public static final int VALUETYPE_BOOLEAN = 6; - public static final int VALUETYPE_ARRAY = 8; - public static final int VALUETYPE_HASH = 9; - public static final int VALUETYPE_OBJECT = 10; + public static final int VALUETYPE_RESOURCE = 11; + protected XDebugVariable fVariable; - private IVariable[] fVariables; - protected String fValueString; - protected int fType; - protected String fTypeName; + + private boolean fhasChanged; + + public XDebugAbstractValue(XDebugVariable variable, String typeName) { + super((XDebugTarget) variable.getDebugTarget()); + fVariable = variable; + setType(typeName); + fVariables= new IVariable[0]; + } - public XDebugAbstractValue(XDebugVariable variable, Node varNode, - String typeName) { + + public XDebugAbstractValue(XDebugVariable variable,Node varNode,String typeName) { super((XDebugTarget) variable.getDebugTarget()); fVariable = variable; - if (varNode == null) { + if (varNode==null){ try { - System.out.println(variable.getName() + "=null"); + System.out.println(variable.getName()+"=null"); } catch (DebugException e) { // TODO Auto-generated catch block e.printStackTrace(); } - return; + return; } setType(typeName); NodeList property = varNode.getChildNodes(); if (variable.hasChildren()) { - renderValueString("" + property.getLength()); + renderValueString(""+property.getLength()); fVariables = new IVariable[property.getLength()]; - for (int i = 0; i < property.getLength(); i++) { + for (int i = 0; i 0); } - + public boolean isArray() { return ((fType & VALUETYPE_ARRAY) > 0); } - + public abstract void setType(String typeName); - public abstract void renderValueString(String data); public abstract boolean verifyValue(String expression); - + public boolean setValue(String expression) { if (!verifyValue(expression)) return false; - if (fTarget.setVarValue(fVariable.getFullName(), expression)) { - renderValueString(expression); - return true; - } + if( fTarget == null ) { + renderValueString(expression); + } else { + if(fTarget.setVarValue(fVariable.getFullName(),expression)) { + renderValueString(expression); + return true; + } + } return false; } + + public boolean setValueA(String expression) { + if(! fValueString.toString().equals(expression)) { + fVariables= new IVariable[0]; + fValueString = expression; + fhasChanged = true; + } else { + fhasChanged = false; + } + + return true; + } + + public boolean setValueB(IValue value) { + try { + fTypeName = value.getReferenceTypeName(); + } catch (DebugException e) { + } + + fhasChanged = false; + + switch (((XDebugAbstractValue) value). getType()) { + case VALUETYPE_UNINITIALIZED: + case VALUETYPE_STRING: + case VALUETYPE_INT: + case VALUETYPE_FLOAT: + case VALUETYPE_BOOLEAN: + try { + if (! fValueString.equals(value.getValueString())) { + fValueString = value.getValueString(); + fhasChanged = true; + } + } catch (DebugException e) { + int a = 10; + a++; + } + break; + + case VALUETYPE_RESOURCE: + try { + if (! fValueString.equals(value.getValueString())) { + fValueString = value.getValueString(); + fhasChanged = true; + } + } catch (DebugException e) { + int a = 10; + a++; + } + break; + + case VALUETYPE_HASH: + int a = 20; + a = a +2; + break; + + case VALUETYPE_OBJECT: + case VALUETYPE_ARRAY: + try { + IVariable[] newVariable = value.getVariables(); + + if (fVariables.length == 0) { + if (newVariable.length > 0) { + fValueString = value.getValueString(); + fVariables = newVariable; + fhasChanged = true; + } + } else { + for(int i = 0; i < fVariables.length; i++) { + // da capire quando e perche' + try { + if (! ((XDebugVariable)fVariables[i]).equals(((XDebugVariable)newVariable[i]))) { + //fVariables[i].setValue(newVariable[i].getValue()); + fhasChanged = true; + } + } catch (Exception e) { + //int b = 1; + } + } + if (fhasChanged) { + fValueString = value.getValueString(); + for(int i = 0; i < fVariables.length; i++) { + try { + fVariables[i].setValue(newVariable[i].getValue()); + } catch (Exception e) { + //int b = 1; + } + } + } + } + } catch (DebugException e) { + int b = 10; + b++; + } + + break; + } + + return true; + } + + public boolean setValueBOld(IValue value) { + fhasChanged = false; + + switch (((XDebugAbstractValue) value). getType()) { + case VALUETYPE_UNINITIALIZED: + case VALUETYPE_STRING: + case VALUETYPE_INT: + case VALUETYPE_FLOAT: + case VALUETYPE_BOOLEAN: + try { + if (! fValueString.equals(value.getValueString())) { + fValueString = value.getValueString(); + fhasChanged = true; + } + } catch (DebugException e) { + } + break; + + case VALUETYPE_HASH: + int a = 20; + a = a +2; + break; + + case VALUETYPE_OBJECT: + case VALUETYPE_ARRAY: + try { + IVariable[] newVariable = value.getVariables(); + + if (fVariables.length == 0) { + if (newVariable.length > 0) { + fValueString = value.getValueString(); + fVariables = newVariable; + fhasChanged = true; + } + } else { + for(int i = 0; i < fVariables.length; i++) { + if (! ((XDebugVariable)fVariables[i]).equals(((XDebugVariable)newVariable[i]))) { + //fVariables[i].setValue(newVariable[i].getValue()); + fhasChanged = true; + } + } + if (fhasChanged) { + fValueString = value.getValueString(); + for(int i = 0; i < fVariables.length; i++) { + fVariables[i].setValue(newVariable[i].getValue()); + } + } + } + } catch (DebugException e) { + } + + break; + } + + return true; + } + + public int getType() { + return fType; + } public boolean supportsValueModification() { return false; } -} +} \ No newline at end of file