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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Aug 29 14:05:08 EDT 2007


Author: ahtik
Date: 2007-08-29 14:05:08 -0400 (Wed, 29 Aug 2007)
New Revision: 14736

Modified:
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsDebugTarget.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsLineBreakpoint.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/IDroolsDebugConstants.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/MVELStackFrame.java
Log:
JBRULES-1120: Added support for multiple-rule stepover for MVEL Debugger

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsDebugTarget.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsDebugTarget.java	2007-08-29 17:28:28 UTC (rev 14735)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsDebugTarget.java	2007-08-29 18:05:08 UTC (rev 14736)
@@ -760,19 +760,20 @@
     public DroolsLineBreakpoint getDroolsBreakpoint(String source,
                                       int line) {
         
+        
         DroolsLineBreakpoint backupBreakpoint = null;
         
         Iterator iterator = getBreakpoints().iterator();
         while ( iterator.hasNext() ) {
             IJavaBreakpoint element = (IJavaBreakpoint) iterator.next();
-            if ( element instanceof DroolsLineBreakpoint ) {
+            if ( element instanceof DroolsLineBreakpoint  && ((DroolsLineBreakpoint)element).getDialectName().equals( MVELDialect.ID )) {
                 DroolsLineBreakpoint l = (DroolsLineBreakpoint) element;
                 try {
 
                     if ( l == null || source == null ) {
                         return null;
                     }
-                    
+
                     int matchLine = l.getLineNumber();
                     String matchSource = l.getRuleName();
                     if ( matchLine == line && source.equals( matchSource ) ) {
@@ -780,13 +781,8 @@
                     }
                     
                     // Prepare for a backup breakpoint
-                    if (source.equals( matchSource )) {
-                        
-                        if (l.getLineNumber()<line &&
-                                ((backupBreakpoint==null) ||        
-                                (backupBreakpoint!=null && l.getLineNumber()<backupBreakpoint.getLineNumber()))) {
-                            backupBreakpoint = l;
-                        }
+                    if (source.equals( matchSource ) || l.getFileRuleMappings().containsKey( source )) {
+                        backupBreakpoint = l;
                     }
                     
                 } catch ( CoreException e ) {
@@ -794,7 +790,7 @@
                 }
             }
         }
-        
+
         return backupBreakpoint;
     }
 

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsLineBreakpoint.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsLineBreakpoint.java	2007-08-29 17:28:28 UTC (rev 14735)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsLineBreakpoint.java	2007-08-29 18:05:08 UTC (rev 14736)
@@ -62,6 +62,11 @@
         return getMarker().getAttribute( DIALECT, "Unknown");
     }
     
+    public Map getFileRuleMappings() {
+        String packedInfo = getMarker().getAttribute( IDroolsDebugConstants.DRL_RULES, "");
+        return unpackRuleMapping( packedInfo );
+    }
+
     public void setJavaBreakpointProperties() throws CoreException {
         IMarker marker = getMarker();
         int drlLineNumber = getDRLLineNumber();
@@ -69,6 +74,20 @@
             try {
                 DRLInfo drlInfo = DroolsEclipsePlugin.getDefault().parseResource( marker.getResource(), true );
 
+                RuleInfo[] ruleInfos = drlInfo.getRuleInfos();
+                
+                StringBuilder rb = new StringBuilder();
+                for (int i=0;i<ruleInfos.length; i++) {
+                    int line = ruleInfos[i].getConsequenceDrlLineNumber();
+                    String ruleid = ruleInfos[i].getClassName()+":"+line;
+                    rb.append(ruleid);
+                    if (i<ruleInfos.length-1) {
+                        rb.append(";");
+                    }
+                }
+                
+                marker.setAttribute( IDroolsDebugConstants.DRL_RULES, rb.toString());
+                
                 marker.setAttribute( TYPE_NAME, getRuleClassName( drlInfo, marker.getResource().toString(), drlLineNumber ) );
                 int ruleLineNumber = getRuleLineNumber( drlInfo, marker.getResource().toString(), drlLineNumber );
                 marker.setAttribute( IMarker.LINE_NUMBER, ruleLineNumber );
@@ -139,4 +158,17 @@
         return null;
     }
 
+    private final static Map unpackRuleMapping(String input) {
+        Map map = new HashMap();
+        String[] rules = input.split( "\\;");
+        for (int i=0; i<rules.length; i++) {
+            if (rules[i].length()>0) {
+                String[] inf = rules[i].split( "\\:" );
+                map.put( inf[0], Integer.valueOf( inf[1] ) );
+            }
+        }
+        return map;
+    }
+
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/IDroolsDebugConstants.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/IDroolsDebugConstants.java	2007-08-29 17:28:28 UTC (rev 14735)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/IDroolsDebugConstants.java	2007-08-29 18:05:08 UTC (rev 14736)
@@ -6,5 +6,10 @@
 	String DROOLS_MARKER_TYPE = "org.drools.eclipse.droolsBreakpointMarker";
 	String DRL_LINE_NUMBER = "Drools_DRL_LineNumber";
 	String LAUNCH_CONFIGURATION_TYPE = "org.drools.eclipse.launching.DroolsLaunchConfigurationDelegate";
-	
+    
+    /**
+     * com.package.HelloWorld:14;com.package.GoodBye:7 style of packed rule info. int is the linenumber at the drl. 
+     */
+    String DRL_RULES = "org.drools.eclipse.debug.DRL_RULES";
+
 }

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/MVELStackFrame.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/MVELStackFrame.java	2007-08-29 17:28:28 UTC (rev 14735)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/MVELStackFrame.java	2007-08-29 18:05:08 UTC (rev 14736)
@@ -291,17 +291,25 @@
         }
 
         int line;
-        line = bpoint.getDRLLineNumber();
+        
+        try {
+            line = Integer.parseInt(bpoint.getFileRuleMappings().get( sourceName ).toString());
+        } catch (Throwable t2) {
+            DroolsEclipsePlugin.log( t2 );
+            return -1;
+        }
 
         int fragmentLine = getBreakpointLineNumber(); // 4->5 for step over
 
-        int delta = 0;
+        
+/*        int delta = 0;
         try {
             delta = fragmentLine - bpoint.getLineNumber();
         } catch ( CoreException e ) {
             DroolsEclipsePlugin.log( e );
         }
-        return line + delta;
+*/        int res = line + fragmentLine;
+        return res;
     }
 
     public RuleInfo getExecutingRuleInfo() {




More information about the jboss-svn-commits mailing list