X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugStackFrame.java b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugStackFrame.java index ece6842..b292684 100644 --- a/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugStackFrame.java +++ b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugStackFrame.java @@ -6,12 +6,14 @@ */ package net.sourceforge.phpeclipse.xdebug.php.model; -import java.net.URI; -import java.net.URISyntaxException; +import java.net.URL; -import net.sourceforge.phpeclipse.xdebug.core.PHPDebugUtils; -import net.sourceforge.phpeclipse.xdebug.core.DebugConnection.DebugResponse; +//import net.sourceforge.phpeclipse.xdebug.core.Base64; +//import net.sourceforge.phpeclipse.xdebug.core.PHPDebugUtils; +//import net.sourceforge.phpeclipse.xdebug.core.xdebug.ResponseListener.DebugResponse; +//import net.sourceforge.phpeclipse.xdebug.core.xdebug.ResponseListener.XDebugResponse; +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; @@ -22,22 +24,25 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; /** + * @author PHPeclipse team * @author Axel * - * TODO To change the template for this generated type comment go to - * Window - Preferences - Java - Code Style - Code Templates */ public class XDebugStackFrame extends XDebugElement implements IStackFrame { - private XDebugThread fThread; -// private String fName; - private int fLineNo; - private String fFileName; + private int fId; - private IVariable[] fVariables; - private String fLevel; + + private URL fName; + + private int fLineNumber; + private int fLevel; private String fType; private String fWhere; + + private IVariable[] fVariables; + + private int fStepCount = 0; /** * Constructs a stack frame in the given thread with the given @@ -47,52 +52,14 @@ 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, Node stackNode, int id) { - super((XDebugTarget) thread.getDebugTarget()); + public XDebugStackFrame(XDebugThread thread, int id) { + super(thread == null ? null : (XDebugTarget) thread.getDebugTarget()); fId = id; fThread = thread; - init(stackNode); } - /** - * Initializes this frame based on its data - * - * @param data - */ - private void init(Node stackNode) { - - fLevel=PHPDebugUtils.getAttributeValue(stackNode,"level"); - fType=PHPDebugUtils.getAttributeValue(stackNode,"type"); - String fileName=PHPDebugUtils.unescapeString(PHPDebugUtils.getAttributeValue(stackNode,"filename")); - String lineNo=PHPDebugUtils.getAttributeValue(stackNode,"lineno"); - - if (lineNo!="") - fLineNo= Integer.parseInt(lineNo); - - fWhere=PHPDebugUtils.getAttributeValue(stackNode,"where"); - - fFileName = (new Path(fileName)).lastSegment(); - int id=-1; - try { - id=((XDebugTarget)getDebugTarget()).sendRequest("context_get","-d "+fLevel); - } catch (DebugException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - DebugResponse response=((XDebugTarget)getDebugTarget()).getResponse(id); - Node responseNode = response.getParentNode(); - NodeList property = responseNode.getChildNodes(); - fVariables = new IVariable[property.getLength()]; - for (int i = 0; i < property.getLength(); i++) { - Node propertyNode = property.item(i); - fVariables[i] = new XDebugVariable(this, propertyNode); - } - -// int numVars = strings.length - 3; -// fVariables = new IVariable[numVars]; -// for (int i = 0; i < numVars; i++) { -// fVariables[i] = new XDebugVariable(this, strings[i + 3]); -// } + public void incrementStepCounter() { + fStepCount++; } /* (non-Javadoc) @@ -101,143 +68,199 @@ public class XDebugStackFrame extends XDebugElement implements IStackFrame { public IThread getThread() { return fThread; } - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IStackFrame#getVariables() - */ + public IVariable[] getVariables() throws DebugException { + if (fVariables == null) { + Node dfl = ((XDebugTarget) getDebugTarget()).getLocalVariables(fLevel); + Node dfg = ((XDebugTarget) getDebugTarget()).getGlobalVariables(fLevel); + parseVariable(dfl, dfg); + } + return fVariables; } + + 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() */ public boolean hasVariables() throws DebugException { - return fVariables.length > 0; + /*return fVariables.length > 0;*/ + return true; } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IStackFrame#getLineNumber() */ public int getLineNumber() throws DebugException { - return fLineNo; + return fLineNumber; } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IStackFrame#getCharStart() */ public int getCharStart() throws DebugException { return -1; } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IStackFrame#getCharEnd() */ public int getCharEnd() throws DebugException { return -1; } - /* (non-Javadoc) + + /* (non-Javadoc)fName * @see org.eclipse.debug.core.model.IStackFrame#getName() */ public String getName() throws DebugException { - return fFileName+"::"+fWhere+ " : lineno "+ fLineNo; + //String a = fName.getFile(); + //return fName.lastSegment().toString()+"::"+fWhere+ " line: "+ fLineNumber; + return fName.toString()+"::"+fWhere+ " line: "+ fLineNumber; } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IStackFrame#getRegisterGroups() */ public IRegisterGroup[] getRegisterGroups() throws DebugException { return null; } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IStackFrame#hasRegisterGroups() */ public boolean hasRegisterGroups() throws DebugException { return false; } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IStep#canStepInto() */ public boolean canStepInto() { - return getThread().canStepInto(); + return fThread.canStepInto(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IStep#canStepOver() */ public boolean canStepOver() { - return getThread().canStepOver(); + return fThread.canStepOver(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IStep#canStepReturn() */ public boolean canStepReturn() { - return getThread().canStepReturn(); + return fThread.canStepReturn(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IStep#isStepping() */ public boolean isStepping() { - return getThread().isStepping(); + return fThread.isStepping(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IStep#stepInto() */ public void stepInto() throws DebugException { - getThread().stepInto(); + fThread.stepInto(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IStep#stepOver() */ public void stepOver() throws DebugException { - getThread().stepOver(); + fThread.stepOver(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IStep#stepReturn() */ public void stepReturn() throws DebugException { - getThread().stepReturn(); + fThread.stepReturn(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.ISuspendResume#canResume() */ public boolean canResume() { - return getThread().canResume(); + return fThread.canResume(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.ISuspendResume#canSuspend() */ public boolean canSuspend() { - return getThread().canSuspend(); + return fThread.canSuspend(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.ISuspendResume#isSuspended() */ public boolean isSuspended() { - return getThread().isSuspended(); + return fThread.isSuspended(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.ISuspendResume#resume() */ public void resume() throws DebugException { - getThread().resume(); + fThread.resume(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.ISuspendResume#suspend() */ public void suspend() throws DebugException { - getThread().suspend(); + fThread.suspend(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.ITerminate#canTerminate() */ public boolean canTerminate() { - return getThread().canTerminate(); + return fThread.canTerminate(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.ITerminate#isTerminated() */ public boolean isTerminated() { - return getThread().isTerminated(); + return fThread.isTerminated(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.ITerminate#terminate() */ public void terminate() throws DebugException { - getThread().terminate(); + fThread.terminate(); } /** @@ -245,11 +268,35 @@ public class XDebugStackFrame extends XDebugElement implements IStackFrame { * with. * * @return the name of the source file this stack frame is associated - * with + * with. If the file associated with this frame does not exists, it returns null. */ public String getSourceName() { - return fFileName; + if (fName == null) { + return null; + } + IPath a = new Path(fName.getFile()); + return a.lastSegment(); + } + + public boolean isSameStackFrame(Object obj) { + boolean isSameStackFrame = false; + + 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) { + }*/ + } + + return isSameStackFrame; } + /* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ @@ -259,25 +306,88 @@ public class XDebugStackFrame extends XDebugElement implements IStackFrame { 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;*/ + } catch (DebugException e) { + } + } + + return false; + } + + /* (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() + fId; + return getSourceName().hashCode() + fLevel; } /** - * Returns this stack frame's unique identifier within its thread * * @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; + } +} \ No newline at end of file