[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