[jboss-svn-commits] JBL Code SVN: r8589 - in labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide: . core debug/core editors launching

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Dec 23 17:53:30 EST 2006


Author: KrisVerlaenen
Date: 2006-12-23 17:53:26 -0500 (Sat, 23 Dec 2006)
New Revision: 8589

Modified:
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DRLInfo.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DroolsIDEPlugin.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Package.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/debug/core/DroolsLineBreakpoint.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/debug/core/DroolsStackFrame.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DroolsLineBreakpointAdapter.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DroolsPairMatcher.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/launching/DroolsSourceLookupParticipant.java
Log:
JBRULES-342: interactive rule debugger
 - added support for debugging functions

Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DRLInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DRLInfo.java	2006-12-23 22:50:32 UTC (rev 8588)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DRLInfo.java	2006-12-23 22:53:26 UTC (rev 8589)
@@ -6,6 +6,7 @@
 import java.util.List;
 
 import org.drools.compiler.DroolsError;
+import org.drools.lang.descr.FunctionDescr;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.lang.descr.RuleDescr;
 import org.drools.rule.Package;
@@ -22,6 +23,7 @@
 	private DroolsError[] builderErrors;
 	// cached entry
 	private transient RuleInfo[] ruleInfos;
+	private transient FunctionInfo[] functionInfos;
 
 	public DRLInfo(String sourcePathName, PackageDescr packageDescr, List parserErrors) {
 		if (sourcePathName == null || "".equals(sourcePathName)) {
@@ -78,7 +80,7 @@
 	public RuleInfo[] getRuleInfos() {
 		if (ruleInfos == null) {
 			List ruleInfosList = new ArrayList();
-	        for ( Iterator rules = packageDescr.getRules().iterator(); rules.hasNext(); ) {
+	        for (Iterator rules = packageDescr.getRules().iterator(); rules.hasNext(); ) {
 	    		RuleDescr ruleDescr = (RuleDescr) rules.next();
 	    		RuleInfo ruleInfo = new RuleInfo(ruleDescr);
 	    		ruleInfosList.add(ruleInfo);
@@ -109,7 +111,6 @@
 		// cached entries
 		private transient String className;
 		private transient int consequenceJavaLineNumber = -1;
-		private transient String fullRuleName;
 		
 		public RuleInfo(RuleDescr ruleDescr) {
 			if (ruleDescr == null) {
@@ -159,14 +160,87 @@
 		public String getRuleName() {
 			return ruleDescr.getName();
 		}
+	}
 
-		public String getFullRuleName() {
-			if (fullRuleName == null) {
-				fullRuleName = getPackageName() + "." + ruleDescr.getName();
+	public FunctionInfo[] getFunctionInfos() {
+		if (functionInfos == null) {
+			List functionInfosList = new ArrayList();
+	        for (Iterator functions = packageDescr.getFunctions().iterator(); functions.hasNext(); ) {
+	    		FunctionDescr functionDescr = (FunctionDescr) functions.next();
+	    		FunctionInfo functionInfo = new FunctionInfo(functionDescr);
+	    		functionInfosList.add(functionInfo);
+	    	}
+	        functionInfos = (FunctionInfo[]) functionInfosList.toArray(new FunctionInfo[0]);
+		}
+		return functionInfos;
+	}
+	
+	public FunctionInfo getFunctionInfo(int drlLineNumber) {
+		FunctionInfo[] functionInfos = getFunctionInfos();
+		int functionLine = -1;
+		FunctionInfo result = null;
+		for (int i = 0; i < functionInfos.length; i++) {
+			int functionDrlLineNumber = functionInfos[i].getDrlLineNumber();
+			if (functionDrlLineNumber > functionLine
+					&& functionDrlLineNumber <= drlLineNumber + 1) {
+				functionLine = functionDrlLineNumber;
+				result = functionInfos[i];
 			}
-			return fullRuleName;
 		}
+		return result;
+	}
+	
+	public class FunctionInfo {
+		
+		private FunctionDescr functionDescr;
+		// cached entries
+		private transient String className;
+		private transient int javaLineNumber = -1;
+		
+		public FunctionInfo(FunctionDescr functionDescr) {
+			if (functionDescr == null) {
+				throw new IllegalArgumentException("Null functionDescr");
+			}
+			this.functionDescr = functionDescr;
+		}
 
+		public String getSourcePathName() {
+			return DRLInfo.this.getSourcePathName();
+		}
+
+		public String getClassName() {
+			// functionDescr is only filled in during compilation
+			if (!isCompiled()) {
+				throw new IllegalArgumentException("Package has not been compiled");
+			}
+			if (className == null) {
+	    		className = functionDescr.getClassName();
+			}
+			return className;
+		}
+
+		public int getDrlLineNumber() {
+			return functionDescr.getLine();
+		}
+
+		public int getJavaLineNumber() {
+			if (javaLineNumber == -1) {
+				if (!isCompiled()) {
+					throw new IllegalArgumentException("Package has not been compiled");
+				}
+				javaLineNumber = compiledPackage
+					.getPackageCompilationData().getLineMappings(className).getOffset();
+			}
+			return javaLineNumber;
+		}
+
+		public String getPackageName() {
+			return packageDescr.getName();
+		}
+
+		public String getFunctionName() {
+			return functionDescr.getName();
+		}
 	}
 
 }

Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DroolsIDEPlugin.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DroolsIDEPlugin.java	2006-12-23 22:50:32 UTC (rev 8588)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DroolsIDEPlugin.java	2006-12-23 22:53:26 UTC (rev 8589)
@@ -26,6 +26,7 @@
 import org.drools.compiler.DroolsParserException;
 import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.ide.DRLInfo.FunctionInfo;
 import org.drools.ide.DRLInfo.RuleInfo;
 import org.drools.ide.builder.DroolsBuilder;
 import org.drools.ide.builder.Util;
@@ -71,6 +72,7 @@
 	private Map parsedRules = new HashMap();
 	private Map compiledRules = new HashMap();
 	private Map ruleInfoByClassNameMap = new HashMap();
+	private Map functionInfoByClassNameMap = new HashMap();
 	private boolean useCachePreference;
 	
 	/**
@@ -96,6 +98,7 @@
 						parsedRules.clear();
 						compiledRules.clear();
 						ruleInfoByClassNameMap.clear();
+						functionInfoByClassNameMap.clear();
 					}
 				}
 			}
@@ -253,6 +256,10 @@
 			for (int i = 0; i < ruleInfos.length; i++) {
 				ruleInfoByClassNameMap.remove(ruleInfos[i].getClassName());
 			}
+			FunctionInfo[] functionInfos = cached.getFunctionInfos();
+			for (int i = 0; i < functionInfos.length; i++) {
+				functionInfoByClassNameMap.remove(functionInfos[i].getClassName());
+			}
 		}
 		parsedRules.remove(resource);
 	}
@@ -328,6 +335,10 @@
 	        			for (int i = 0; i < ruleInfos.length; i++) {
 	        				ruleInfoByClassNameMap.put(ruleInfos[i].getClassName(), ruleInfos[i]);
 	        			}
+	        			FunctionInfo[] functionInfos = result.getFunctionInfos();
+	        			for (int i = 0; i < functionInfos.length; i++) {
+	        				functionInfoByClassNameMap.put(functionInfos[i].getClassName(), functionInfos[i]);
+	        			}
 	    			} else {
     					parsedRules.put(resource, result);
 	    			}
@@ -346,4 +357,8 @@
 		return (RuleInfo) ruleInfoByClassNameMap.get(ruleClassName);
 	}
 
+	public FunctionInfo getFunctionInfoByClass(String functionClassName) {
+		return (FunctionInfo) functionInfoByClassNameMap.get(functionClassName);
+	}
+
 }

Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Package.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Package.java	2006-12-23 22:50:32 UTC (rev 8588)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Package.java	2006-12-23 22:53:26 UTC (rev 8589)
@@ -1,9 +1,7 @@
 package org.drools.ide.core;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 /**
  * This represents a package. 

Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/debug/core/DroolsLineBreakpoint.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/debug/core/DroolsLineBreakpoint.java	2006-12-23 22:50:32 UTC (rev 8588)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/debug/core/DroolsLineBreakpoint.java	2006-12-23 22:53:26 UTC (rev 8589)
@@ -5,6 +5,7 @@
 
 import org.drools.ide.DRLInfo;
 import org.drools.ide.DroolsIDEPlugin;
+import org.drools.ide.DRLInfo.FunctionInfo;
 import org.drools.ide.DRLInfo.RuleInfo;
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IResource;
@@ -34,8 +35,7 @@
 	 */
 	public DroolsLineBreakpoint(IResource resource, int lineNumber)
 			throws CoreException {
-   		super(resource, "", -1, /*getRuleClassName(resource, lineNumber), 
-			getRuleLineNumber(resource, lineNumber), */ -1, -1, 0, true, 
+   		super(resource, "", -1,  -1, -1, 0, true, 
 			createAttributesMap(lineNumber), IDroolsDebugConstants.DROOLS_MARKER_TYPE);
 	}
 	
@@ -70,6 +70,10 @@
 				if (ruleInfo != null) {
 					return ruleInfo.getClassName();
 				}
+				FunctionInfo functionInfo = drlInfo.getFunctionInfo(lineNumber);
+				if (functionInfo != null) {
+					return functionInfo.getClassName();
+				}
 			}
 			throw new CoreException(new Status(IStatus.ERROR, DroolsIDEPlugin.getUniqueIdentifier(), 0,
 				"Cannot determine ruleClassName for " + resource + " " + lineNumber, null));
@@ -90,6 +94,11 @@
 							+ (lineNumber - ruleInfo.getConsequenceDrlLineNumber());
 					}
 				}
+				FunctionInfo functionInfo = drlInfo.getFunctionInfo(lineNumber);
+				if (functionInfo != null) {
+					return functionInfo.getJavaLineNumber()
+						+ (lineNumber - functionInfo.getDrlLineNumber());
+				}
 			}
 			throw new CoreException(new Status(IStatus.ERROR, DroolsIDEPlugin.getUniqueIdentifier(), 0,
 				"Cannot determine ruleLineNumber for " + resource + " " + lineNumber, null));

Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/debug/core/DroolsStackFrame.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/debug/core/DroolsStackFrame.java	2006-12-23 22:50:32 UTC (rev 8588)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/debug/core/DroolsStackFrame.java	2006-12-23 22:53:26 UTC (rev 8589)
@@ -7,6 +7,7 @@
 import java.util.List;
 
 import org.drools.ide.DroolsIDEPlugin;
+import org.drools.ide.DRLInfo.FunctionInfo;
 import org.drools.ide.DRLInfo.RuleInfo;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
@@ -59,10 +60,7 @@
 	
 	public boolean isExecutingRule() {
 		try {
-			String methodName = getMethodName();
-			String signature = getSignature();
-			String type = getDeclaringTypeName();
-			if ("consequence".equals(methodName) && signature.startsWith(CONSEQUENCE_SIGNATURE)) {
+			if ("consequence".equals(getMethodName()) && getSignature().startsWith(CONSEQUENCE_SIGNATURE)) {
 				return true;
 			}
 		} catch (DebugException exc) {
@@ -85,13 +83,26 @@
 		return null;
 	}
 	
+	public FunctionInfo getExecutingFunctionInfo() {
+		try {
+			return DroolsIDEPlugin.getDefault()
+				.getFunctionInfoByClass(getDeclaringTypeName());
+		} catch (DebugException exc) {
+			DroolsIDEPlugin.log(exc);
+		}
+		return null;
+	}
+	
 	public int getLineNumber() throws DebugException {
 		synchronized (fThread) {
 			RuleInfo ruleInfo = getExecutingRuleInfo();
 			if (ruleInfo != null) {
 				return ruleInfo.getConsequenceDrlLineNumber() + (getInternalLineNumber() - ruleInfo.getConsequenceJavaLineNumber());
 			}
-			
+			FunctionInfo functionInfo = getExecutingFunctionInfo();
+			if (functionInfo != null) {
+				return functionInfo.getDrlLineNumber() + (getInternalLineNumber() - functionInfo.getJavaLineNumber());
+			}
 		}
 		return getInternalLineNumber();
 	}

Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DroolsLineBreakpointAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DroolsLineBreakpointAdapter.java	2006-12-23 22:50:32 UTC (rev 8588)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DroolsLineBreakpointAdapter.java	2006-12-23 22:53:26 UTC (rev 8589)
@@ -2,6 +2,7 @@
 
 import org.drools.ide.DRLInfo;
 import org.drools.ide.DroolsIDEPlugin;
+import org.drools.ide.DRLInfo.FunctionInfo;
 import org.drools.ide.DRLInfo.RuleInfo;
 import org.drools.ide.debug.core.DroolsLineBreakpoint;
 import org.drools.ide.debug.core.IDroolsDebugConstants;
@@ -32,6 +33,12 @@
 							return true;
 						}
 					}
+					FunctionInfo functionInfo = drlInfo.getFunctionInfo(lineNumber);
+					if (functionInfo != null) {
+						if (functionInfo.getDrlLineNumber() <= lineNumber) {
+							return true;
+						}
+					}
 				}
 			} catch (Throwable t) {
 				DroolsIDEPlugin.log(t);

Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DroolsPairMatcher.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DroolsPairMatcher.java	2006-12-23 22:50:32 UTC (rev 8588)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/DroolsPairMatcher.java	2006-12-23 22:53:26 UTC (rev 8589)
@@ -1,7 +1,5 @@
 package org.drools.ide.editors;
 
-import java.util.HashMap;
-import java.util.Map;
 import java.util.Stack;
 
 import org.drools.ide.DroolsIDEPlugin;

Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/launching/DroolsSourceLookupParticipant.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/launching/DroolsSourceLookupParticipant.java	2006-12-23 22:50:32 UTC (rev 8588)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/launching/DroolsSourceLookupParticipant.java	2006-12-23 22:53:26 UTC (rev 8589)
@@ -1,5 +1,6 @@
 package org.drools.ide.launching;
 
+import org.drools.ide.DRLInfo.FunctionInfo;
 import org.drools.ide.DRLInfo.RuleInfo;
 import org.drools.ide.debug.core.DroolsStackFrame;
 import org.eclipse.core.runtime.CoreException;
@@ -13,6 +14,10 @@
 			if (ruleInfo != null) {
 				return ruleInfo.getSourcePathName();
 			}
+			FunctionInfo functionInfo = ((DroolsStackFrame) object).getExecutingFunctionInfo();
+			if (functionInfo != null) {
+				return functionInfo.getSourcePathName();
+			}
 		}
 		return super.getSourceName(object);
 	}




More information about the jboss-svn-commits mailing list