fix wrong DebugEvent.TERMINATE fire.
[phpeclipse.git] / net.sourceforge.phpeclipse.xdebug.core / src / net / sourceforge / phpeclipse / xdebug / php / model / XDebugTarget.java
index 43f7c9c..0c9f1d3 100644 (file)
@@ -70,7 +70,6 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, IDebugE
         * @param launch containing launch
         * @param process process of the interpreter
         * @param ideKey 
-        * @param pathMap Pathmap for the debug session
         * @exception CoreException if unable to connect to host
         */     
        public XDebugTarget(ILaunch launch, IProcess process, String ideKey) throws CoreException {
@@ -177,10 +176,8 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, IDebugE
                        fSuspended = false;
                        
                        XDebugCorePlugin.getBreakpointManager().removeBreakpointListener(this);
-                       fireTerminateEvent();
+                       fireEvent(new DebugEvent(this, DebugEvent.TERMINATE));
                        DebugPlugin.getDefault().removeDebugEventListener(this);
-                       /*if (fThread!=null)
-                               fThread.removeEventListeners();*/
                }
        }
 
@@ -211,8 +208,9 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, IDebugE
        public void resume() throws DebugException {
                if (fDebugConnection != null) {
                        fThread.setBreakpoints(null);
+                       resumed(DebugEvent.RESUME);
                        fDebugConnection.run();
-               }                       
+               }               
        }
        
        /**
@@ -273,8 +271,6 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, IDebugE
                                                        try {
                                                                if (breakpoint.isEnabled()) {
                                                                        if (marker != null) {
-                                                                               //XDebugResponse dr = fDebugConnection.breakpointSet(newPath.toString(), ((ILineBreakpoint)breakpoint).getLineNumber());
-
                                                                                int id = fDebugConnection.breakpointSet(newPath.toString(), ((ILineBreakpoint)breakpoint).getLineNumber(), marker.getAttribute(XDebugBreakpoint.HIT_COUNT,-1));
                                                                                XDebugResponse dr = getResponse(id);
                                                                                
@@ -363,7 +359,6 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, IDebugE
         */
        public boolean isDisconnected() {
                return (false);
-//             return (fDebugConnection==null);
        }
 
        /* (non-Javadoc)
@@ -394,14 +389,9 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, IDebugE
 
                Integer.parseInt(response.getValue());
                System.out.println("in Target.started()");
-               /*XDebugResponse response = fDebugConnection.featureGet("max_children");
-               String a1 = response.getValue();
-               System.out.println("max children:"+a1);
-               XDebugResponse response1 = fDebugConnection.featureGet("max_children");
-               String a2 = response1.getValue();
-               System.out.println("max depth:"+a2);*/
-               
-               
+
+               // Dirty hack
+               // Need to refactory plugin to get variables in lazy mode.
                int id1 = fDebugConnection.featureSet("max_depth", "1024" );
                XDebugResponse response1 = getResponse(id1);
                if (response1.getAttributeValue("success").equals("1") ) {
@@ -488,6 +478,16 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, IDebugE
                }
        }
        
+       public Node eval(String expression) {
+               int id = fDebugConnection.eval(expression);
+               XDebugResponse response = getResponse(id);
+
+               Node evalResponse = response.getParentNode();
+               Node evalProperty = evalResponse.getFirstChild();
+               
+               return evalProperty;
+       }
+       
        public void handleDebugEvents(DebugEvent[] events) {
                for (int i = 0; i < events.length; i++) {
                        DebugEvent event = events[i];
@@ -541,20 +541,15 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, IDebugE
                        return;
                }
 
+               resumed(DebugEvent.TERMINATE);
+
                stopListener();
                fDebugConnection.close();
 
-               fThread.removeEventListeners();
-               fThread = null;
-               fThreads = new IThread[0];
-               
-/*             stopListener();
-               fDebugConnection.close();*/
-
                fSuspended = false;
 
                // Dirty hack to check debugging mode (remote or local)
-               if (fProcess!=null) {
+               if (fProcess != null) {
                        try {
                                terminate();
                        } catch (DebugException e) {
@@ -563,17 +558,20 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, IDebugE
                } else {
                        fDebugConnection = null;
                        fireEvent(new DebugEvent(this, DebugEvent.CHANGE, DebugEvent.CONTENT));
-               }               
+               }
+               
+               fThread.removeEventListeners();
+               fThread = null;
+               fThreads = new IThread[0];
        }
        
-       public void handleProxyEvent(/*String ideKey,*/ XDebugConnection connection) {
+       public void handleProxyEvent(XDebugConnection connection) {
                setDebugConnection(connection);
-               System.out.println("* New Connection - XDebug.Target: " + fDebugConnection.getSessionID());
-               
-               fireEvent(new DebugEvent(this, DebugEvent.CHANGE, DebugEvent.CHANGE));
+               //System.out.println("* New Connection - XDebug.Target: " + fDebugConnection.getSessionID());
                
                fThread = new XDebugThread(this);
                fThreads = new IThread[] {fThread};
+               fireEvent(new DebugEvent(this, DebugEvent.CHANGE, DebugEvent.CHANGE));
                try {
                        started();
                } catch( DebugException e ){
@@ -601,7 +599,6 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, IDebugE
 
        }
        public Node getLocalVariables(int level) throws DebugException {
-//             XDebugResponse response = fDebugConnection.contextGet(level, 0);
                int id = fDebugConnection.contextGet(level, 0);
                XDebugResponse response = getResponse(id);
                
@@ -609,19 +606,21 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, IDebugE
        }
        
        public Node getGlobalVariables(int level) throws DebugException {
-               //XDebugResponse response = fDebugConnection.contextGet(level, 1);
-
                int id = fDebugConnection.contextGet(level, 1);
                XDebugResponse response = getResponse(id);
                
                return response.getParentNode();
        }
        
+       public void stop() {
+               fDebugConnection.stop();
+       }
+       
        protected IBreakpoint breakpointHit(Node node) {
                Node child = node.getFirstChild();
                if (child.getNodeName().equals("stack")) {
                        int lineNumber = Integer.parseInt(PHPDebugUtils.getAttributeValue(child, "lineno"));
-                       String filename=PHPDebugUtils.getAttributeValue(child, "filename");  
+                       String filename = PHPDebugUtils.getAttributeValue(child, "filename");  
                        IBreakpoint[] breakpoints = XDebugCorePlugin.getBreakpoints();
                        for (int i = 0; i < breakpoints.length; i++) {
                                IBreakpoint breakpoint = breakpoints[i];
@@ -643,7 +642,6 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, IDebugE
                                                                        int id = fDebugConnection.breakpointGet(marker.getAttribute(XDebugLineBreakpoint.BREAKPOINT_ID,-1));
                                                                        XDebugResponse dr = getResponse(id);
                                                                        
-                                                                       //String bpid = dr.getAttributeValue("command");                                                                        
                                                                        Node hitCo = dr.getParentNode().getFirstChild();
                                                                        int hitCount = 0;
                                                                        if (hitCo.hasAttributes()) {
@@ -654,7 +652,6 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, IDebugE
                                                                                }
                                                                        }
 
-                                                                       //String hitCount = hitCo.getAttributeValue("hit_count");                                                                       
                                                                        if(PHPDebugUtils.unescapeString(filename).endsWith(endfilename)
                                                                                        && (lineBreakpoint.getLineNumber() == lineNumber) ) {
                                                                                if (marker.getAttribute(XDebugLineBreakpoint.HIT_COUNT, 0) > 0) {
@@ -681,8 +678,8 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, IDebugE
                fResponseListener.schedule();
        }
        
-       public /*boolean*/ void stopListener() {
-               /*return*/ fResponseListener.cancel(); //done(null); //.cancel();
+       public void stopListener() {
+               fResponseListener.cancel();
        }
        public XDebugResponse getResponse(int id) {
                XDebugResponse response = fResponseListener.getResponse(id);