[jboss-svn-commits] JBL Code SVN: r13605 - in labs/jbossrules/branches/mvel-tooling-2007-06-30: drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jul 18 10:28:10 EDT 2007


Author: ahtik
Date: 2007-07-18 10:28:10 -0400 (Wed, 18 Jul 2007)
New Revision: 13605

Modified:
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELDebugHandler.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/VariableWrapper.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsDebugTarget.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsLineBreakpoint.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/MVELStackFrame.java
Log:
Fixing debugger stack frame calculations and implemented remote variable fetch for the debug view

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELDebugHandler.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELDebugHandler.java	2007-07-18 12:33:42 UTC (rev 13604)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELDebugHandler.java	2007-07-18 14:28:10 UTC (rev 13605)
@@ -17,9 +17,6 @@
 	 *
 	 */
 	public static void receiveBreakpoints() {
-		System.out.println("MVEL: MVELDebugHandler Receiving breakpoints..");
-		// Remote debugger is supposed to suspend thread and set
-		// MVELRuntime.registerBreakpoint( compexpr.getSourceName(), 2 );
 	}
 
 	/**
@@ -28,29 +25,26 @@
 	 * @param frame
 	 */
 	private final static void onBreak(Frame frame) {
-		System.out.println("MVEL: MVELDebugger break on frame:"
-				+ frame.getSourceName() + "at line:" + frame.getLineNumber());
 	}
 
     protected final static void registerBreakpoint(String sourceName, int lineNumber) {
-        System.out.println("MVEL: Registering Breakpoint FROM DEBUGGER for "+sourceName+":"+lineNumber+"; from Thread:"+Thread.currentThread());
         MVELRuntime.registerBreakpoint( sourceName, lineNumber );
     }
     
     protected final static void clearAllBreakpoints() {
-        System.out.println("MVEL: CLEARING ALL BREAKPOINTS (request from remote debugger)");
         MVELRuntime.clearAllBreakpoints();
     }
     
+    protected final static void removeBreakpoint(String sourceName, int lineNumber) {
+        MVELRuntime.removeBreakpoint( sourceName, lineNumber );
+    }
+    
 	private static class MVELDebugger implements Debugger {
 
         public MVELDebugger() {
-            System.out.println("MVEL: Initializing MVEL debugger for drools.");
         }
         
 		public int onBreak(Frame frame) {
-			System.out.println("MVEL: MVELDebugger BREAKPOINT RECEIVED FOR ---- "
-					+ frame.getSourceName() + ":" + frame.getLineNumber());
 			MVELDebugHandler.onBreak(frame);
 			// This call is supposed to be catched by the remote debugger
 			return 0;
@@ -62,7 +56,6 @@
      * Do nothing. ensures that class is loaded prior debug handler
      */
     public static void prepare() {
-        System.out.println("Preparing debug handler");
     }
         
 }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.java	2007-07-18 12:33:42 UTC (rev 13604)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.java	2007-07-18 14:28:10 UTC (rev 13605)
@@ -158,15 +158,9 @@
 				PackageCompilationData data = compiledPackage
                 					.getPackageCompilationData();
 
-                System.out.println("MVEL:DRLInfo.getConsequenceJavaLineNumber: Getting mappings for " + getClassName());
-
                 LineMappings mappings = data.getLineMappings(className);
                 consequenceJavaLineNumber = mappings.getOffset();
 
-                System.out.println("MVEL:DRLInfo.getConsequenceJavaLineNumber:"
-                	+ " Calculated consequenceJavaLineNumber: " + consequenceJavaLineNumber);
-                System.out.println("  MVEL: startLINE  " + mappings.getStartLine());
-                System.out.println("  MVEL: DRLLine "+getConsequenceDrlLineNumber());
 			}
 			return consequenceJavaLineNumber;
 		}

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/VariableWrapper.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/VariableWrapper.java	2007-07-18 12:33:42 UTC (rev 13604)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/VariableWrapper.java	2007-07-18 14:28:10 UTC (rev 13605)
@@ -19,7 +19,9 @@
 
     private String name;
     private IJavaValue value;
-
+    private boolean isLocal = false;
+    private boolean isPublic = false;
+    
     public VariableWrapper(String name, IJavaValue value) {
         this.name = name;
         this.value = value;
@@ -38,7 +40,7 @@
     }
 
     public boolean isLocal() {
-        return false;
+        return isLocal;
     }
 
     public IValue getValue() {
@@ -58,7 +60,7 @@
     }
 
     public boolean isPublic() {
-        return false;
+        return isPublic;
     }
 
     public boolean isPrivate() {
@@ -135,4 +137,12 @@
         return name.hashCode() + value.hashCode();
     }
 
+    public void setLocal(boolean val) {
+        isLocal=val;
+    }
+    
+    public void setPublic(boolean val) {
+        isPublic = val;
+    }
+    
 }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsDebugTarget.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsDebugTarget.java	2007-07-18 12:33:42 UTC (rev 13604)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsDebugTarget.java	2007-07-18 14:28:10 UTC (rev 13605)
@@ -1,6 +1,5 @@
 package org.drools.eclipse.debug.core;
 
-import java.awt.EventQueue;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -10,21 +9,14 @@
 import org.drools.rule.builder.dialect.mvel.MVELDialect;
 import org.eclipse.core.resources.IMarkerDelta;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.debug.core.DebugEvent;
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.debug.core.ILaunch;
 import org.eclipse.debug.core.model.IBreakpoint;
 import org.eclipse.debug.core.model.IProcess;
-import org.eclipse.debug.core.model.IStackFrame;
 import org.eclipse.debug.core.model.IThread;
-import org.eclipse.debug.internal.core.WatchExpression;
 import org.eclipse.jdi.TimeoutException;
-import org.eclipse.jdi.internal.ClassTypeImpl;
-import org.eclipse.jdi.internal.LocalVariableImpl;
-import org.eclipse.jdt.debug.core.IEvaluationRunnable;
 import org.eclipse.jdt.debug.core.IJavaBreakpoint;
-import org.eclipse.jdt.debug.core.IJavaThread;
 import org.eclipse.jdt.internal.debug.core.IJDIEventListener;
 import org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpoint;
 import org.eclipse.jdt.internal.debug.core.model.JDIDebugModelMessages;
@@ -32,19 +24,12 @@
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIThread;
 
-import com.sun.jdi.AbsentInformationException;
-import com.sun.jdi.ClassLoaderReference;
-import com.sun.jdi.ClassNotLoadedException;
 import com.sun.jdi.ClassType;
-import com.sun.jdi.IncompatibleThreadStateException;
 import com.sun.jdi.IntegerValue;
-import com.sun.jdi.InvalidTypeException;
-import com.sun.jdi.InvocationException;
 import com.sun.jdi.Method;
 import com.sun.jdi.ObjectCollectedException;
 import com.sun.jdi.ObjectReference;
 import com.sun.jdi.ReferenceType;
-import com.sun.jdi.StackFrame;
 import com.sun.jdi.StringReference;
 import com.sun.jdi.ThreadReference;
 import com.sun.jdi.VMDisconnectedException;
@@ -99,7 +84,7 @@
                         // Create class prepare request to add breakpoint after MVELDebugHanlder is loaded
                         ClassPrepareRequest req = getEventRequestManager().createClassPrepareRequest();
                         req.addClassFilter( "org.drools.base.mvel.MVELDebugHandler" );
-                        req.setSuspendPolicy( EventRequest.SUSPEND_ALL);
+                        req.setSuspendPolicy( EventRequest.SUSPEND_ALL );
 
                         addJDIEventListener( new IJDIEventListener() {
 
@@ -120,16 +105,7 @@
                         return;
                     }
 
-/*                    boolean suspend = false;
-                    if ( !isSuspended() && canSuspend() ) {
-                        suspend = true;
-                        suspend();
-                    }
-*/                    addRemoteBreakpoint( d );
-/*                    if ( suspend && canResume() ) {
-                        resume();
-                    }
-*/
+                    addRemoteBreakpoint( d );
                 } else {
                     // only add breakpoint if setting Java properties of DRL
                     // breakpoint does not generate an error
@@ -466,6 +442,18 @@
         }
         if ( supportsBreakpoint( breakpoint ) ) {
             try {
+
+                if ( breakpoint instanceof DroolsLineBreakpoint ) {
+                    ((DroolsLineBreakpoint) breakpoint).setJavaBreakpointProperties();
+
+                    final DroolsLineBreakpoint d = (DroolsLineBreakpoint) breakpoint;
+
+                    if ( d.getDialectName().equals( MVELDialect.ID ) ) {
+                        removeRemoteBreakpoint( (DroolsLineBreakpoint) breakpoint,
+                                                delta );
+                    }
+                }
+
                 ((JavaBreakpoint) breakpoint).removeFromTarget( this );
                 getBreakpoints().remove( breakpoint );
                 Iterator threads = getThreadIterator();
@@ -705,7 +693,6 @@
                                              return true;
                                          }
 
-
                                          try {
                                              IThread[] tharr = getThreads();
 
@@ -720,31 +707,16 @@
                                                  if ( th2real.suspendCount() == 1 && th2.getName().equals( "main" ) ) {
                                                      t = th2real;
                                                      t2 = (DroolsThread) th2;
-                                                     
-                                                     //fireSuspendEvent(DebugEvent.CLIENT_REQUEST);
-                                                     
-                                                     //th2.suspend();
-                                                     //th2.suspend();
-                                                    th2real.suspend();
-                                                    th2.setRunning(false);
-                                                    th2.fireSuspendEvent(DebugEvent.CLIENT_REQUEST);
 
-                                                     /*
-                                                     try {
-                                                        Thread.sleep( 3000 );
-                                                    } catch ( InterruptedException e ) {
-                                                        // TODO Auto-generated catch block
-                                                        e.printStackTrace();
-                                                    }*/
-                                                     
-                                                     //fireSuspendEvent(DebugEvent.BREAKPOINT);
-                                                     //((DroolsThread)thr).suspendedByVM();
-                                                     //suspendThreads();
+                                                     th2real.suspend();
+                                                     th2.setRunning( false );
+                                                     th2.fireSuspendEvent( DebugEvent.CLIENT_REQUEST );
+
                                                      return true;
                                                  }
                                              }
-                                         } catch ( DebugException t ) {
-                                             t.printStackTrace();
+                                         } catch ( Exception t ) {
+                                             logError( t );
                                          }
                                          return true;
 
@@ -783,12 +755,14 @@
                 DroolsLineBreakpoint l = (DroolsLineBreakpoint) element;
                 try {
 
+                    if ( l == null || source == null ) {
+                        return null;
+                    }
                     if ( l.getLineNumber() == line && source.equals( l.getRuleName() ) ) {
                         return l;
                     }
                 } catch ( CoreException e ) {
-                    // TODO Auto-generated catch block
-                    e.printStackTrace();
+                    logError( e );
                 }
             }
         }
@@ -796,9 +770,20 @@
     }
 
     private void addRemoteBreakpoint(DroolsLineBreakpoint d) {
+        
+        try {
+            if (!d.isEnabled()) {
+                return; // No need to install disabled breakpoints
+            }
+        } catch ( CoreException e2 ) {
+            logError( e2 );
+            return; // No need to install breakpoints that are this much broken
+        }
+        
         Iterator handleriter = getVM().classesByName( "org.drools.base.mvel.MVELDebugHandler" ).iterator();
         Object debugHandlerClass = handleriter.next();
 
+        
         int line;
         String sourceName;
 
@@ -806,44 +791,86 @@
             line = d.getLineNumber();
             sourceName = d.getTypeName();
         } catch ( CoreException e1 ) {
-            e1.printStackTrace();
+            logError( e1 );
             return;
         }
 
         ReferenceType refType = (ReferenceType) debugHandlerClass;
-
         Method m = (Method) refType.methodsByName( "registerBreakpoint" ).iterator().next();
-
         List args = new ArrayList();
-
         IntegerValue lineVal = getVM().mirrorOf( line );
         StringReference nameVal = getVM().mirrorOf( sourceName );
-
         JDIObjectValue val = (JDIObjectValue) newValue( sourceName );
         ObjectReference realVal = val.getUnderlyingObject();
-
         args.add( nameVal );
         args.add( lineVal );
 
-        //args.add(new IntegerValueImpl((VirtualMachineImpl) getVM(), new Integer(line)));
-        //args.add(((JDIPrimitiveValue)newValue(line)).getIntValue());
+        try {
+            ClassType tt = (ClassType) debugHandlerClass;
+            IThread[] tharr = getThreads();
+            ThreadReference t = null;
+            DroolsThread t2 = null;
 
+            for ( int i = 0; i < tharr.length; i++ ) {
+                IThread th2 = tharr[i];
+                ThreadReference th2real = ((DroolsThread) tharr[i]).getUnderlyingThread();
+                //MVEL It doesn't have to be always main. find a better way for detection. suspend count is most likely only at one thread so a bit more error-safe
+                if ( th2real.suspendCount() == 1 && th2.getName().equals( "main" ) ) {
+                    t = th2real;
+                    t2 = (DroolsThread) th2;
+                }
+            }
+
+            tt.invokeMethod( t,
+                             m,
+                             args,
+                             ObjectReference.INVOKE_SINGLE_THREADED );
+            //t2.computeNewStackFrames();
+
+            super.breakpointAdded( d );
+
+        } catch ( Exception e ) {
+            logError( e );
+        }
+
+    }
+
+    private void removeRemoteBreakpoint(DroolsLineBreakpoint d,
+                                        IMarkerDelta delta) {
+        Iterator handleriter = getVM().classesByName( "org.drools.base.mvel.MVELDebugHandler" ).iterator();
+        Object debugHandlerClass = handleriter.next();
+
+        int line;
+        String sourceName;
+
         try {
+            line = d.getLineNumber();
+            sourceName = d.getTypeName();
+        } catch ( CoreException e1 ) {
+            logError( e1 );
+            return;
+        }
 
-            //StackFrame frame = t.frame( 0 );                                                                
+        ReferenceType refType = (ReferenceType) debugHandlerClass;
+        Method m = (Method) refType.methodsByName( "removeBreakpoint" ).iterator().next();
+        List args = new ArrayList();
+        IntegerValue lineVal = getVM().mirrorOf( line );
+        StringReference nameVal = getVM().mirrorOf( sourceName );
+        JDIObjectValue val = (JDIObjectValue) newValue( sourceName );
+        ObjectReference realVal = val.getUnderlyingObject();
+        args.add( nameVal );
+        args.add( lineVal );
 
-            //ClassType tt = (ClassType) getVM().classesByName(refType.name()).iterator().next();
+        try {
             ClassType tt = (ClassType) debugHandlerClass;
-
             IThread[] tharr = getThreads();
-
             ThreadReference t = null;
             DroolsThread t2 = null;
 
             for ( int i = 0; i < tharr.length; i++ ) {
                 IThread th2 = tharr[i];
                 ThreadReference th2real = ((DroolsThread) tharr[i]).getUnderlyingThread();
-                //MVEL It doesn't have to be always main. find a better way for detection
+                //MVEL It doesn't have to be always main. find a better way for detection. suspend count is most likely only at one thread so a bit more error-safe
                 if ( th2real.suspendCount() == 1 && th2.getName().equals( "main" ) ) {
                     t = th2real;
                     t2 = (DroolsThread) th2;
@@ -854,29 +881,11 @@
                              m,
                              args,
                              ObjectReference.INVOKE_SINGLE_THREADED );
-            t2.computeNewStackFrames();
 
-
-            super.breakpointAdded( d );
-
-        } catch ( Throwable e ) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
+        } catch ( Exception e ) {
+            logError( e );
         }
 
     }
 
-    /*    public String getActiveBreakpoint() {
-     Iterator iterator = getBreakpoints().iterator();
-     while ( iterator.hasNext() ) {
-     IJavaBreakpoint element = (IJavaBreakpoint) iterator.next();
-     if (element instanceof DroolsLineBreakpoint) {
-     DroolsLineBreakpoint l = (DroolsLineBreakpoint) element;
-     l.getMarker().
-     }
-     }
-     return null;
-     }
-
-     */
 }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsLineBreakpoint.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsLineBreakpoint.java	2007-07-18 12:33:42 UTC (rev 13604)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsLineBreakpoint.java	2007-07-18 14:28:10 UTC (rev 13605)
@@ -12,6 +12,7 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.internal.debug.core.breakpoints.JavaLineBreakpoint;
 
 public class DroolsLineBreakpoint extends JavaLineBreakpoint {
@@ -109,7 +110,7 @@
                 if ( ruleInfo.getConsequenceDrlLineNumber() < lineNumber ) {
                     
                     int line = ruleInfo.getConsequenceJavaLineNumber() 
-                                        	+ (lineNumber - ruleInfo.getConsequenceDrlLineNumber() + 1);
+                                        	+ (lineNumber - ruleInfo.getConsequenceDrlLineNumber());
                     return line;
                 }
             }
@@ -134,4 +135,5 @@
         }
         return null;
     }
+
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/MVELStackFrame.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/MVELStackFrame.java	2007-07-18 12:33:42 UTC (rev 13604)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/MVELStackFrame.java	2007-07-18 14:28:10 UTC (rev 13605)
@@ -8,19 +8,19 @@
 
 import org.drools.eclipse.DroolsEclipsePlugin;
 import org.drools.eclipse.DRLInfo.RuleInfo;
+import org.drools.eclipse.debug.DebugUtil;
+import org.drools.eclipse.debug.VariableWrapper;
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.debug.core.model.IValue;
 import org.eclipse.debug.core.model.IVariable;
-import org.eclipse.debug.internal.core.WatchExpression;
-import org.eclipse.jdi.internal.MirrorImpl;
 import org.eclipse.jdi.internal.StackFrameImpl;
-import org.eclipse.jdi.internal.VirtualMachineImpl;
-import org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget;
+import org.eclipse.jdt.debug.core.IJavaValue;
 import org.eclipse.jdt.internal.debug.core.model.JDILocalVariable;
 import org.eclipse.jdt.internal.debug.core.model.JDINullValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 import com.sun.jdi.AbsentInformationException;
+import com.sun.jdi.ArrayReference;
 import com.sun.jdi.BooleanValue;
 import com.sun.jdi.ClassNotLoadedException;
 import com.sun.jdi.ClassType;
@@ -72,11 +72,6 @@
 
         List result = new ArrayList( 0 );
 
-        /*
-        WatchExpression ex = new WatchExpression("frame");
-        ex.setExpressionContext( this );
-        System.out.println("REALLY "+ex.getValue());
-        */
         Method method = getUnderlyingMethod(); // onBreak
         ReferenceType declaringType = method.declaringType(); // org.drools.base.mvel.MVELDebugHandler
 
@@ -89,129 +84,47 @@
                                                                       v2 );
             result.add( frameLocal );
 
+            IValue knownVars = DebugUtil.getValueByExpression( "return getFactory().getKnownVariables().toArray(new String[0]);", frameLocal.getValue());
             
-            {
-                IVariable[] vararr = (IVariable[]) result.toArray( new IVariable[result.size()] );
-                if (vararr!=null) {
-                    return vararr;
-                }
-            }            
-            
-            Value factoryVar = fetchField( frameLocal, "factory" );
-            Value localVars = fetchField( factoryVar,
-                                          "localVariables" );
+            IValue factory = DebugUtil.getValueByExpression( "return getFactory();", frameLocal.getValue());
 
-            ObjectReference mapObj = ((JDIObjectValue) frameLocal.getValue()).getUnderlyingObject();
-            ReferenceType t = mapObj.referenceType();
+            JDIObjectValue vvv = (JDIObjectValue) knownVars;
 
-            Value entrySet = runMethod( localVars,
-                                        "entrySet" );
+            if (vvv!=null) {
+            ArrayReference arr = (ArrayReference) vvv.getUnderlyingObject();
+            Iterator varIter = arr.getValues().iterator();
             
-            /*            Value iter = runMethod( entrySet,
-                                    "iterator" );
+            while ( varIter.hasNext() ) {
+                final String varName = ((StringReference) varIter.next()).value();
+                IJavaValue val = (IJavaValue) DebugUtil.getValueByExpression( "return getVariableResolver(\""+varName+"\").getValue();", factory);
+                final ObjectReference valRef = ((JDIObjectValue)val).getUnderlyingObject();
+                //MVELThisVariable t2 = new MVELThisVariable((JDIDebugTarget) getDebugTarget(),valRef,varName);
+                
+                VariableWrapper local = new VariableWrapper(varName, val); 
+                
+                IValue isLocal = DebugUtil.getValueByExpression( "return getParserContext().getVariables();", frameLocal.getValue());
+                local.setPublic( true );
+                //local.setLocal( true );
+                result.add(local);
+            }
             
-            while (internalHasNext(iter)) {
-                Value next = runMethod( iter,
-                "next" );
-
-                Value entryKey = runMethod( next,
-                                            "getKey" );
-                Value entryValue = runMethod( next,
-                                              "getValue" );
-                String entryK = ((StringReference) entryKey).value();
-
-                MVELThisVariable th = new MVELThisVariable( (JDIDebugTarget) getDebugTarget(),
-                                                            (ObjectReference) entryValue,
-                                                            entryK );
-                result.add( th );
+            IValue localVars = DebugUtil.getValueByExpression( "return getParserContext().getVariables();", frameLocal.getValue());
+            IValue globalVars = DebugUtil.getValueByExpression( "return getParserContext().getInputs();", frameLocal.getValue());
+            
+            result.add(new VariableWrapper("LocalVariables", (IJavaValue) localVars));
+            result.add(new VariableWrapper("GlobalVariables", (IJavaValue) globalVars));
+            
+            
+            
+            //now iterate over localVars and add all that have getValue() non-null
+            
+            //MVELThisVariable t2 = new MVELThisVariable((JDIDebugTarget) getDebugTarget(),((JDIObjectValue)variables).getUnderlyingObject(),"parserContext variables");
+            //result.add(t2);
             }
             
-*/            // v2.localVariables
+            IVariable[] vararr = (IVariable[]) result.toArray( new IVariable[result.size()] );
+            return vararr;
 
-            //ObjectReference iteratorObj = ((JDIObjectValue)mapentries).getUnderlyingObject();
-
-            /*         Field varsField = declaringType.fieldByName("frameLocalVars");
-
-             System.out.println("field is "+varsField);
-
-             Value value = declaringType.getValue(varsField);
-
-             System.out.println("value is "+value);
-
-             ObjectReferenceImpl valueImpl = (ObjectReferenceImpl) value;
-
-             JDIFieldVariable var = new JDIFieldVariable((JDIDebugTarget)getDebugTarget(), varsField, valueImpl);
-
-             System.out.println("Got Value for Stack Frame!!: "+value+" with impl class "+value.getClass());
-
-             result.add(var);
-             */
-
-            //TODO HERE WE START FIXING!!!
-            /*        JDIFieldVariable vars = (JDIFieldVariable) getThis().getField( "frameLocalVars",
-             false );
-
-             JDIObjectValue val = (JDIObjectValue) vars.getValue();
-
-             try {
-
-             System.out.println( "Trying to get the map values" );
-
-             //            System.out.println("Declating type222 is "+vars.getDeclaringType());
-             //System.out.println("VAL type is "+vars.getReferenceType();
-
-             ObjectReference mapObj = ((JDIObjectValue) vars.getValue()).getUnderlyingObject();
-             ReferenceType t = mapObj.referenceType();
-
-             List allmethods = t.allMethods();
-
-             Method m2 = (Method) t.methodsByName( "entrySet" ).iterator().next();
-
-             System.out.println( "Got method " + m2 );
-
-             ThreadReference thread = ((DroolsThread) getThread()).getUnderlyingThread();
-             System.out.println( ". thread is . " + thread.getClass() + "; " + thread );
-             Value mapentries = mapObj.invokeMethod( thread,
-             m2,
-             new ArrayList(),
-             0 );
-
-             //ObjectReference iteratorObj = ((JDIObjectValue)mapentries).getUnderlyingObject();
-             ObjectReferenceImpl entries = (ObjectReferenceImpl) mapentries;
-
-             Method m3 = (Method) entries.referenceType().methodsByName( "iterator" ).iterator().next();
-             Value iter = entries.invokeMethod( thread,
-             m3,
-             new ArrayList(),
-             0 );
-
-             Method m2 = (Method) t.methodsByName( "i" ).iterator().next();
-             Value mapiter = ((JDIObjectValue)mapentries).getUnderlyingObject().invokeMethod( ((DroolsThread)getThread()).getUnderlyingThread(), m3, new ArrayList(), 0);
-             
-
-             ObjectReferenceImpl valueImpl = (ObjectReferenceImpl) iter;
-
-             *///boolean hasNext = hasNext(iter);
-            //ObjectReferenceImpl next = getNext(iter);
-            /*            Field varsField;
-
-             IVariable var1 = new MVELThisVariable( getJavaDebugTarget(),
-             valueImpl,
-             "label1" );
-             IVariable var2 = new MVELThisVariable( getJavaDebugTarget(),
-             valueImpl,
-             "label2" );
-             */
-            //JDIFieldVariable var = new JDIFieldVariable((JDIDebugTarget)getDebugTarget(), varsField, valueImpl);
-            //JDILocalVariable var2 = new JDILocalVariable()
-            /*            result.add( var1 );
-             result.add( var2 );
-             */
-            //            WatchExpression ex = new WatchExpression("frameLocalVars.entrySet().iterator()");
-            //            WatchExpression ex = new WatchExpression( "ttw12e4" );
-            //            ex.setExpressionContext( this );
-            //            System.out.println( "got expression value " + ex.getValue() );
-            //System.out.println("Got value "+mapentries);
         } catch ( Throwable t ) {
             t.printStackTrace();
         }
@@ -252,10 +165,6 @@
                                               IncompatibleThreadStateException,
                                               InvocationException, DebugException {
         
-        recreateFrames();
-        
-        
-        
         ObjectReference refObj = (ObjectReference) val;
         ReferenceType t = refObj.referenceType();
         Method m2 = (Method) t.methodsByName( methodName ).iterator().next();
@@ -265,7 +174,6 @@
                                             m2,
                                             new ArrayList(),
                                             0 );
-        recreateFrames();
         
         return res;
     }
@@ -280,11 +188,9 @@
 
     private Value fetchField(ObjectReference ref,
                              String fieldName) throws ClassNotLoadedException, DebugException {
-        recreateFrames();
         ClassType varType = (ClassType) ref.type();
         Field field = varType.fieldByName( fieldName );
         Value res = ref.getValue( field );
-        recreateFrames();
         return res;
     }
 
@@ -389,35 +295,10 @@
 
         LocalVariable var = (LocalVariable) method.variables().get( 0 );//frame
         
-        recreateFrames();
-        
         JDILocalVariable jdivar = new JDILocalVariable(this, (LocalVariable) var);
 
         ClassType frameType = (ClassType) var.type();
 
-        //Method m1 = (Method) frameType.methodsByName( methodName ).iterator().next();        
-
-        //ThreadReference thread = ((DroolsThread) getThread()).getUnderlyingThread();
-
-        //ObjectReference o = ((JDIObjectValue) jdivar.getValue()).getUnderlyingObject();
-
-        //ThreadReference thread = getUnderlyingStackFrame().thread();
-
-        //getUnderlyingStackFrame().getValue( var );
-
-        //Field varsField = frameType.fieldByName(methodName);
-        //Value value = frameType.getValue(varsField);
-        //System.out.println("Got VALUE "+value);
-
-        //StackFrame frame = getUnderlyingStackFrame();
-        
-        //StackFrame fr = getUnderlyingStackFrame();
-        
-        //MirrorImpl m = (MirrorImpl) fr;
-        //m.verboseWriter()
-        
-        //ObjectReference o = (ObjectReference) fr.getValue( var );
-        recreateFrames();
         IValue value = jdivar.getValue();
         if (value instanceof JDINullValue) {
             return null;
@@ -440,10 +321,6 @@
     public String getSourcePath() throws DebugException {
         return "";
     }
-    
-    private void recreateFrames() throws DebugException {
-        //DroolsThread thr = (DroolsThread) getThread();
-        //thr.computeNewStackFrames();
-    }
 
+    
 }




More information about the jboss-svn-commits mailing list