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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Jul 16 16:12:08 EDT 2007


Author: ahtik
Date: 2007-07-16 16:12:08 -0400 (Mon, 16 Jul 2007)
New Revision: 13558

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/JavaFunctionBuilder.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.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/DroolsLineBreakpoint.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsStackFrame.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
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/DialectDeterminator.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/DroolsSourceLookupDirector.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/DroolsSourceLookupParticipant.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/MVELSourceLookupParticipant.java
Log:
Progressing with the mvel 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-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java	2007-07-16 20:12:08 UTC (rev 13558)
@@ -335,7 +335,6 @@
         final String[] classes = new String[this.generatedClassList.size()];
         this.generatedClassList.toArray( classes );
 
-        System.out.println("MVEL: JavaDialect compilation");
         final CompilationResult result = this.compiler.compile( classes,
                                                                 this.src,
                                                                 this.packageStoreWrapper,
@@ -352,7 +351,6 @@
                     final RuleErrorHandler rh = (RuleErrorHandler) handler;
                 }
                 handler.addError( err );
-                System.out.println("MVEL: JavaDialect compilation error:"+ err.getMessage());
             }
 
             final Collection errors = this.errorHandlers.values();
@@ -409,7 +407,6 @@
             }
             final String text = (String) context.getInvokers().get( className );
 
-            //System.out.println( className + ":\n" + text );
             final BaseDescr descr = (BaseDescr) context.getDescrLookups().get( className );
             addClassCompileTask( className,
                                  descr,

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaFunctionBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaFunctionBuilder.java	2007-07-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaFunctionBuilder.java	2007-07-16 20:12:08 UTC (rev 13558)
@@ -96,8 +96,6 @@
         final String text = TemplateInterpreter.evalToString( template,
                                                               vars );
 
-        //System.out.println( text );
-
         final BufferedReader reader = new BufferedReader( new StringReader( text ) );
         String line = null;
         final String lineStartsWith = "    public static " + functionDescr.getReturnType() + " " + functionDescr.getName();

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java	2007-07-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java	2007-07-16 20:12:08 UTC (rev 13558)
@@ -69,6 +69,7 @@
 
         try {
             MVELDialect dialect = (MVELDialect) context.getDialect();
+            
             final DroolsMVELFactory factory = new DroolsMVELFactory( context.getDeclarationResolver().getDeclarations(),
                                                                      null,
                                                                      context.getPkg().getGlobals() );

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-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java	2007-07-16 20:12:08 UTC (rev 13558)
@@ -184,8 +184,6 @@
 
     public void init(RuleDescr ruleDescr) {
         //MVEL: Compiler change
-        System.out.println("MVEL: MVELDialect.init with ruleDescr:" + ruleDescr);
-
         //MVEL:test null to Fix failing test on org.drools.rule.builder.dialect.mvel.MVELConsequenceBuilderTest.testImperativeCodeError()
         String pkgName = this.pkg == null? "": this.pkg.getName();
         final String ruleClassName = JavaDialect.getUniqueLegalName( pkgName,
@@ -209,7 +207,6 @@
         final LineMappings mapping = new LineMappings( name );
         mapping.setStartLine( ruleDescr.getConsequenceLine() );
         mapping.setOffset( ruleDescr.getConsequenceOffset() );
-        System.out.println("MVEL: Adding mvel mappings for:" + name + " at line: " + mapping.getStartLine());
 
         context.getPkg().getPackageCompilationData().getLineMappings().put( name, mapping );
 

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-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELConsequence.java	2007-07-16 20:12:08 UTC (rev 13558)
@@ -32,7 +32,6 @@
                                  workingMemory,
                                  null );
 		//MVEL: Core change
-        System.out.println("MVEL:Executing expression " + ((CompiledExpression)expr).getSourceName());
 
         CompiledExpression compexpr = (CompiledExpression)this.expr;
 
@@ -40,10 +39,10 @@
         //MVELRuntime.registerBreakpoint( compexpr.getSourceName(), 1 );
 
         //MVEL: Receive breakpoints from debugger
-        MVELDebugHandler.receiveBreakpoints();
+        MVELDebugHandler.prepare();
         
 		//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-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-core/src/main/java/org/drools/base/mvel/MVELDebugHandler.java	2007-07-16 20:12:08 UTC (rev 13558)
@@ -4,7 +4,7 @@
 import org.mvel.debug.Debugger;
 import org.mvel.debug.Frame;
 
-public class MVELDebugHandler {
+public final class MVELDebugHandler {
 
 	//MVEL: Core change
 	static {
@@ -28,12 +28,12 @@
 	 * @param frame
 	 */
 	private final static void onBreak(Frame frame) {
-		System.out.println("MVEL: HEEEE!!! MVELDebugger break on 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);
+        System.out.println("MVEL: Registering Breakpoint FROM DEBUGGER for "+sourceName+":"+lineNumber+"; from Thread:"+Thread.currentThread());
         MVELRuntime.registerBreakpoint( sourceName, lineNumber );
     }
     
@@ -57,5 +57,12 @@
 		}
 
 	}
+
+    /**
+     * 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/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-16 19:46:38 UTC (rev 13557)
+++ 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-16 20:12:08 UTC (rev 13558)
@@ -1,5 +1,6 @@
 package org.drools.eclipse.debug.core;
 
+import java.awt.EventQueue;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -15,13 +16,12 @@
 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.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.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;
@@ -30,16 +30,16 @@
 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.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.Location;
 import com.sun.jdi.Method;
 import com.sun.jdi.ObjectCollectedException;
 import com.sun.jdi.ObjectReference;
@@ -62,70 +62,109 @@
 
 public class DroolsDebugTarget extends JDIDebugTarget {
 
-    private ArrayList fThreads;
+    private ArrayList          fThreads;
     private ThreadStartHandler fThreadStartHandler = null;
-    private boolean fSuspended = true;
+    private boolean            fSuspended          = true;
 
-    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 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) {        
-        
-		System.out.println("MVEL: entering DroolsDebugTarget.breakpointAdded");
+    public void breakpointAdded(IBreakpoint breakpoint) {
+
         try {
-            if (breakpoint instanceof DroolsLineBreakpoint) {
+            if ( breakpoint instanceof DroolsLineBreakpoint ) {
                 ((DroolsLineBreakpoint) breakpoint).setJavaBreakpointProperties();
 
-                DroolsLineBreakpoint d = (DroolsLineBreakpoint) breakpoint;
-                System.out.println("MVEL:Got dialect " + d.getDialectName());
+                final DroolsLineBreakpoint d = (DroolsLineBreakpoint) breakpoint;
 
-                if (d.getDialectName().equals(MVELDialect.ID)) {
-                    System.out.println("MVEL: Adding MVEL breakpoint" 
-                          + " getLineNumber:" + d.getLineNumber()
-                          + " getDRLLineNumber:" + d.getDRLLineNumber());
+                if ( d.getDialectName().equals( MVELDialect.ID ) ) {
                     //getBreakpoints().add( breakpoint );
                     //super.breakpointAdded(breakpoint);
 
-                    System.out.println("MVEL: BREAKPOINT LINE NUMBER: "+d.getLineNumber());
-                    
-                    super.breakpointAdded(breakpoint);
-                    
+                    Iterator handleriter = getVM().classesByName( "org.drools.base.mvel.MVELDebugHandler" ).iterator();
+                    if ( !handleriter.hasNext() ) {
+                        // 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_EVENT_THREAD );
+
+                        addJDIEventListener( new IJDIEventListener() {
+
+                                                 public boolean handleEvent(Event event,
+                                                                            JDIDebugTarget target) {
+                                                     addRemoteBreakpoint( d );
+                                                     return true;
+                                                 }
+
+                                                 public void wonSuspendVote(Event event,
+                                                                            JDIDebugTarget target) {
+                                                 }
+
+                                             },
+                                             req );
+
+                        req.enable();
+                        return;
+                    }
+
+/*                    boolean suspend = false;
+                    if ( !isSuspended() && canSuspend() ) {
+                        suspend = true;
+                        suspend();
+                    }
+*/                    addRemoteBreakpoint( d );
+/*                    if ( suspend && canResume() ) {
+                        resume();
+                    }
+*/
                 } else {
-                    System.out.println("MVEL: Adding Java breakpoint");
                     // only add breakpoint if setting Java properties of DRL
                     // breakpoint does not generate an error
-                    super.breakpointAdded(breakpoint);
-               }
+                    super.breakpointAdded( breakpoint );
+                }
             } else {
-                super.breakpointAdded(breakpoint);
+                super.breakpointAdded( breakpoint );
             }
-        } catch (Throwable t) {
+        } catch ( Throwable t ) {
             // Exception will be thrown when trying to use breakpoint
             // on drl that is incorrect (cannot be parsed or compiled)
-            DroolsEclipsePlugin.log(t);
+            DroolsEclipsePlugin.log( t );
         }
     }
 
     protected synchronized void initialize() {
-        setThreadList(new ArrayList(5));
+        setThreadList( new ArrayList( 5 ) );
         super.initialize();
     }
 
     protected JDIThread createThread(ThreadReference thread) {
-        JDIThread jdiThread= null;
+        JDIThread jdiThread = null;
         try {
-            jdiThread= new DroolsThread(this, thread);
-        } catch (ObjectCollectedException exception) {
+            jdiThread = new DroolsThread( this,
+                                          thread );
+        } catch ( ObjectCollectedException exception ) {
             // ObjectCollectionException can be thrown if the thread has already
             // completed (exited) in the VM.
             return null;
         }
-        if (isDisconnected()) {
+        if ( isDisconnected() ) {
             return null;
         }
-        synchronized (fThreads) {
-            fThreads.add(jdiThread);
+        synchronized ( fThreads ) {
+            fThreads.add( jdiThread );
         }
         jdiThread.fireCreationEvent();
         return jdiThread;
@@ -133,49 +172,48 @@
 
     private Iterator getThreadIterator() {
         List threadList;
-        synchronized (fThreads) {
-            threadList= (List) fThreads.clone();
+        synchronized ( fThreads ) {
+            threadList = (List) fThreads.clone();
         }
         return threadList.iterator();
     }
 
     private boolean hasSuspendedThreads() {
         Iterator it = getThreadIterator();
-        while(it.hasNext()){
-            IThread thread = (IThread)it.next();
-            if(thread.isSuspended())
-                return true;
+        while ( it.hasNext() ) {
+            IThread thread = (IThread) it.next();
+            if ( thread.isSuspended() ) return true;
         }
         return false;
     }
 
     public boolean canResume() {
-        return (isSuspended() || hasSuspendedThreads())
-            && isAvailable() && !isPerformingHotCodeReplace();
+        return (isSuspended() || hasSuspendedThreads()) && isAvailable() && !isPerformingHotCodeReplace();
     }
 
     protected void resume(boolean fireNotification) throws DebugException {
-        if ((!isSuspended() && !hasSuspendedThreads())
-            || !isAvailable()) {
+        if ( (!isSuspended() && !hasSuspendedThreads()) || !isAvailable() ) {
             return;
         }
         try {
-            setSuspended(false);
+            setSuspended( false );
             resumeThreads();
             VirtualMachine vm = getVM();
-            if (vm != null) {
+            if ( vm != null ) {
                 vm.resume();
             }
-            if (fireNotification) {
-                fireResumeEvent(DebugEvent.CLIENT_REQUEST);
+            if ( fireNotification ) {
+                fireResumeEvent( DebugEvent.CLIENT_REQUEST );
             }
-        } catch (VMDisconnectedException e) {
+        } catch ( VMDisconnectedException e ) {
             disconnected();
             return;
-        } catch (RuntimeException e) {
-            setSuspended(true);
-            fireSuspendEvent(DebugEvent.CLIENT_REQUEST);
-            targetRequestFailed(MessageFormat.format(JDIDebugModelMessages.JDIDebugTarget_exception_resume, new String[] {e.toString()}), e);
+        } catch ( RuntimeException e ) {
+            setSuspended( true );
+            fireSuspendEvent( DebugEvent.CLIENT_REQUEST );
+            targetRequestFailed( MessageFormat.format( JDIDebugModelMessages.JDIDebugTarget_exception_resume,
+                                                       new String[]{e.toString()} ),
+                                 e );
         }
     }
 
@@ -192,29 +230,31 @@
     }
 
     public IThread[] getThreads() {
-        synchronized (fThreads) {
-            return (IThread[])fThreads.toArray(new IThread[0]);
+        synchronized ( fThreads ) {
+            return (IThread[]) fThreads.toArray( new IThread[0] );
         }
     }
 
     protected void removeAllThreads() {
-        Iterator itr= getThreadIterator();
-        while (itr.hasNext()) {
-            DroolsThread child= (DroolsThread) itr.next();
+        Iterator itr = getThreadIterator();
+        while ( itr.hasNext() ) {
+            DroolsThread child = (DroolsThread) itr.next();
             child.terminated();
         }
-        synchronized (fThreads) {
+        synchronized ( fThreads ) {
             fThreads.clear();
         }
     }
 
     protected void initializeRequests() {
-        setThreadStartHandler(new ThreadStartHandler());
+        setThreadStartHandler( new ThreadStartHandler() );
         new ThreadDeathHandler();
         new MVELTraceHandler();
     }
 
-    class ThreadDeathHandler implements IJDIEventListener {
+    class ThreadDeathHandler
+        implements
+        IJDIEventListener {
 
         protected ThreadDeathHandler() {
             createRequest();
@@ -226,14 +266,15 @@
          */
         protected void createRequest() {
             EventRequestManager manager = getEventRequestManager();
-            if (manager != null) {
+            if ( manager != null ) {
                 try {
-                    EventRequest req= manager.createThreadDeathRequest();
-                    req.setSuspendPolicy(EventRequest.SUSPEND_NONE);
+                    EventRequest req = manager.createThreadDeathRequest();
+                    req.setSuspendPolicy( EventRequest.SUSPEND_NONE );
                     req.enable();
-                    addJDIEventListener(this, req);
-                } catch (RuntimeException e) {
-                    logError(e);
+                    addJDIEventListener( this,
+                                         req );
+                } catch ( RuntimeException e ) {
+                    logError( e );
                 }
             }
         }
@@ -248,12 +289,13 @@
          * @param target the target in which the thread died
          * @return <code>true</code> - the thread should be resumed
          */
-        public boolean handleEvent(Event event, JDIDebugTarget target) {
-            ThreadReference ref= ((ThreadDeathEvent)event).thread();
-            DroolsThread thread= (DroolsThread) findThread(ref);
-            if (thread != null) {
-                synchronized (fThreads) {
-                    fThreads.remove(thread);
+        public boolean handleEvent(Event event,
+                                   JDIDebugTarget target) {
+            ThreadReference ref = ((ThreadDeathEvent) event).thread();
+            DroolsThread thread = (DroolsThread) findThread( ref );
+            if ( thread != null ) {
+                synchronized ( fThreads ) {
+                    fThreads.remove( thread );
                 }
                 thread.terminated();
             }
@@ -263,13 +305,16 @@
         /* (non-Javadoc)
          * @see org.eclipse.jdt.internal.debug.core.IJDIEventListener#wonSuspendVote(com.sun.jdi.event.Event, org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget)
          */
-        public void wonSuspendVote(Event event, JDIDebugTarget target) {
+        public void wonSuspendVote(Event event,
+                                   JDIDebugTarget target) {
             // do nothing
         }
 
     }
 
-    class ThreadStartHandler implements IJDIEventListener {
+    class ThreadStartHandler
+        implements
+        IJDIEventListener {
 
         protected EventRequest fRequest;
 
@@ -283,15 +328,16 @@
          */
         protected void createRequest() {
             EventRequestManager manager = getEventRequestManager();
-            if (manager != null) {
+            if ( manager != null ) {
                 try {
-                    EventRequest req= manager.createThreadStartRequest();
-                    req.setSuspendPolicy(EventRequest.SUSPEND_NONE);
+                    EventRequest req = manager.createThreadStartRequest();
+                    req.setSuspendPolicy( EventRequest.SUSPEND_NONE );
                     req.enable();
-                    addJDIEventListener(this, req);
-                    setRequest(req);
-                } catch (RuntimeException e) {
-                    logError(e);
+                    addJDIEventListener( this,
+                                         req );
+                    setRequest( req );
+                } catch ( RuntimeException e ) {
+                    logError( e );
                 }
             }
         }
@@ -308,28 +354,29 @@
          * @param target the target in which the thread started
          * @return <code>true</code> - the thread should be resumed
          */
-        public boolean handleEvent(Event event, JDIDebugTarget target) {
-            ThreadReference thread= ((ThreadStartEvent)event).thread();
+        public boolean handleEvent(Event event,
+                                   JDIDebugTarget target) {
+            ThreadReference thread = ((ThreadStartEvent) event).thread();
             try {
-                if (thread.isCollected()) {
+                if ( thread.isCollected() ) {
                     return false;
                 }
-            } catch (VMDisconnectedException exception) {
+            } catch ( VMDisconnectedException exception ) {
                 return false;
-            } catch (ObjectCollectedException e) {
+            } catch ( ObjectCollectedException e ) {
                 return false;
-            } catch (TimeoutException e) {
+            } catch ( TimeoutException e ) {
                 // continue - attempt to create the thread
             }
-            DroolsThread jdiThread= (DroolsThread) findThread(thread);
-            if (jdiThread == null) {
-                jdiThread = (DroolsThread) createThread(thread);
-                if (jdiThread == null) {
+            DroolsThread jdiThread = (DroolsThread) findThread( thread );
+            if ( jdiThread == null ) {
+                jdiThread = (DroolsThread) createThread( thread );
+                if ( jdiThread == null ) {
                     return false;
                 }
             } else {
                 jdiThread.disposeStackFrames();
-                jdiThread.fireChangeEvent(DebugEvent.CONTENT);
+                jdiThread.fireChangeEvent( DebugEvent.CONTENT );
             }
             return !jdiThread.isSuspended();
         }
@@ -337,7 +384,8 @@
         /* (non-Javadoc)
          * @see org.eclipse.jdt.internal.debug.core.IJDIEventListener#wonSuspendVote(com.sun.jdi.event.Event, org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget)
          */
-        public void wonSuspendVote(Event event, JDIDebugTarget target) {
+        public void wonSuspendVote(Event event,
+                                   JDIDebugTarget target) {
             // do nothing
         }
 
@@ -345,9 +393,10 @@
          * Deregisters this event listener.
          */
         protected void deleteRequest() {
-            if (getRequest() != null) {
-                removeJDIEventListener(this, getRequest());
-                setRequest(null);
+            if ( getRequest() != null ) {
+                removeJDIEventListener( this,
+                                        getRequest() );
+                setRequest( null );
             }
         }
 
@@ -362,7 +411,7 @@
 
     private void disposeThreadHandler() {
         ThreadStartHandler handler = getThreadStartHandler2();
-        if (handler != null) {
+        if ( handler != null ) {
             handler.deleteRequest();
         }
     }
@@ -380,10 +429,10 @@
     }
 
     public boolean isOutOfSynch() throws DebugException {
-        Iterator threads= getThreadIterator();
-        while (threads.hasNext()) {
-            JDIThread thread= (JDIThread)threads.next();
-            if (thread.isOutOfSynch()) {
+        Iterator threads = getThreadIterator();
+        while ( threads.hasNext() ) {
+            JDIThread thread = (JDIThread) threads.next();
+            if ( thread.isOutOfSynch() ) {
                 return true;
             }
         }
@@ -391,10 +440,10 @@
     }
 
     public boolean mayBeOutOfSynch() {
-        Iterator threads= getThreadIterator();
-        while (threads.hasNext()) {
-            JDIThread thread= (JDIThread)threads.next();
-            if (thread.mayBeOutOfSynch()) {
+        Iterator threads = getThreadIterator();
+        while ( threads.hasNext() ) {
+            JDIThread thread = (JDIThread) threads.next();
+            if ( thread.mayBeOutOfSynch() ) {
                 return true;
             }
         }
@@ -402,135 +451,139 @@
     }
 
     public JDIThread findThread(ThreadReference tr) {
-        Iterator iter= getThreadIterator();
-        while (iter.hasNext()) {
+        Iterator iter = getThreadIterator();
+        while ( iter.hasNext() ) {
             JDIThread thread = (JDIThread) iter.next();
-            if (thread.getUnderlyingThread().equals(tr))
-                return thread;
+            if ( thread.getUnderlyingThread().equals( tr ) ) return thread;
         }
         return null;
     }
 
-    public void breakpointRemoved(IBreakpoint breakpoint, IMarkerDelta delta) {
-        if (!isAvailable()) {
+    public void breakpointRemoved(IBreakpoint breakpoint,
+                                  IMarkerDelta delta) {
+        if ( !isAvailable() ) {
             return;
         }
-        if (supportsBreakpoint(breakpoint)) {
+        if ( supportsBreakpoint( breakpoint ) ) {
             try {
-                ((JavaBreakpoint)breakpoint).removeFromTarget(this);
-                getBreakpoints().remove(breakpoint);
+                ((JavaBreakpoint) breakpoint).removeFromTarget( this );
+                getBreakpoints().remove( breakpoint );
                 Iterator threads = getThreadIterator();
-                while (threads.hasNext()) {
-                    ((DroolsThread)threads.next()).removeCurrentBreakpoint(breakpoint);
+                while ( threads.hasNext() ) {
+                    ((DroolsThread) threads.next()).removeCurrentBreakpoint( breakpoint );
                 }
-            } catch (CoreException e) {
-                logError(e);
+            } catch ( CoreException e ) {
+                logError( e );
             }
         }
     }
 
     protected void suspendThreads() {
         Iterator threads = getThreadIterator();
-        while (threads.hasNext()) {
-            ((DroolsThread)threads.next()).suspendedByVM();
+        while ( threads.hasNext() ) {
+            ((DroolsThread) threads.next()).suspendedByVM();
         }
     }
 
     protected void resumeThreads() throws DebugException {
         Iterator threads = getThreadIterator();
-        while (threads.hasNext()) {
-            ((DroolsThread)threads.next()).resumedByVM();
+        while ( threads.hasNext() ) {
+            ((DroolsThread) threads.next()).resumedByVM();
         }
     }
 
     public void disconnect() throws DebugException {
 
-        if (!isAvailable()) {
+        if ( !isAvailable() ) {
             // already done
             return;
         }
 
-        if (!canDisconnect()) {
-            notSupported(JDIDebugModelMessages.JDIDebugTarget_does_not_support_disconnect);
+        if ( !canDisconnect() ) {
+            notSupported( JDIDebugModelMessages.JDIDebugTarget_does_not_support_disconnect );
         }
 
         try {
             disposeThreadHandler();
             VirtualMachine vm = getVM();
-            if (vm != null) {
+            if ( vm != null ) {
                 vm.dispose();
             }
-        } catch (VMDisconnectedException e) {
+        } catch ( VMDisconnectedException e ) {
             // if the VM disconnects while disconnecting, perform
             // normal disconnect handling
             disconnected();
-        } catch (RuntimeException e) {
-            targetRequestFailed(MessageFormat.format(JDIDebugModelMessages.JDIDebugTarget_exception_disconnecting, new String[] {e.toString()}), e);
+        } catch ( RuntimeException e ) {
+            targetRequestFailed( MessageFormat.format( JDIDebugModelMessages.JDIDebugTarget_exception_disconnecting,
+                                                       new String[]{e.toString()} ),
+                                 e );
         }
 
     }
 
     public void terminate() throws DebugException {
-        if (!isAvailable()) {
+        if ( !isAvailable() ) {
             return;
         }
-        if (!supportsTerminate()) {
-            notSupported(JDIDebugModelMessages.JDIDebugTarget_does_not_support_termination);
+        if ( !supportsTerminate() ) {
+            notSupported( JDIDebugModelMessages.JDIDebugTarget_does_not_support_termination );
         }
         try {
-            setTerminating(true);
+            setTerminating( true );
             disposeThreadHandler();
             VirtualMachine vm = getVM();
-            if (vm != null) {
-                vm.exit(1);
+            if ( vm != null ) {
+                vm.exit( 1 );
             }
-            IProcess process= getProcess();
-            if (process != null) {
+            IProcess process = getProcess();
+            if ( process != null ) {
                 process.terminate();
             }
-        } catch (VMDisconnectedException e) {
+        } catch ( VMDisconnectedException e ) {
             // if the VM disconnects while exiting, perform
             // normal termination processing
             terminated();
-        } catch (TimeoutException exception) {
+        } catch ( TimeoutException exception ) {
             // if there is a timeout see if the associated process is terminated
             IProcess process = getProcess();
-            if (process != null && process.isTerminated()) {
+            if ( process != null && process.isTerminated() ) {
                 terminated();
             } else {
                 // All we can do is disconnect
                 disconnected();
             }
-        } catch (RuntimeException e) {
-            targetRequestFailed(MessageFormat.format(JDIDebugModelMessages.JDIDebugTarget_exception_terminating, new String[] {e.toString()}), e);
+        } catch ( RuntimeException e ) {
+            targetRequestFailed( MessageFormat.format( JDIDebugModelMessages.JDIDebugTarget_exception_terminating,
+                                                       new String[]{e.toString()} ),
+                                 e );
         }
     }
 
     public void handleVMStart(VMStartEvent event) {
-        if (isResumeOnStartup()) {
+        if ( isResumeOnStartup() ) {
             try {
-                setSuspended(true);
+                setSuspended( true );
                 resume();
-            } catch (DebugException e) {
-                logError(e);
+            } catch ( DebugException e ) {
+                logError( e );
             }
         }
         // If any threads have resumed since thread collection was initialized,
         // update their status (avoid concurrent modification - use #getThreads())
         IThread[] threads = getThreads();
-        for (int i = 0; i < threads.length; i++) {
+        for ( int i = 0; i < threads.length; i++ ) {
             DroolsThread thread = (DroolsThread) threads[i];
-            if (thread.isSuspended()) {
+            if ( thread.isSuspended() ) {
                 try {
                     boolean suspended = thread.getUnderlyingThread().isSuspended();
-                    if (!suspended) {
-                        thread.setRunning(true);
-                        thread.fireResumeEvent(DebugEvent.CLIENT_REQUEST);
+                    if ( !suspended ) {
+                        thread.setRunning( true );
+                        thread.fireResumeEvent( DebugEvent.CLIENT_REQUEST );
                     }
-                } catch (VMDisconnectedException e) {
-                } catch (ObjectCollectedException e){
-                } catch (RuntimeException e) {
-                    logError(e);
+                } catch ( VMDisconnectedException e ) {
+                } catch ( ObjectCollectedException e ) {
+                } catch ( RuntimeException e ) {
+                    logError( e );
                 }
             }
         }
@@ -538,94 +591,79 @@
 
     protected void initializeState() {
 
-        List threads= null;
+        List threads = null;
         VirtualMachine vm = getVM();
-        if (vm != null) {
+        if ( vm != null ) {
             try {
-                threads= vm.allThreads();
-            } catch (RuntimeException e) {
-                internalError(e);
+                threads = vm.allThreads();
+            } catch ( RuntimeException e ) {
+                internalError( e );
             }
-            if (threads != null) {
-                Iterator initialThreads= threads.iterator();
-                while (initialThreads.hasNext()) {
-                    createThread((ThreadReference) initialThreads.next());
+            if ( threads != null ) {
+                Iterator initialThreads = threads.iterator();
+                while ( initialThreads.hasNext() ) {
+                    createThread( (ThreadReference) initialThreads.next() );
                 }
             }
         }
 
-        if (isResumeOnStartup()) {
-            setSuspended(false);
+        if ( isResumeOnStartup() ) {
+            setSuspended( false );
         }
     }
 
     public void suspend() throws DebugException {
-        if (isSuspended()) {
+        if ( isSuspended() ) {
             return;
         }
         try {
             VirtualMachine vm = getVM();
-            if (vm != null) {
+            if ( vm != null ) {
                 vm.suspend();
             }
             suspendThreads();
-            setSuspended(true);
-            fireSuspendEvent(DebugEvent.CLIENT_REQUEST);
-        } catch (RuntimeException e) {
-            setSuspended(false);
-            fireResumeEvent(DebugEvent.CLIENT_REQUEST);
-            targetRequestFailed(MessageFormat.format(JDIDebugModelMessages.JDIDebugTarget_exception_suspend, new String[] {e.toString()}), e);
+            setSuspended( true );
+            fireSuspendEvent( DebugEvent.CLIENT_REQUEST );
+        } catch ( RuntimeException e ) {
+            setSuspended( false );
+            fireResumeEvent( DebugEvent.CLIENT_REQUEST );
+            targetRequestFailed( MessageFormat.format( JDIDebugModelMessages.JDIDebugTarget_exception_suspend,
+                                                       new String[]{e.toString()} ),
+                                 e );
         }
     }
 
     public void prepareToSuspendByBreakpoint(JavaBreakpoint breakpoint) {
-        setSuspended(true);
+        setSuspended( true );
         suspendThreads();
     }
 
     protected void cancelSuspendByBreakpoint(JavaBreakpoint breakpoint) throws DebugException {
-        setSuspended(false);
+        setSuspended( false );
         resumeThreads();
     }
 
-    class MVELTraceHandler implements IJDIEventListener {
+    class MVELTraceHandler
+        implements
+        IJDIEventListener {
 
         protected MVELTraceHandler() {
             createRequest();
         }
 
         protected void createRequest() {
-        	System.out.println("MVEL: entering MVELTraceHandler.createRequest");
             EventRequestManager manager = getEventRequestManager();
-            if (manager != null) {
+            if ( manager != null ) {
                 try {
-/*                    String className = "com.sample.DroolsTest";
-
-                    List list = getVM().classesByName(className);
-                    List alllist = getVM().allClasses();
-
-                    System.out.println("Number of classes "+alllist.size());
-                    System.out.println("they are:");
-
-                    Iterator iter = alllist.iterator();
-                    while (iter.hasNext()) {
-                        Object o = (Object) iter.next();
-                        System.out.println("allclass: "+o);
-                    }
-
-                    System.out.println("Found classes "+list.size());
-                    if (list.size()>0) {
-                        System.out.println(". first "+iter.next());
-                    }
-*/
-                    ClassPrepareRequest req= manager.createClassPrepareRequest();
-                    req.addClassFilter("org.drools.base.mvel.MVELDebugHandler");
-                    req.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD);
+                    ClassPrepareRequest req = manager.createClassPrepareRequest();
+                    req.addClassFilter( "org.drools.base.mvel.MVELDebugHandler" );
+                    req.setSuspendPolicy( EventRequest.SUSPEND_EVENT_THREAD );
+                    addJDIEventListener( MVELTraceHandler.this,
+                                         req );
                     req.enable();
-                    addJDIEventListener(MVELTraceHandler.this, req);
 
-                } catch (RuntimeException e) {
-                    logError(e);
+                } catch ( RuntimeException e ) {
+                    logError( e );
                 }
             }
         }
@@ -640,9 +678,9 @@
          * @param target the target in which the thread died
          * @return <code>true</code> - the thread should be resumed
          */
-        public boolean handleEvent(Event event, JDIDebugTarget target) {
-            String name = ((ClassPrepareEvent)event).referenceType().name();
-            System.out.println("MVEL: dialect class loaded " + name);
+        public boolean handleEvent(Event event,
+                                   JDIDebugTarget target) {
+            String name = ((ClassPrepareEvent) event).referenceType().name();
 
             MethodEntryRequest req = getEventRequestManager().createMethodEntryRequest();
             req.addClassFilter( ((ClassPrepareEvent) event).referenceType() );
@@ -654,8 +692,6 @@
              EventRequest req= manager.createModificationWatchpointRequest(field);
              */
             req.setSuspendPolicy( EventRequest.SUSPEND_EVENT_THREAD );
-            req.enable();
-
             addJDIEventListener( new IJDIEventListener() {
 
                                      public boolean handleEvent(Event event,
@@ -663,130 +699,53 @@
                                          MethodEntryEvent entryEvent = (MethodEntryEvent) event;
 
                                          String name2 = entryEvent.method().name();
-                                         System.out.println( "MVEL: Got MVELConsequence call for " + name2 );
 
-                                         if ( !name2.equals("onBreak" ) && !name2.equals( "receiveBreakpoints" )) {
-                                             System.out.println( "MVEL: Wrong method, resuming. method: "+name2 );
+                                         if ( !name2.equals( "onBreak" ) && !name2.equals( "receiveBreakpoints" ) ) {
                                              //event.virtualMachine().resume();
                                              return true;
                                          }
 
-                                         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();
+                                         try {
+                                             IThread[] tharr = getThreads();
 
-                                                            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();
-                                                                
+                                             ThreadReference t = null;
+                                             DroolsThread t2 = null;
 
-                                                                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");
+                                             for ( int i = 0; i < tharr.length; i++ ) {
+                                                 DroolsThread th2 = (DroolsThread) tharr[i];
+                                                 ThreadReference th2real = ((DroolsThread) tharr[i]).getUnderlyingThread();
 
-                                         JDIThread thr = findThread( entryEvent.thread() );
-                                         try {
-                                            thr.suspend();
-                                        } catch ( DebugException e ) {
-                                            // TODO Auto-generated catch block
-                                            e.printStackTrace();
-                                        }
+                                                 //MVEL It doesn't have to be always main. find a better way for detection
+                                                 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);
 
-                                         System.out.println("MVEL: Thread is "+entryEvent.thread().getClass());
-                                         if (thr instanceof DroolsThread) {
-                                             System.out.println("MVEL: Drools Thread!!");
-                                             ((DroolsThread)thr).suspendedByVM();
+                                                     /*
+                                                     try {
+                                                        Thread.sleep( 3000 );
+                                                    } catch ( InterruptedException e ) {
+                                                        // TODO Auto-generated catch block
+                                                        e.printStackTrace();
+                                                    }*/
+                                                     
+                                                     //fireSuspendEvent(DebugEvent.BREAKPOINT);
+                                                     //((DroolsThread)thr).suspendedByVM();
+                                                     //suspendThreads();
+                                                     return true;
+                                                 }
+                                             }
+                                         } catch ( DebugException t ) {
+                                             t.printStackTrace();
                                          }
-                                         //suspendThreads();
-                                         //suspendedByBreakpoint( null, false);
-
-
-
-/*                                         try {
-                                            suspend();
-                                        } catch ( DebugException e ) {
-                                            // TODO Auto-generated catch block
-                                            e.printStackTrace();
-                                        }
-*/                                         System.out.println( "MVEL: Stopping thread, inspecting remote vars" );
-
-/*                                         ReferenceType declaringType = entryEvent.location().declaringType();
-                                         Field varsField = declaringType.fieldByName( "frameLocalVars" );
-
-                                         System.out.println("Field is "+varsField);
-
-                                         Value value = declaringType.getValue( varsField );
-
-                                         System.out.println( "Got Value: " + value );
-*/
                                          return true;
 
                                      }
@@ -800,48 +759,124 @@
                                  },
                                  req );
 
+            req.enable();
 
-            //getVM().resume();
-/*          try {
-                resumeThreads();
-            } catch (DebugException e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            }
-*/
-/*          try {
-                String path = ((MethodEntryEvent)event).location().sourcePath();
-                if (path.startsWith("org.drools")) {
-                    System.out.println("Path "+path);
-                }
-            } catch (AbsentInformationException e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            }
-*/
-            //System.out.println("WOW! Got entry! "+method);
             return true;
         }
 
         /* (non-Javadoc)
          * @see org.eclipse.jdt.internal.debug.core.IJDIEventListener#wonSuspendVote(com.sun.jdi.event.Event, org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget)
          */
-        public void wonSuspendVote(Event event, JDIDebugTarget target) {
+        public void wonSuspendVote(Event event,
+                                   JDIDebugTarget target) {
             // do nothing
         }
 
     }
 
-    public Object getFirstDroolsBreakpoint() {
+    public Object getDroolsBreakpoint(String source,
+                                      int line) {
         Iterator iterator = getBreakpoints().iterator();
         while ( iterator.hasNext() ) {
-           IJavaBreakpoint element = (IJavaBreakpoint) iterator.next();
-           if (element instanceof DroolsLineBreakpoint) {
-               DroolsLineBreakpoint l = (DroolsLineBreakpoint) element;
-               return l;
-           }
+            IJavaBreakpoint element = (IJavaBreakpoint) iterator.next();
+            if ( element instanceof DroolsLineBreakpoint ) {
+                DroolsLineBreakpoint l = (DroolsLineBreakpoint) element;
+                try {
+
+                    if ( l.getLineNumber() == line && source.equals( l.getRuleName() ) ) {
+                        return l;
+                    }
+                } catch ( CoreException e ) {
+                    // TODO Auto-generated catch block
+                    e.printStackTrace();
+                }
+            }
         }
         return null;
     }
 
+    private void addRemoteBreakpoint(DroolsLineBreakpoint d) {
+        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 ) {
+            e1.printStackTrace();
+            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 {
+
+            //StackFrame frame = t.frame( 0 );                                                                
+
+            //ClassType tt = (ClassType) getVM().classesByName(refType.name()).iterator().next();
+            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
+                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 ( Throwable e ) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+
+    }
+
+    /*    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-16 19:46:38 UTC (rev 13557)
+++ 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-16 20:12:08 UTC (rev 13558)
@@ -52,7 +52,7 @@
     public int getDRLLineNumber() {
         return getMarker().getAttribute( IDroolsDebugConstants.DRL_LINE_NUMBER, -1 );
     }
-
+  
     public String getModelIdentifier() {
         return IDroolsDebugConstants.ID_DROOLS_DEBUG_MODEL;
     }
@@ -69,7 +69,8 @@
                 DRLInfo drlInfo = DroolsEclipsePlugin.getDefault().parseResource( marker.getResource(), true );
 
                 marker.setAttribute( TYPE_NAME, getRuleClassName( drlInfo, marker.getResource().toString(), drlLineNumber ) );
-                marker.setAttribute( IMarker.LINE_NUMBER, getRuleLineNumber( drlInfo, marker.getResource().toString(), drlLineNumber ) );
+                int ruleLineNumber = getRuleLineNumber( drlInfo, marker.getResource().toString(), drlLineNumber );
+                marker.setAttribute( IMarker.LINE_NUMBER, ruleLineNumber );
                 marker.setAttribute( DIALECT, getDialect( drlInfo, drlLineNumber ) );
 
             } catch ( Throwable t ) {
@@ -106,8 +107,10 @@
             RuleInfo ruleInfo = drlInfo.getRuleInfo( lineNumber );
             if ( ruleInfo != null ) {
                 if ( ruleInfo.getConsequenceDrlLineNumber() < lineNumber ) {
-                    return ruleInfo.getConsequenceJavaLineNumber() 
-                    	+ (lineNumber - ruleInfo.getConsequenceDrlLineNumber() + 1);
+                    
+                    int line = ruleInfo.getConsequenceJavaLineNumber() 
+                                        	+ (lineNumber - ruleInfo.getConsequenceDrlLineNumber() + 1);
+                    return line;
                 }
             }
             FunctionInfo functionInfo = drlInfo.getFunctionInfo( lineNumber );
@@ -119,4 +122,16 @@
         throw new CoreException( new Status( IStatus.ERROR, DroolsEclipsePlugin.getUniqueIdentifier(), 0,
                                              "Cannot determine ruleLineNumber for " + resource + " " + lineNumber, null ) );
     }
+    
+    public String getRuleName() {
+        IMarker marker = getMarker();
+        if ( marker.exists() ) {
+                try {
+                    return (String) marker.getAttribute( TYPE_NAME);
+                } catch ( CoreException e ) {
+                    e.printStackTrace();
+                }
+        }
+        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/DroolsStackFrame.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsStackFrame.java	2007-07-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsStackFrame.java	2007-07-16 20:12:08 UTC (rev 13558)
@@ -74,7 +74,6 @@
 			String methodName = getMethodName();
 			String signature = getSignature();
 			String type = getDeclaringTypeName();
-            System.out.println("MVEL: in getExecutingRuleInfo: type=" + type + " methodName=" + methodName + " signature" + signature);
             if ("consequence".equals(methodName) && signature.startsWith(CONSEQUENCE_SIGNATURE)) {
 				return DroolsEclipsePlugin.getDefault().getRuleInfoByClass(type);
 			}
@@ -242,8 +241,7 @@
     }
 
     protected DroolsStackFrame createNewDroolsFrame(StackFrame frame, int depth) {
-    	//MVEL: should we try to return a Drols or Mvel stack frame? 
-        return new DroolsStackFrame(fThread, frame, depth);
+        return DroolsThread.createCustomFrame( fThread, depth, frame );
     }
 	
 	public IThread getThread() {

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-16 19:46:38 UTC (rev 13557)
+++ 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-16 20:12:08 UTC (rev 13558)
@@ -15,10 +15,13 @@
 import org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget;
 import org.eclipse.jdt.internal.debug.core.model.JDIThread;
 
+import com.sun.jdi.ClassType;
 import com.sun.jdi.IncompatibleThreadStateException;
 import com.sun.jdi.InvalidStackFrameException;
 import com.sun.jdi.Location;
+import com.sun.jdi.Method;
 import com.sun.jdi.ObjectCollectedException;
+import com.sun.jdi.ObjectReference;
 import com.sun.jdi.StackFrame;
 import com.sun.jdi.ThreadReference;
 
@@ -58,18 +61,14 @@
 				for (int i = newFrames - 1; i >= 0; i--) {
                     StackFrame currentFrame = (StackFrame) frames.get(i);
                     //MVEL: create an mvel stack frame when the declaring type is our debugger?
-                    //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.base.mvel.MVELDebugHandler" )
-                    		&& loc.method().name().equals( "onBreak" ) ) {
-	                    System.out.println("    MVEL: creating MVELStackFrame");
-                        fStackFrames.add( 0, new MVELStackFrame( this, currentFrame, depth ) );
-                    } else {
-	                    System.out.println("    MVEL: creating DroolsStackFrame");
-                        fStackFrames.add( 0, new DroolsStackFrame( this, currentFrame, depth ) );
-                    }
+                    
+                    DroolsStackFrame customFrame;                    
 
+                    customFrame = createCustomFrame( this, depth,
+                                                     currentFrame );
+
+                    fStackFrames.add( 0, customFrame );
+
 					depth++;
 				}
 				int numToRebind = Math.min(newSize, oldSize); // number of frames to attempt to rebind
@@ -93,6 +92,19 @@
 		return fStackFrames;
 	}
 
+    public final static DroolsStackFrame createCustomFrame(DroolsThread thread, int depth,
+                                               StackFrame currentFrame) {
+        DroolsStackFrame customFrame;
+        Location loc = currentFrame.location();
+        if ( loc.declaringType().name().equals( "org.drools.base.mvel.MVELDebugHandler" )
+        		&& loc.method().name().equals( "onBreak" ) ) {
+            customFrame = new MVELStackFrame( thread, currentFrame, depth );
+        } else {
+            customFrame = new DroolsStackFrame( thread, currentFrame, depth );
+        }
+        return customFrame;
+    }
+
 	private List getUnderlyingFrames() throws DebugException {
 		if (!isSuspended()) {
 			// Checking isSuspended here eliminates a race condition in resume
@@ -189,4 +201,15 @@
 		super.stepToFrame(frame);
 	}
 
+    /* (non-Javadoc)
+     * @see org.eclipse.jdt.internal.debug.core.model.JDIThread#newInstance(com.sun.jdi.ClassType, com.sun.jdi.Method, java.util.List)
+     */
+    public ObjectReference newInstance(ClassType receiverClass,
+                                          Method constructor,
+                                          List args) throws DebugException {
+        return super.newInstance( receiverClass,
+                                  constructor,
+                                  args );
+    }
+    
 }

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-16 19:46:38 UTC (rev 13557)
+++ 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-16 20:12:08 UTC (rev 13558)
@@ -7,19 +7,30 @@
 import org.drools.eclipse.DroolsEclipsePlugin;
 import org.drools.eclipse.DRLInfo.RuleInfo;
 import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IValue;
 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.jdi.internal.MirrorImpl;
+import org.eclipse.jdi.internal.StackFrameImpl;
+import org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget;
+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.BooleanValue;
+import com.sun.jdi.ClassNotLoadedException;
+import com.sun.jdi.ClassType;
 import com.sun.jdi.Field;
+import com.sun.jdi.IncompatibleThreadStateException;
+import com.sun.jdi.IntegerValue;
+import com.sun.jdi.InvalidTypeException;
+import com.sun.jdi.InvocationException;
 import com.sun.jdi.LocalVariable;
 import com.sun.jdi.Method;
 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.Value;
 
@@ -32,7 +43,15 @@
                frame,
                depth );
         //MVEL:Logging
-        System.out.println( "MVEL: MVELStackFrame created for depth " + depth + " thread=" + thread );
+       try {
+        Iterator i = thread.getUnderlyingThread().frames().iterator();
+        while ( i.hasNext() ) {
+            StackFrameImpl o = (StackFrameImpl) i.next();
+        }
+    } catch ( IncompatibleThreadStateException e ) {
+        // TODO Auto-generated catch block
+        e.printStackTrace();
+    }
 
     }
 
@@ -52,115 +71,195 @@
         Method method = getUnderlyingMethod(); // onBreak
         ReferenceType declaringType = method.declaringType(); // org.drools.base.mvel.MVELDebugHandler
 
-         //ReferenceType declaringType = .location().declaringType();
+        //ReferenceType declaringType = .location().declaringType();
+        try {
 
-        try {
             Object var = method.variables().get( 0 );
-            LocalVariable v2 = (LocalVariable) var;            
-            result.add( new DroolsLocalVariable(this,v2));
+            LocalVariable v2 = (LocalVariable) var;
+            DroolsLocalVariable frameLocal = new DroolsLocalVariable( this,
+                                                                      v2 );
+            result.add( frameLocal );
+
+            Value factoryVar = fetchField( frameLocal, "factory" );
+            Value localVars = fetchField( factoryVar,
+                                          "localVariables" );
+
+            ObjectReference mapObj = ((JDIObjectValue) frameLocal.getValue()).getUnderlyingObject();
+            ReferenceType t = mapObj.referenceType();
+
+            Value entrySet = runMethod( localVars,
+                                        "entrySet" );
+            Value iter = runMethod( entrySet,
+                                    "iterator" );
             
-        } catch ( AbsentInformationException e ) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-        
-/*         Field varsField = declaringType.fieldByName("frameLocalVars");
+            while (internalHasNext(iter)) {
+                Value next = runMethod( iter,
+                "next" );
 
-         System.out.println("field is "+varsField);
+                Value entryKey = runMethod( next,
+                                            "getKey" );
+                Value entryValue = runMethod( next,
+                                              "getValue" );
+                String entryK = ((StringReference) entryKey).value();
 
-         Value value = declaringType.getValue(varsField);
+                MVELThisVariable th = new MVELThisVariable( (JDIDebugTarget) getDebugTarget(),
+                                                            (ObjectReference) entryValue,
+                                                            entryK );
+                result.add( th );
+            }
+            
+            // v2.localVariables
 
-         System.out.println("value is "+value);
+            //ObjectReference iteratorObj = ((JDIObjectValue)mapentries).getUnderlyingObject();
 
-         ObjectReferenceImpl valueImpl = (ObjectReferenceImpl) value;
+            /*         Field varsField = declaringType.fieldByName("frameLocalVars");
 
-         JDIFieldVariable var = new JDIFieldVariable((JDIDebugTarget)getDebugTarget(), varsField, valueImpl);
+             System.out.println("field is "+varsField);
 
-         System.out.println("Got Value for Stack Frame!!: "+value+" with impl class "+value.getClass());
+             Value value = declaringType.getValue(varsField);
 
-         result.add(var);
-         */
+             System.out.println("value is "+value);
 
-        //TODO HERE WE START FIXING!!!
-/*        JDIFieldVariable vars = (JDIFieldVariable) getThis().getField( "frameLocalVars",
-                                                                       false );
+             ObjectReferenceImpl valueImpl = (ObjectReferenceImpl) value;
 
-        JDIObjectValue val = (JDIObjectValue) vars.getValue();
+             JDIFieldVariable var = new JDIFieldVariable((JDIDebugTarget)getDebugTarget(), varsField, valueImpl);
 
-        try {
+             System.out.println("Got Value for Stack Frame!!: "+value+" with impl class "+value.getClass());
 
-            System.out.println( "Trying to get the map values" );
+             result.add(var);
+             */
 
-            //            System.out.println("Declating type222 is "+vars.getDeclaringType());
-            //System.out.println("VAL type is "+vars.getReferenceType();
+            //TODO HERE WE START FIXING!!!
+            /*        JDIFieldVariable vars = (JDIFieldVariable) getThis().getField( "frameLocalVars",
+             false );
 
-            ObjectReference mapObj = ((JDIObjectValue) vars.getValue()).getUnderlyingObject();
-            ReferenceType t = mapObj.referenceType();
+             JDIObjectValue val = (JDIObjectValue) vars.getValue();
 
-            List allmethods = t.allMethods();
+             try {
 
-            Method m2 = (Method) t.methodsByName( "entrySet" ).iterator().next();
+             System.out.println( "Trying to get the map values" );
 
-            System.out.println( "Got method " + m2 );
+             //            System.out.println("Declating type222 is "+vars.getDeclaringType());
+             //System.out.println("VAL type is "+vars.getReferenceType();
 
-            ThreadReference thread = ((DroolsThread) getThread()).getUnderlyingThread();
-            System.out.println( ". thread is . " + thread.getClass() + "; " + thread );
-            Value mapentries = mapObj.invokeMethod( thread,
-                                                    m2,
-                                                    new ArrayList(),
-                                                    0 );
+             ObjectReference mapObj = ((JDIObjectValue) vars.getValue()).getUnderlyingObject();
+             ReferenceType t = mapObj.referenceType();
 
-            //ObjectReference iteratorObj = ((JDIObjectValue)mapentries).getUnderlyingObject();
-            ObjectReferenceImpl entries = (ObjectReferenceImpl) mapentries;
+             List allmethods = t.allMethods();
 
-            Method m3 = (Method) entries.referenceType().methodsByName( "iterator" ).iterator().next();
-            Value iter = entries.invokeMethod( thread,
-                                               m3,
-                                               new ArrayList(),
-                                               0 );
+             Method m2 = (Method) t.methodsByName( "entrySet" ).iterator().next();
 
-                         Method m2 = (Method) t.methodsByName( "i" ).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;
+             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,
-                                                   "label1" );
-            IVariable var2 = new MVELThisVariable( getJavaDebugTarget(),
-                                                   valueImpl,
-                                                   "label2" );
-*/
+             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 );
-*/
+            /*            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();
+        }
+        IVariable[] vararr = (IVariable[]) result.toArray( new IVariable[result.size()] );
 
+        return vararr;
+    }
+
+    private boolean internalHasNext(Value iter) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException, InvocationException, DebugException {
+        BooleanValue hasNext = (BooleanValue) runMethod( iter,
+                                "hasNext" );
+        return hasNext.booleanValue();
+    }
+
+    private Value fetchField(Value factoryVar,
+                             String fieldName) throws ClassNotLoadedException, DebugException {
+        return fetchField((ObjectReference)factoryVar, fieldName );
+    }
+
+    private Value runMethod(Value val,
+                            String methodName) throws InvalidTypeException,
+                                              ClassNotLoadedException,
+                                              IncompatibleThreadStateException,
+                                              InvocationException, DebugException {
         
-        IVariable[] vararr = (IVariable[]) result.toArray( new IVariable[result.size()] );
+        recreateFrames();
+        
+        ObjectReference refObj = (ObjectReference) val;
+        ReferenceType t = refObj.referenceType();
+        Method m2 = (Method) t.methodsByName( methodName ).iterator().next();
+        ThreadReference thread = ((DroolsThread) getThread()).getUnderlyingThread();
 
-        System.out.println( "MVEL: Returning list of visible vars: count " + vararr.length );
+        Value res = refObj.invokeMethod( thread,
+                                            m2,
+                                            new ArrayList(),
+                                            0 );
+        recreateFrames();
+        
+        return res;
+    }
 
-        return vararr;
+    private Value fetchField(DroolsLocalVariable frameLocal,
+                             String fieldName) throws DebugException,
+                                              ClassNotLoadedException {
+        ObjectReference objRef = ((JDIObjectValue) frameLocal.getValue()).getUnderlyingObject();
+        return fetchField( objRef,
+                           fieldName );
     }
 
-    protected DroolsStackFrame createNewDroolsFrame(StackFrame frame, int depth) {
-        return new MVELStackFrame( (DroolsThread) getThread(), frame, depth );
+    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;
     }
 
+    protected DroolsStackFrame createNewDroolsFrame(StackFrame frame,
+                                                    int depth) {
+        return new MVELStackFrame( (DroolsThread) getThread(),
+                                   frame,
+                                   depth );
+    }
+
     public String getReceivingTypeName() throws DebugException {
         return "getReceivingTypeName";
     }
@@ -169,16 +268,30 @@
         return "getMethodName";
     }
 
-/*    public String getDeclaringTypeName() throws DebugException {
-        return "MVELRunner";
-    }
-*/
+    /*    public String getDeclaringTypeName() throws DebugException {
+     return "MVELRunner";
+     }
+     */
     public int getLineNumber() throws DebugException {
-/*        DRLInfo drlInfo = DroolsEclipsePlugin.getDefault().parseResource( marker.getResource(),
-                                                                          true );*/
-        System.out.println("MVEL: IN getLineNumber() LOCAL INFO LINE NR: " +
-        		getUnderlyingStackFrame().location().lineNumber());
-        return getUnderlyingStackFrame().location().lineNumber();
+        /*        DRLInfo drlInfo = DroolsEclipsePlugin.getDefault().parseResource( marker.getResource(),
+         true );*/
+
+        //RuleInfo ruleINF = getExecutingRuleInfo();
+        DroolsDebugTarget t = (DroolsDebugTarget) getDebugTarget();
+
+        int lineNr = getBreakpointLineNumber();
+        String sourceName = getMVELName();
+
+        DroolsLineBreakpoint bpoint = (DroolsLineBreakpoint) t.getDroolsBreakpoint( sourceName,
+                                                                                    lineNr );
+
+        if ( bpoint == null ) {
+            return -1;
+        }
+        int line;
+        line = bpoint.getDRLLineNumber();
+        return line;
+        //return getUnderlyingStackFrame().location().lineNumber();
     }
 
     public RuleInfo getExecutingRuleInfo() {
@@ -186,8 +299,6 @@
             String methodName = getMethodName();
             String signature = getSignature();
             String type = getDeclaringTypeName();
-            System.out.println( "MVEL: MVELStackFrame.getExecutingRuleInfo: RuleInfo type=" + type
-            		+ " methodName=" + methodName + " signature" + signature );
 
             return DroolsEclipsePlugin.getDefault().getRuleInfoByClass( type );
 
@@ -196,4 +307,107 @@
         }
         return null;
     }
+
+    public int getBreakpointLineNumber() {
+        try {
+            Object o = getRemoteVar( "lineNumber" );
+            if ( o == null ) {
+                return -1;
+            }
+            //getLineNumber
+            IntegerValue val = (IntegerValue) o;
+            return val.value();
+        } catch ( Throwable e ) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return -1;
+    }
+
+    public String getMVELName() {
+        try {
+            Object rem = getRemoteVar( "sourceName" );
+            if ( rem == null ) {
+                return null;
+            }
+            //getSourceName
+            StringReference res = (StringReference) rem;
+            return res.value();
+        } catch ( Throwable e ) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
+    private Object getRemoteVar(String methodName) throws AbsentInformationException,
+                                                  ClassNotLoadedException,
+                                                  DebugException,
+                                                  InvalidTypeException,
+                                                  IncompatibleThreadStateException,
+                                                  InvocationException {
+        //frame arg
+        Method method = getUnderlyingMethod(); // onBreak
+        ReferenceType declaringType = method.declaringType(); // org.drools.base.mvel.MVELDebugHandler
+
+        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 );
+        
+        IValue value = jdivar.getValue();
+        if (value instanceof JDINullValue) {
+            return null;
+        }
+        ObjectReference o = (ObjectReference) ((JDIObjectValue)value).getUnderlyingObject();
+        
+        if ( o == null ) {
+            return null;
+        }
+        Field field = frameType.fieldByName( methodName );
+        Value val = o.getValue( field );
+
+        return val;
+    }
+
+    public String getSourceName() throws DebugException {
+        return getMVELName();
+    }
+
+    public String getSourcePath() throws DebugException {
+        return "";
+    }
+    
+    private void recreateFrames() throws DebugException {
+        DroolsThread thr = (DroolsThread) getThread();
+        thr.computeNewStackFrames();
+    }
+
 }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/DialectDeterminator.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/DialectDeterminator.java	2007-07-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/DialectDeterminator.java	2007-07-16 20:12:08 UTC (rev 13558)
@@ -2,11 +2,11 @@
 
 import java.util.List;
 
+import org.drools.compiler.Dialect;
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.DroolsParserException;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.lang.descr.RuleDescr;
-import org.drools.rule.builder.Dialect;
 
 public class DialectDeterminator {
 

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java	2007-07-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java	2007-07-16 20:12:08 UTC (rev 13558)
@@ -8,6 +8,7 @@
 import java.util.Map;
 
 import org.drools.base.ClassTypeResolver;
+import org.drools.compiler.Dialect;
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.DroolsParserException;
 import org.drools.compiler.PackageBuilderConfiguration;
@@ -28,7 +29,6 @@
 import org.drools.lang.descr.PackageDescr;
 import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.RuleDescr;
-import org.drools.rule.builder.Dialect;
 import org.drools.util.asm.ClassFieldInspector;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.ITextViewer;

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/DroolsSourceLookupDirector.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/DroolsSourceLookupDirector.java	2007-07-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/DroolsSourceLookupDirector.java	2007-07-16 20:12:08 UTC (rev 13558)
@@ -6,7 +6,7 @@
 public class DroolsSourceLookupDirector extends AbstractSourceLookupDirector {
 
 	public void initializeParticipants() {
-		addParticipants(new ISourceLookupParticipant[]{new DroolsSourceLookupParticipant(), new MVELSourceLookupParticipant()} );
+		addParticipants(new ISourceLookupParticipant[]{new MVELSourceLookupParticipant(), new DroolsSourceLookupParticipant()} );
 	}
 
 }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/DroolsSourceLookupParticipant.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/DroolsSourceLookupParticipant.java	2007-07-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/DroolsSourceLookupParticipant.java	2007-07-16 20:12:08 UTC (rev 13558)
@@ -13,7 +13,6 @@
 			RuleInfo ruleInfo = ((DroolsStackFrame) object).getExecutingRuleInfo();
 			if (ruleInfo != null) {
                 String p = ruleInfo.getSourcePathName();
-                System.out.println("MVEL: DroolsSourceLookupParticipant.getSourceName retuning path:" +  p);
 				return p;
 			}
 			FunctionInfo functionInfo = ((DroolsStackFrame) object).getExecutingFunctionInfo();

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/MVELSourceLookupParticipant.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/MVELSourceLookupParticipant.java	2007-07-16 19:46:38 UTC (rev 13557)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/launching/MVELSourceLookupParticipant.java	2007-07-16 20:12:08 UTC (rev 13558)
@@ -20,27 +20,28 @@
 
 	public Object[] findSourceElements(Object object) throws CoreException {
 		//MVEL:Logging
-	    System.out.println("MVEL: MVELSourceLookupParticipant.findSourceElements with:" + object);
 	    if (object instanceof MVELStackFrame) {
 	        MVELStackFrame frame = (MVELStackFrame) object;
+
+            int lineNumber = frame.getBreakpointLineNumber();
+            String mvelName = frame.getMVELName();
+            
 	        IDebugTarget target = frame.getDebugTarget();
 	        if (target instanceof DroolsDebugTarget) {
 	            DroolsDebugTarget droolsTarget = (DroolsDebugTarget)target;
-	            System.out.println("MVEL: Returning breakpoint as source element");
-	            return new Object[] {droolsTarget.getFirstDroolsBreakpoint()};
+	            Object bpoint = droolsTarget.getDroolsBreakpoint(mvelName, lineNumber);
+                return new Object[] {bpoint};
 	        }
 	    }
 	    return null;
 	}
 
 	public String getSourceName(Object object) throws CoreException {
-		System.out.println("MVEL: MVELSourceLookupParticipant.getSourceName with:" + object);
 		if (object instanceof MVELStackFrame) {
 			MVELStackFrame frame = (MVELStackFrame) object;
 			RuleInfo ruleInfo = frame.getExecutingRuleInfo();
 			if (ruleInfo != null) {
                 String sourcePath = ruleInfo.getSourcePathName();
-                System.out.println("MVEL: DroolsSourceLookupParticipant.getSourceName retuning path:" +  sourcePath);
 				return sourcePath;
 			}
 			FunctionInfo functionInfo = frame.getExecutingFunctionInfo();




More information about the jboss-svn-commits mailing list