[jboss-svn-commits] JBL Code SVN: r13406 - in labs/jbossrules/branches/mvel-tooling-2007-06-30: drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jul 12 12:50:19 EDT 2007


Author: ahtik
Date: 2007-07-12 12:50:19 -0400 (Thu, 12 Jul 2007)
New Revision: 13406

Removed:
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDebugger.java
Modified:
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELConsequence.java
   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/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/DroolsThread.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:
Progress with the MVEL debugger. current commit includes a bug that is causing timeout exception for debugger.

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java	2007-07-12 16:50:11 UTC (rev 13405)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java	2007-07-12 16:50:19 UTC (rev 13406)
@@ -93,7 +93,6 @@
     private List                           generatedClassList;
     private MemoryResourceReader           src;
     private PackageStore                   packageStoreWrapper;
-    private Map                            lineMappings;
     private Map                            errorHandlers;
     private List                           results;
     // the class name for the rule
@@ -173,6 +172,9 @@
     public void init(final Package pkg) {
 
         this.pkg = pkg;
+        
+        //MVEL Compiler change
+        //TODO Consider lazy init for these as they might have been initialized from the constructor and maybe used meanwhile        
         this.errorHandlers = new HashMap();
         this.results = new ArrayList();
 
@@ -182,8 +184,9 @@
 
         this.packageStoreWrapper = new PackageStore( pkg.getPackageCompilationData(),
                                                      this.results );
-
-        this.lineMappings = pkg.getPackageCompilationData().getLineMappings();
+//MVEL: Compiler change
+//        this.lineMappings = new HashMap();
+//        pkg.getPackageCompilationData().setLineMappings( this.lineMappings );
     }
 
     public void init(final RuleDescr ruleDescr) {
@@ -420,8 +423,10 @@
         final LineMappings mapping = new LineMappings( name );
         mapping.setStartLine( ruleDescr.getConsequenceLine() );
         mapping.setOffset( ruleDescr.getConsequenceOffset() );
-        this.lineMappings.put( name,
-                               mapping );
+        
+        context.getPkg().getPackageCompilationData().getLineMappings().put( name,
+                                                                           mapping );
+        
     }
 
     public void addFunction(final FunctionDescr functionDescr,
@@ -433,7 +438,7 @@
         final String functionSrc = getFunctionBuilder().build( this.pkg,
                                                                functionDescr,
                                                                typeResolver,
-                                                               this.lineMappings,
+                                                               pkg.getPackageCompilationData().getLineMappings(),
                                                                this.results );
 
         addClassCompileTask( functionClassName,
@@ -446,7 +451,7 @@
         final LineMappings mapping = new LineMappings( functionClassName );
         mapping.setStartLine( functionDescr.getLine() );
         mapping.setOffset( functionDescr.getOffset() );
-        this.lineMappings.put( functionClassName,
+        pkg.getPackageCompilationData().getLineMappings().put( functionClassName,
                                mapping );
     }
 

Deleted: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDebugger.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDebugger.java	2007-07-12 16:50:11 UTC (rev 13405)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDebugger.java	2007-07-12 16:50:19 UTC (rev 13406)
@@ -1,19 +0,0 @@
-package org.drools.rule.builder.dialect.mvel;
-
-import java.util.HashMap;
-import java.util.Map;
-
-//MVEL: Compiler change: note this cannot work and is never used
-public class MVELDebugger {
-
-    public Map frameLocalVars = new HashMap();
-
-    public MVELDebugger() {
-        frameLocalVars.put( "this", "that" );
-    }
-
-    public void fireBreakpoint() {
-        System.out.println("MVEL: breakpoint catched by the MVELDebugger");
-    }
-
-}

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java	2007-07-12 16:50:11 UTC (rev 13405)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java	2007-07-12 16:50:19 UTC (rev 13406)
@@ -81,7 +81,6 @@
     private final MVELConsequenceBuilder            consequence             = new MVELConsequenceBuilder();
     //private final JavaRuleClassBuilder            rule        = new JavaRuleClassBuilder();
     private final MVELFromBuilder                   from                    = new MVELFromBuilder();
-    private Map                                     lineMappings;
 
     private final Map                               interceptors;
 
@@ -180,9 +179,6 @@
         this.results = new ArrayList();
         //MVEL: Compiler change
         this.src = new MemoryResourceReader();
-        if ( pkg != null ) {
-            this.lineMappings = pkg.getPackageCompilationData().getLineMappings();
-        }
     }
 
     public void init(RuleDescr ruleDescr) {
@@ -210,7 +206,8 @@
         mapping.setStartLine( ruleDescr.getConsequenceLine() );
         mapping.setOffset( ruleDescr.getConsequenceOffset() );
         System.out.println("MVEL: Adding mvel mappings for:" + name + " at line: " + mapping.getStartLine());
-        this.lineMappings.put( name, mapping );
+                
+        context.getPkg().getPackageCompilationData().getLineMappings().put( name, mapping );
 
     }
 
@@ -339,11 +336,12 @@
 
         final ParserContext parserContext = new ParserContext( imports,
                                                                null,
-                                                               null );
+                                                               context.getPkg().getName()+"."+context.getRuleDescr().getClassName() );
 
         //this.configuration.get
 
         parserContext.setStrictTypeEnforcement( strictMode );
+                       
         if ( interceptors != null ) {
             parserContext.setInterceptors( interceptors );
         }
@@ -385,6 +383,10 @@
                                 KnowledgeHelper.class );
 
         ExpressionCompiler compiler = new ExpressionCompiler( text );
+        
+        //MVEL Debugging support
+        compiler.setDebugSymbols( true );
+        
         Serializable expr = compiler.compile( parserContext );
         return expr;
     }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELConsequence.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELConsequence.java	2007-07-12 16:50:11 UTC (rev 13405)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELConsequence.java	2007-07-12 16:50:19 UTC (rev 13406)
@@ -36,12 +36,13 @@
         CompiledExpression compexpr = (CompiledExpression)this.expr;
 
         //MVEL:for testing, we'll have at least one breakpoint
-        MVELRuntime.registerBreakpoint( compexpr.getSourceName(), 1 );
+        //MVELRuntime.registerBreakpoint( compexpr.getSourceName(), 1 );
 
         //MVEL: Receive breakpoints from debugger
         MVELDebugHandler.receiveBreakpoints();
-
-		//MVEL: we are always debugging for now, but we should either debug or run
+        
+		//MVEL: weare always debugging for now, but we should either debug or run
+        System.out.println("MVEL: RUNNING WITH DEBUGGING");
         MVEL.executeDebugger( compexpr, null, this.factory);
 
         /*MVEL.executeExpression( this.expr,

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-12 16:50:11 UTC (rev 13405)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELDebugHandler.java	2007-07-12 16:50:19 UTC (rev 13406)
@@ -28,14 +28,28 @@
 	 * @param frame
 	 */
 	private final static void onBreak(Frame frame) {
-		System.out.println("MVEL: MVELDebugger break on frame:"
+		System.out.println("MVEL: HEEEE!!! 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);
+        MVELRuntime.registerBreakpoint( sourceName, lineNumber );
+    }
+    
+    protected final static void clearAllBreakpoints() {
+        System.out.println("MVEL: CLEARING ALL BREAKPOINTS (request from remote debugger)");
+        MVELRuntime.clearAllBreakpoints();
+    }
+    
 	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:"
+			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
@@ -43,4 +57,5 @@
 		}
 
 	}
+        
 }

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-12 16:50:11 UTC (rev 13405)
+++ 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-12 16:50:19 UTC (rev 13406)
@@ -9,6 +9,7 @@
 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;
@@ -16,13 +17,35 @@
 import org.eclipse.debug.core.model.IProcess;
 import org.eclipse.debug.core.model.IThread;
 import org.eclipse.jdi.TimeoutException;
+import org.eclipse.jdi.internal.IntegerValueImpl;
+import org.eclipse.jdi.internal.ObjectReferenceImpl;
+import org.eclipse.jdi.internal.StringReferenceImpl;
+import org.eclipse.jdi.internal.VirtualMachineImpl;
+import org.eclipse.jdi.internal.jdwp.JdwpStringID;
+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;
 import org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget;
+import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
+import org.eclipse.jdt.internal.debug.core.model.JDIPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIThread;
 
+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.Location;
+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;
 import com.sun.jdi.VirtualMachine;
@@ -43,13 +66,12 @@
     private ThreadStartHandler fThreadStartHandler = null;
     private boolean fSuspended = true;
 
-    private List mvelBreakpoints = new ArrayList();
-
     public DroolsDebugTarget(ILaunch launch, VirtualMachine jvm, String name, boolean supportTerminate, boolean supportDisconnect, IProcess process, boolean resume) {
         super(launch, jvm, name, supportTerminate, supportDisconnect, process, resume);
     }
 
-    public void breakpointAdded(IBreakpoint breakpoint) {
+    public void breakpointAdded(IBreakpoint breakpoint) {        
+        
 		System.out.println("MVEL: entering DroolsDebugTarget.breakpointAdded");
         try {
             if (breakpoint instanceof DroolsLineBreakpoint) {
@@ -64,10 +86,11 @@
                           + " getDRLLineNumber:" + d.getDRLLineNumber());
                     //getBreakpoints().add( breakpoint );
                     //super.breakpointAdded(breakpoint);
-                    mvelBreakpoints.add(breakpoint);
 
                     System.out.println("MVEL: BREAKPOINT LINE NUMBER: "+d.getLineNumber());
-
+                    
+                    super.breakpointAdded(breakpoint);
+                    
                 } else {
                     System.out.println("MVEL: Adding Java breakpoint");
                     // only add breakpoint if setting Java properties of DRL
@@ -597,7 +620,7 @@
 */
                     ClassPrepareRequest req= manager.createClassPrepareRequest();
                     req.addClassFilter("org.drools.base.mvel.MVELDebugHandler");
-                    req.setSuspendPolicy(EventRequest.SUSPEND_ALL);
+                    req.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD);
                     req.enable();
                     addJDIEventListener(MVELTraceHandler.this, req);
 
@@ -630,7 +653,7 @@
              Field field;
              EventRequest req= manager.createModificationWatchpointRequest(field);
              */
-            req.setSuspendPolicy( EventRequest.SUSPEND_ALL );
+            req.setSuspendPolicy( EventRequest.SUSPEND_EVENT_THREAD );
             req.enable();
 
             addJDIEventListener( new IJDIEventListener() {
@@ -643,13 +666,92 @@
                                          System.out.println( "MVEL: Got MVELConsequence call for " + name2 );
 
                                          if ( !name2.equals("onBreak" ) && !name2.equals( "receiveBreakpoints" )) {
-                                             System.out.println( "MVEL: Wrong method, resuming" );
+                                             System.out.println( "MVEL: Wrong method, resuming. method: "+name2 );
                                              //event.virtualMachine().resume();
                                              return true;
                                          }
 
-                                         System.out.println("MVEL: Suspending threads");
+                                         if (name2.equals( "receiveBreakpoints" )) {
 
+                                             Iterator iterator = getBreakpoints().iterator();
+                                             while ( iterator.hasNext() ) {
+                                                IJavaBreakpoint element = (IJavaBreakpoint) iterator.next();
+                                                if (element instanceof DroolsLineBreakpoint) {
+                                                    DroolsLineBreakpoint l = (DroolsLineBreakpoint) element;
+                                                    if (MVELDialect.ID.equals(l.getDialectName())) {
+                                                        
+                                                        try {
+                                                            
+                                                            int line = l.getLineNumber();
+                                                            String sourceName = l.getTypeName();
+                                                        
+                                                            ReferenceType refType = ((MethodEntryEvent) event).method().declaringType();
+                                                            
+                                                            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 {
+                                                                ThreadReference t = ((MethodEntryEvent) event).thread();
+                                                                
+                                                                System.out.println("MVEL: SUSPEND COUNT="+t.suspendCount());
+                                                                
+                                                                StackFrame frame = t.frame( 0 );                                                                
+                                                                
+                                                                ClassType tt = (ClassType) getVM().classesByName(refType.name()).iterator().next();
+                                                                
+
+                                                                DroolsThread t2 = (DroolsThread) findThread( t );
+                                                                tt.invokeMethod( t2.getUnderlyingThread(), m, args, ObjectReference.INVOKE_SINGLE_THREADED);
+                                                                
+                                                                //refType.classObject().invokeMethod( t, m, args, 0);
+                                                                
+                                                                //getVM().classesByName(refType.g);
+                                                                //refType
+                                                                                                                                
+                                                                
+                                                            } catch ( InvalidTypeException e ) {
+                                                                // TODO Auto-generated catch block
+                                                                e.printStackTrace();
+                                                            } catch ( ClassNotLoadedException e ) {
+                                                                // TODO Auto-generated catch block
+                                                                e.printStackTrace();
+                                                            } catch ( IncompatibleThreadStateException e ) {
+                                                                // TODO Auto-generated catch block
+                                                                e.printStackTrace();
+                                                            } catch ( InvocationException e ) {
+                                                                // TODO Auto-generated catch block
+                                                                e.printStackTrace();
+                                                            }
+                                                            
+                                                            //MVELRuntime.registerBreakpoint( compexpr.getSourceName(), 1 );              
+                                                            
+                                                        } catch ( CoreException e ) {
+                                                            // TODO Auto-generated catch block
+                                                            e.printStackTrace();
+                                                        }
+                                                    }
+                                                }
+                                                
+                                            }
+                                             return true;
+                                             
+                                         }
+                                         
+                                         System.out.println("MVEL: ONBREAK Called!!! Suspending threads");
+
                                          JDIThread thr = findThread( entryEvent.thread() );
                                          try {
                                             thr.suspend();
@@ -658,7 +760,7 @@
                                             e.printStackTrace();
                                         }
 
-                                         System.out.println("Thread is "+entryEvent.thread().getClass());
+                                         System.out.println("MVEL: Thread is "+entryEvent.thread().getClass());
                                          if (thr instanceof DroolsThread) {
                                              System.out.println("MVEL: Drools Thread!!");
                                              ((DroolsThread)thr).suspendedByVM();
@@ -731,7 +833,15 @@
     }
 
     public Object getFirstDroolsBreakpoint() {
-        return mvelBreakpoints.iterator().next();
+        Iterator iterator = getBreakpoints().iterator();
+        while ( iterator.hasNext() ) {
+           IJavaBreakpoint element = (IJavaBreakpoint) iterator.next();
+           if (element instanceof DroolsLineBreakpoint) {
+               DroolsLineBreakpoint l = (DroolsLineBreakpoint) element;
+               return l;
+           }
+        }
+        return null;
     }
 
 }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsThread.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsThread.java	2007-07-12 16:50:11 UTC (rev 13405)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsThread.java	2007-07-12 16:50:19 UTC (rev 13406)
@@ -61,8 +61,8 @@
                     //MVEL: this cannot work: org.drools.rule.builder.dialect.mvel.MVELDebugger is never instantiated
                     Location loc = currentFrame.location();
                     System.out.println("MVEL: In DroolsThread.computeStackFrames with declaringType:" +  loc.declaringType().name());
-                    if ( loc.declaringType().name().equals( "org.drools.rule.builder.dialect.mvel.MVELDebugger" )
-                    		&& loc.method().name().equals( "fireBreakpoint" ) ) {
+                    if ( loc.declaringType().name().equals( "org.drools.base.mvel.MVELDebugHandler" )
+                    		&& loc.method().name().equals( "onBreak" ) ) {
 	                    System.out.println("    MVEL: creating MVELStackFrame");
                         fStackFrames.add( 0, new MVELStackFrame( this, currentFrame, depth ) );
                     } else {

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-12 16:50:11 UTC (rev 13405)
+++ 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-12 16:50:19 UTC (rev 13406)
@@ -1,17 +1,21 @@
 package org.drools.eclipse.debug.core;
 
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
 import org.drools.eclipse.DroolsEclipsePlugin;
 import org.drools.eclipse.DRLInfo.RuleInfo;
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.debug.core.model.IVariable;
+import org.eclipse.jdi.internal.LocalVariableImpl;
 import org.eclipse.jdi.internal.ObjectReferenceImpl;
 import org.eclipse.jdt.internal.debug.core.model.JDIFieldVariable;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
+import com.sun.jdi.AbsentInformationException;
 import com.sun.jdi.Field;
+import com.sun.jdi.LocalVariable;
 import com.sun.jdi.Method;
 import com.sun.jdi.ObjectReference;
 import com.sun.jdi.ReferenceType;
@@ -28,7 +32,7 @@
                frame,
                depth );
         //MVEL:Logging
-        System.out.println( "MVELStackFrame created for depth " + depth + " thread=" + thread );
+        System.out.println( "MVEL: MVELStackFrame created for depth " + depth + " thread=" + thread );
 
     }
 
@@ -45,17 +49,23 @@
 
         List result = new ArrayList( 0 );
 
-        Method method = getUnderlyingMethod();
-        //System.out.println("Underlying method is "+method.name());
-        ReferenceType type = method.declaringType();
-        //System.out.println("Declaring type is "+type.name());
+        Method method = getUnderlyingMethod(); // onBreak
+        ReferenceType declaringType = method.declaringType(); // org.drools.base.mvel.MVELDebugHandler
 
-        ;
+         //ReferenceType declaringType = .location().declaringType();
 
-        /*        ReferenceType declaringType = .location().declaringType();
+        try {
+            Object var = method.variables().get( 0 );
+            LocalVariable v2 = (LocalVariable) var;            
+            result.add( new DroolsLocalVariable(this,v2));
+            
+        } catch ( AbsentInformationException e ) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        
+/*         Field varsField = declaringType.fieldByName("frameLocalVars");
 
-         Field varsField = declaringType.fieldByName("frameLocalVars");
-
          System.out.println("field is "+varsField);
 
          Value value = declaringType.getValue(varsField);
@@ -71,7 +81,8 @@
          result.add(var);
          */
 
-        JDIFieldVariable vars = (JDIFieldVariable) getThis().getField( "frameLocalVars",
+        //TODO HERE WE START FIXING!!!
+/*        JDIFieldVariable vars = (JDIFieldVariable) getThis().getField( "frameLocalVars",
                                                                        false );
 
         JDIObjectValue val = (JDIObjectValue) vars.getValue();
@@ -108,16 +119,16 @@
                                                new ArrayList(),
                                                0 );
 
-            /*             Method m2 = (Method) t.methodsByName( "i" ).iterator().next();
+                         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);
+*/            //boolean hasNext = hasNext(iter);
             //ObjectReferenceImpl next = getNext(iter);
 
-            Field varsField;
+/*            Field varsField;
 
             IVariable var1 = new MVELThisVariable( getJavaDebugTarget(),
                                                    valueImpl,
@@ -125,12 +136,12 @@
             IVariable var2 = new MVELThisVariable( getJavaDebugTarget(),
                                                    valueImpl,
                                                    "label2" );
-
+*/
             //JDIFieldVariable var = new JDIFieldVariable((JDIDebugTarget)getDebugTarget(), varsField, valueImpl);
             //JDILocalVariable var2 = new JDILocalVariable()
-            result.add( var1 );
+/*            result.add( var1 );
             result.add( var2 );
-
+*/
             //            WatchExpression ex = new WatchExpression("frameLocalVars.entrySet().iterator()");
             //            WatchExpression ex = new WatchExpression( "ttw12e4" );
             //            ex.setExpressionContext( this );
@@ -138,13 +149,10 @@
 
             //System.out.println("Got value "+mapentries);
 
-        } catch ( Throwable t ) {
-            t.printStackTrace();
-        }
-
+        
         IVariable[] vararr = (IVariable[]) result.toArray( new IVariable[result.size()] );
 
-        System.out.println( "Returning list of visible vars: count " + vararr.length );
+        System.out.println( "MVEL: Returning list of visible vars: count " + vararr.length );
 
         return vararr;
     }
@@ -178,7 +186,7 @@
             String methodName = getMethodName();
             String signature = getSignature();
             String type = getDeclaringTypeName();
-            System.out.println( "MVELStackFrame.getExecutingRuleInfo: RuleInfo type=" + type
+            System.out.println( "MVEL: MVELStackFrame.getExecutingRuleInfo: RuleInfo type=" + type
             		+ " methodName=" + methodName + " signature" + signature );
 
             return DroolsEclipsePlugin.getDefault().getRuleInfoByClass( type );




More information about the jboss-svn-commits mailing list