Refactory.
[phpeclipse.git] / net.sourceforge.phpeclipse.xdebug.core / src / net / sourceforge / phpeclipse / xdebug / php / model / XDebugStackFrame.java
index 1bc38bb..4cacdd9 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
@@ -28,8 +29,6 @@ public class XDebugStackFrame  extends XDebugElement implements IStackFrame {
 
        private int fId;
        
-       //private IPath fName;
-       
        private URL fName;
        
        private int fLineNumber;
@@ -40,7 +39,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 +48,21 @@ 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 id, String type, int lineNumber, String where, /*URL*/String filename) {
                super(thread == null ? null : (XDebugTarget) thread.getDebugTarget());
+               
                fId = id;
+               fLevel = id;
                fThread = thread;
+               fType = type;
+               fLineNumber = lineNumber;
+               fWhere = where;
+               
+               try {
+               fName = new URL(filename);
+               } catch (MalformedURLException e) {
+                       e.printStackTrace();
+               }
        }
        
        public void incrementStepCounter() {
@@ -69,18 +78,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 +146,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;
        }
        
@@ -315,7 +344,6 @@ public class XDebugStackFrame  extends XDebugElement implements IStackFrame {
         * @see java.lang.Object#hashCode()
         */
        public int hashCode() {
-//             return getSourceName().hashCode() + fId;
                return getSourceName().hashCode() + fLevel;
        }
        
@@ -323,15 +351,9 @@ public class XDebugStackFrame  extends XDebugElement implements IStackFrame {
         * 
         * @return this stack frame's unique identifier within its thread
         */
-       protected int getIdentifier() {
+       /*protected int getIdentifier() {
                return fId;
-       }
-
-
-       public void setFullName(URL name) {
-               fName = name;
-       }
-
+       }*/
 
        public URL getFullName() {
                return fName;
@@ -342,28 +364,15 @@ public class XDebugStackFrame  extends XDebugElement implements IStackFrame {
                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