More refactory.
[phpeclipse.git] / net.sourceforge.phpeclipse.xdebug.core / src / net / sourceforge / phpeclipse / xdebug / php / model / XDebugStackFrame.java
index 1bc38bb..e7b1182 100644 (file)
@@ -6,17 +6,18 @@
  */
 package net.sourceforge.phpeclipse.xdebug.php.model;
 
-//import java.net.MalformedURLException;
+import java.net.MalformedURLException;
 import java.net.URL;
 
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.debug.core.model.IRegisterGroup;
 import org.eclipse.debug.core.model.IStackFrame;
 import org.eclipse.debug.core.model.IThread;
 import org.eclipse.debug.core.model.IVariable;
-//import net.sourceforge.phpeclipse.xdebug.core.IDebugConnection;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
 
 /**
  * @author PHPeclipse team
@@ -26,12 +27,7 @@ import org.eclipse.core.runtime.Path;
 public class XDebugStackFrame  extends XDebugElement implements IStackFrame {
        private XDebugThread fThread;
 
-       private int fId;
-       
-       //private IPath fName;
-       
        private URL fName;
-       
        private int fLineNumber;
        private int fLevel;
        private String fType;
@@ -40,7 +36,6 @@ public class XDebugStackFrame  extends XDebugElement implements IStackFrame {
        private IVariable[] fVariables;
 
        private int fStepCount = 0;
-       //private int fCurrentStepCount = 0;
        
        /**
         * Constructs a stack frame in the given thread with the given
@@ -50,10 +45,19 @@ public class XDebugStackFrame  extends XDebugElement implements IStackFrame {
         * @param data frame data
         * @param id stack frame id (0 is the bottom of the stack)
         */
-       public XDebugStackFrame(XDebugThread thread, int id) {
+       public XDebugStackFrame(XDebugThread thread, int level, String type, int lineNumber, String where, /*URL*/String filename) {
                super(thread == null ? null : (XDebugTarget) thread.getDebugTarget());
-               fId = id;
+               
+               fLevel = level;
                fThread = thread;
+               fType = type;
+               fLineNumber = lineNumber;
+               fWhere = where; 
+               try {
+               fName = new URL(filename);
+               } catch (MalformedURLException e) {
+                       e.printStackTrace();
+               }
        }
        
        public void incrementStepCounter() {
@@ -69,18 +73,40 @@ public class XDebugStackFrame  extends XDebugElement implements IStackFrame {
        
        public IVariable[] getVariables() throws DebugException {
                if (fVariables == null) {
-                       fVariables = fTarget.getVariables(this, fLevel);
+                       Node dfl = ((XDebugTarget) getDebugTarget()).getLocalVariables(fLevel);
+                       Node dfg = ((XDebugTarget) getDebugTarget()).getGlobalVariables(fLevel);
+                       parseVariable(dfl, dfg);
                }
 
                return fVariables;
        }
        
-       public void evaluateChange(IStackFrame OldStackFrame) throws DebugException {
+       private void parseVariable(Node localVariables, Node globalVariables) {
+               NodeList property = localVariables.getChildNodes();
+               
+               NodeList propertyGlobal = globalVariables.getChildNodes();
+               
+               fVariables = new IVariable[property.getLength() + propertyGlobal.getLength()];
+               
+               int length = property.getLength();
+               for (int i = 0; i < length; i++) {
+                       XDebugVariable var = new XDebugVariable(this, property.item(i));
+                       fVariables[i] = var;
+               }
+
+               int globalLength = propertyGlobal.getLength();
+               for (int k = 0; k < globalLength; k++) {
+                       XDebugVariable var = new XDebugVariable(this, propertyGlobal.item(k));
+                       fVariables[k + length] = var;
+               }
+       }
+       
+       /*public void evaluateChange(IStackFrame OldStackFrame) throws DebugException {
                IVariable[] OldVariable = ((XDebugStackFrame) OldStackFrame).getVariables();
                for (int i = 0; i < fVariables.length; i++) {
                        ((XDebugVariable) fVariables[i]).setChange(OldVariable[i]);
                }
-       }
+       }*/
        
        /* (non-Javadoc)
         * @see org.eclipse.debug.core.model.IStackFrame#hasVariables()
@@ -115,8 +141,6 @@ public class XDebugStackFrame  extends XDebugElement implements IStackFrame {
         * @see org.eclipse.debug.core.model.IStackFrame#getName()
         */
        public String getName() throws DebugException {
-               //String a = fName.getFile();
-               //return fName.lastSegment().toString()+"::"+fWhere+ " line: "+ fLineNumber;
                return fName.toString()+"::"+fWhere+ " line: "+ fLineNumber;
        }
        
@@ -259,15 +283,9 @@ public class XDebugStackFrame  extends XDebugElement implements IStackFrame {
                
                if (obj instanceof XDebugStackFrame) {
                        XDebugStackFrame sf = (XDebugStackFrame)obj;
-                       //try {
-                               isSameStackFrame = sf.getSourceName().equals(getSourceName()) &&
-                                       /*sf.getLineNumber() == getLineNumber() &&*/
-                                       /*sf.getLevel() == getLevel() &&*/
-                                       sf.getType().equals(getType()) &&
-                                       sf.getWhere().equals(getWhere()); //&&
-                                       /*sf.fId == fId;*/
-                       /*} catch (DebugException e) {
-                       }*/
+                       isSameStackFrame = sf.getSourceName().equals(getSourceName()) &&
+                               sf.getType().equals(getType()) &&
+                               sf.getWhere().equals(getWhere()); //&&
                }
 
                return isSameStackFrame;
@@ -280,14 +298,11 @@ public class XDebugStackFrame  extends XDebugElement implements IStackFrame {
                if (obj instanceof XDebugStackFrame) {
                        XDebugStackFrame sf = (XDebugStackFrame)obj;
                        try {
-                               return sf.getSourceName().equals(getSourceName()) &&
-                                       sf.getLineNumber() == getLineNumber() &&
-                                       sf.getLevel() == getLevel() &&
-                                       sf.getType().equals(getType()) &&
-                                       sf.getWhere().equals(getWhere());
-/*                                     sf.getType() == getType() &&
-                                       sf.getWhere() == getWhere() &&*/
-                                       /*sf.fId == fId;*/
+                               return sf.getSourceName().equals(fName) &&
+                                       sf.getLineNumber() == fLineNumber &&
+                                       sf.getLevel() == fLevel &&
+                                       sf.getType().equals(fType) &&
+                                       sf.getWhere().equals(fWhere);
                        } catch (DebugException e) {
                        }
                }
@@ -296,74 +311,29 @@ public class XDebugStackFrame  extends XDebugElement implements IStackFrame {
        }
        
        /* (non-Javadoc)
-        * @see java.lang.Object#equals(java.lang.Object)
-        */
-       public boolean equalsOld(Object obj) {
-               if (obj instanceof XDebugStackFrame) {
-                       XDebugStackFrame sf = (XDebugStackFrame)obj;
-                       try {
-                               return sf.getSourceName().equals(getSourceName()) &&
-                                       sf.getLineNumber() == getLineNumber() &&
-                                       sf.fId == fId;
-                       } catch (DebugException e) {
-                       }
-               }
-               return false;
-       }
-       
-       /* (non-Javadoc)
         * @see java.lang.Object#hashCode()
         */
        public int hashCode() {
-//             return getSourceName().hashCode() + fId;
                return getSourceName().hashCode() + fLevel;
        }
        
-       /**
-        * 
-        * @return this stack frame's unique identifier within its thread
-        */
-       protected int getIdentifier() {
-               return fId;
-       }
-
-
-       public void setFullName(URL name) {
-               fName = name;
-       }
-
-
        public URL getFullName() {
                return fName;
        }
        
-
        public int getLevel() {
                return fLevel;
        }
 
-       public void setLevel(int level) {
-               fLevel = level;
-               fId = level;
-       }
-
        public String getType() {
                return fType;
        }
 
-       public void setType(String type) {
-               fType = type;
-       }
-
        public String getWhere() {
                return fWhere;
        }
 
-       public void setWhere(String where) {
-               fWhere = where;
-       }
-
-       public void setLineNumber(int newlineNumber) {
-               fLineNumber = newlineNumber;
+       public boolean setVariableValue(XDebugVariable variable, String expression)  throws DebugException {
+               return ((XDebugTarget) getDebugTarget()).setVarValue("$" + variable.getName(), expression);
        }
 }
\ No newline at end of file