[jboss-svn-commits] JBL Code SVN: r26430 - labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/core.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri May 8 07:43:20 EDT 2009


Author: mark.proctor at jboss.com
Date: 2009-05-08 07:43:20 -0400 (Fri, 08 May 2009)
New Revision: 26430

Modified:
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/core/DroolsDebugTarget.java
Log:
-moved from methodentryevent to breakpoint event

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/core/DroolsDebugTarget.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/core/DroolsDebugTarget.java	2009-05-08 10:12:55 UTC (rev 26429)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/core/DroolsDebugTarget.java	2009-05-08 11:43:20 UTC (rev 26430)
@@ -25,6 +25,7 @@
 
 import com.sun.jdi.ClassType;
 import com.sun.jdi.IntegerValue;
+import com.sun.jdi.Location;
 import com.sun.jdi.Method;
 import com.sun.jdi.ObjectCollectedException;
 import com.sun.jdi.ObjectReference;
@@ -33,6 +34,7 @@
 import com.sun.jdi.ThreadReference;
 import com.sun.jdi.VMDisconnectedException;
 import com.sun.jdi.VirtualMachine;
+import com.sun.jdi.event.BreakpointEvent;
 import com.sun.jdi.event.ClassPrepareEvent;
 import com.sun.jdi.event.Event;
 import com.sun.jdi.event.EventSet;
@@ -40,6 +42,7 @@
 import com.sun.jdi.event.ThreadDeathEvent;
 import com.sun.jdi.event.ThreadStartEvent;
 import com.sun.jdi.event.VMStartEvent;
+import com.sun.jdi.request.BreakpointRequest;
 import com.sun.jdi.request.ClassPrepareRequest;
 import com.sun.jdi.request.EventRequest;
 import com.sun.jdi.request.EventRequestManager;
@@ -654,13 +657,13 @@
 
         protected MVELTraceHandler() {
             createRequest();
-        }
+        }        
 
         protected void createRequest() {
             EventRequestManager manager = getEventRequestManager();
             if ( manager != null ) {
                 try {
-                    ClassPrepareRequest req = manager.createClassPrepareRequest();
+                	ClassPrepareRequest req = manager.createClassPrepareRequest();
                     req.addClassFilter( "org.drools.base.mvel.MVELDebugHandler" );
                     req.setSuspendPolicy( EventRequest.SUSPEND_ALL );
                     addJDIEventListener( MVELTraceHandler.this,
@@ -685,10 +688,30 @@
          */
         public boolean handleEvent(Event event,
                                    JDIDebugTarget target) {
-            String name = ((ClassPrepareEvent) event).referenceType().name();
+        	ClassType classType = ( ClassType ) ((ClassPrepareEvent) event).referenceType();
+            String name = classType.name();            
 
-            MethodEntryRequest req = getEventRequestManager().createMethodEntryRequest();
-            req.addClassFilter( ((ClassPrepareEvent) event).referenceType() );
+            // change this to create a breakpoint, as the method enter was too slow
+            BreakpointRequest req = null;
+            List list = classType.methodsByName( "onBreak" );
+            if (  list.size() == 0 ) {
+            	throw new IllegalStateException( "MVELDebugHandler.onBreak cannot be found by JDI" );
+            }
+            
+            Method method = ( Method ) list.get( 0 );
+            if (method != null && !method.isNative()) {
+	            Location location = method.location();
+	            if (location != null && location.codeIndex() != -1) {
+	            	req = getEventRequestManager().createBreakpointRequest(location);
+	                req.addThreadFilter( ((ClassPrepareEvent) event).thread() );
+	                req.setSuspendPolicy( EventRequest.SUSPEND_ALL  );
+	            } else {
+	            	throw new IllegalStateException( "MVELDebugHandler.onBreak location cannot be found by JDI" );
+	            }
+            }	else {
+            	throw new IllegalStateException( "MVELDebugHandler.onBreak cannot be found by JDI" );
+            }
+            
 
             //breakpointCatched
 
@@ -696,17 +719,14 @@
              Field field;
              EventRequest req= manager.createModificationWatchpointRequest(field);
              */
-            req.setSuspendPolicy( EventRequest.SUSPEND_EVENT_THREAD );
+            //req.setSuspendPolicy( EventRequest.SUSPEND_EVENT_THREAD );
 			addJDIEventListener(new IJDIEventListener() {
 
 				public boolean handleEvent(Event event, JDIDebugTarget target) {
-					MethodEntryEvent entryEvent = (MethodEntryEvent) event;
-					String name2 = entryEvent.method().name();
-					if (!name2.equals("onBreak")
-							&& !name2.equals("receiveBreakpoints")) {
-						// event.virtualMachine().resume();
-						return true;
-					}
+					BreakpointEvent entryEvent = (BreakpointEvent) event;
+					
+					System.out.println( entryEvent + ":" + entryEvent.location() );
+
 					try {
 						IThread[] tharr = getThreads();
 						ThreadReference t = null;
@@ -743,7 +763,10 @@
 
 			}, req);
 
-            req.enable();
+            req.enable();            
+            
+            // now remove the ClassPrepareEvent
+            removeJDIEventListener(MVELTraceHandler.this, ((ClassPrepareEvent) event).request() );
 
             return true;
         }




More information about the jboss-svn-commits mailing list