1) Made getVariables and evalBlock methods in PHPDBGInterface synchronized (At least...
[phpeclipse.git] / net.sourceforge.phpeclipse.debug.core / src / net / sourceforge / phpdt / internal / debug / core / model / PHPStackFrame.java
index 1c5dcdd..dcd372e 100644 (file)
@@ -41,7 +41,10 @@ public class PHPStackFrame extends PHPDebugElement implements IStackFrame, Compa
        private PHPVariable[]   variables;          // The array of variables TODO: better introduce a vector?
        private Vector          varList  = new Vector ();
        private String                  description;        // The source file name with the full path on target/remote system
-       private boolean         fUpToDate;          //
+       private boolean         fUpToDate;          // Indicates whether the variable list within this stackframe is
+                                                                                               // up-to-date
+       private boolean         fAvailable;         // Needed when updating the stackframe list, shows whether the stackframe
+                                                                                               // is within the list which was received from dbg
 
        /**
         *
@@ -111,6 +114,32 @@ public class PHPStackFrame extends PHPDebugElement implements IStackFrame, Compa
 
        /**
         *
+        */
+       public void setAvailable (boolean available) {
+               fAvailable = available;
+       }
+
+       /**
+        *
+        */
+       public boolean isAvailable () {
+               return fAvailable;
+       }
+
+
+       /**
+        * @see IAdaptable#getAdapter(Class)
+        */
+       public Object getAdapter(Class adapter) {
+               if (adapter == PHPStackFrame.class) {
+                       return this;
+               }
+
+               return super.getAdapter(adapter);
+       }
+
+       /**
+        *
         *
         */
        private void resetHasChangedInfo (Vector varList) {
@@ -279,11 +308,6 @@ public class PHPStackFrame extends PHPDebugElement implements IStackFrame, Compa
         * @return The array of PHPVariables for this stackframe.
         */
        public IVariable[] getVariables() throws DebugException {
-               PHPVariable[] variablesNew;                                 // The intermediate storage of the variable array we get from DBG proxy
-
-               //variablesNew = this.getPHPDBGProxy ().readVariables (this); // Get the variable array from DBG proxy
-               //variables    = variablesNew;                                // Store the array the stackframes member variable
-
                if (!isUpToDate ()) {
                        resetHasChangedInfo (varList);
                        updateVariableList (varList, this.getPHPDBGProxy ().readVariables (this));
@@ -352,7 +376,8 @@ public class PHPStackFrame extends PHPDebugElement implements IStackFrame, Compa
         *
         */
        public boolean hasVariables () throws DebugException {
-               return (varList.size () > 0);
+               return true;
+               // return (varList.size () > 0);
        }
 
        public int getLineNumber() {
@@ -448,9 +473,16 @@ public class PHPStackFrame extends PHPDebugElement implements IStackFrame, Compa
 
                thread.prepareForResume (DebugEvent.STEP_INTO);             // Don't know why, but this is necessary
                this.getPHPDBGProxy ().readStepIntoEnd (PHPStackFrame.this);
-
-               ev = new DebugEvent (this.getThread (), DebugEvent.RESUME, DebugEvent.STEP_INTO);
-               DebugPlugin.getDefault().fireDebugEventSet (new DebugEvent[] { ev });
+               
+        // Commented out sending the RESUME event because it was already sent by prepareForResume.
+        // The second RESUME event leads only to a little flickering within the variables view.
+        // It is also not clear why this event was necessary in eclipse < 3.2
+        // Also sending a SUSPEND event here leads to a total rebuild of the variables view.
+        // (eclipse 3.2 has a build in timeout of 500 ms which leads to a auto suspend, with
+        // no flickering... but why???)
+        // 
+               //ev = new DebugEvent (this.getThread (), DebugEvent.RESUME, DebugEvent.STEP_INTO);
+               //DebugPlugin.getDefault().fireDebugEventSet (new DebugEvent[] { ev });
        }
 
        /**
@@ -464,8 +496,10 @@ public class PHPStackFrame extends PHPDebugElement implements IStackFrame, Compa
                thread.prepareForResume (DebugEvent.STEP_OVER);
                this.getPHPDBGProxy ().readStepOverEnd (PHPStackFrame.this) ;
 
-               ev = new DebugEvent (this.getThread (), DebugEvent.RESUME, DebugEvent.STEP_OVER);
-               DebugPlugin.getDefault ().fireDebugEventSet (new DebugEvent[] { ev });
+        // See comment within the previous stepInto method.
+        // 
+               //ev = new DebugEvent (this.getThread (), DebugEvent.RESUME, DebugEvent.STEP_OVER);
+               //DebugPlugin.getDefault ().fireDebugEventSet (new DebugEvent[] { ev });
        }
 
        /**