[jboss-svn-commits] JBL Code SVN: r12964 - in labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools: lang/descr and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Jun 30 17:10:07 EDT 2007


Author: ahtik
Date: 2007-06-30 17:10:06 -0400 (Sat, 30 Jun 2007)
New Revision: 12964

Added:
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDebugger.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELRuleClassBuilder.java
Modified:
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java
   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/mvel/MVELConsequenceBuilder.java
   labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
Log:
work in progress debugger code

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java	2007-06-30 17:19:41 UTC (rev 12963)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java	2007-06-30 21:10:06 UTC (rev 12964)
@@ -153,6 +153,7 @@
                 registry.addDialect( dialectName,
                                      (Dialect) cons.newInstance( new Object[]{packageBuilder} ) );
             } catch ( Exception e ) {
+                e.printStackTrace();
                 throw new RuntimeDroolsException( "Unable to load dialect '" + dialectClass + ":" + dialectName + "'" );
             }
         }

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java	2007-06-30 17:19:41 UTC (rev 12963)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java	2007-06-30 21:10:06 UTC (rev 12964)
@@ -20,6 +20,8 @@
 import java.util.Collections;
 import java.util.List;
 
+import org.drools.rule.builder.Dialect;
+
 public class RuleDescr extends BaseDescr {
     /**
      * 
@@ -38,11 +40,14 @@
 
     private String            className;
 
+    private Dialect           dialect;
+    
     public RuleDescr(final String name) {
         this( name,
               "" );
     }
 
+    
     public RuleDescr(final String ruleName,
                      final String documentation) {
         this.name = ruleName;
@@ -125,4 +130,14 @@
     public int getConsequencePattern() {
         return this.consequencePattern;
     }
+
+
+    public void setDialect(Dialect dialect) {
+        this.dialect = dialect;
+    }
+
+
+    public Dialect getDialect() {
+        return dialect;
+    }
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java	2007-06-30 17:19:41 UTC (rev 12963)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java	2007-06-30 21:10:06 UTC (rev 12964)
@@ -11,6 +11,9 @@
 import org.drools.rule.Package;
 
 public interface Dialect {
+    
+    String getId();
+    
     // this is needed because some dialects use other dialects
     // to build complex expressions. Example: java dialect uses MVEL
     // to execute complex expressions 

Modified: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java	2007-06-30 17:19:41 UTC (rev 12963)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java	2007-06-30 21:10:06 UTC (rev 12964)
@@ -119,8 +119,9 @@
                        ruleDescr.getAttributes() );
 
         this.dialectRegistry = dialectRegistry;
-        this.dialect = (this.rule.getDialect() != null) ? this.dialectRegistry.getDialect( this.rule.getDialect() ) : defaultDialect;
+		this.dialect = (this.rule.getDialect() != null) ? this.dialectRegistry.getDialect( this.rule.getDialect() ) : defaultDialect;
 
+        getDialect().init( pkg );
         getDialect().init( ruleDescr );
     }
 

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-06-30 17:19:41 UTC (rev 12963)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java	2007-06-30 21:10:06 UTC (rev 12964)
@@ -8,6 +8,7 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.drools.RuntimeDroolsException;
 import org.drools.base.ClassFieldExtractorCache;
 import org.drools.base.TypeResolver;
 import org.drools.commons.jci.compilers.CompilationResult;
@@ -64,6 +65,8 @@
     implements
     Dialect {
 
+    public static final String ID = "JavaDialect";
+    
     private final static String            EXPRESSION_DIALECT_NAME = "MVEL";
     // builders
     private final PatternBuilder           pattern                 = new PatternBuilder();
@@ -120,7 +123,7 @@
 
         loadCompiler();
     }
-
+    
     public void initBuilder() {
         // statically adding all builders to the map
         // but in the future we can move that to a configuration
@@ -168,6 +171,7 @@
     }
 
     public void init(final Package pkg) {
+
         this.pkg = pkg;
         this.errorHandlers = new HashMap();
         this.results = new ArrayList();
@@ -183,8 +187,7 @@
 
         this.packageStoreWrapper = new PackageStore( pkg.getPackageCompilationData(),
                                                      this.results );
-        this.lineMappings = new HashMap();
-        pkg.getPackageCompilationData().setLineMappings( this.lineMappings );
+        
     }
 
     public void init(final RuleDescr ruleDescr) {
@@ -193,6 +196,7 @@
                                                          "java",
                                                          this.src );
         ruleDescr.setClassName( ucFirst( ruleClassName ) );
+        ruleDescr.setDialect( this );
     }
 
     public void setRuleClass(final String ruleClass) {
@@ -516,12 +520,14 @@
     /**
      * Takes a given name and makes sure that its legal and doesn't already exist. If the file exists it increases counter appender untill it is unique.
      * 
+     * TODO Consider "move" refactoring
+     * 
      * @param packageName
      * @param name
      * @param ext
      * @return
      */
-    private String getUniqueLegalName(final String packageName,
+    public static String getUniqueLegalName(final String packageName,
                                       final String name,
                                       final String ext,
                                       final ResourceReader src) {
@@ -548,8 +554,18 @@
         return newName;
     }
 
-    private String ucFirst(final String name) {
+    /**
+     * TODO Consider "move" refactoring
+     * 
+     * @param name
+     * @return
+     */
+    public static String ucFirst(final String name) {
         return name.toUpperCase().charAt( 0 ) + name.substring( 1 );
     }
 
+    public String getId() {
+        return ID;
+    }
+
 }

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-06-30 17:19:41 UTC (rev 12963)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java	2007-06-30 21:10:06 UTC (rev 12964)
@@ -12,7 +12,8 @@
 import org.drools.rule.builder.RuleBuildContext;
 import org.drools.spi.KnowledgeHelper;
 import org.mvel.ASTNode;
-import org.mvel.MVEL;
+import org.mvel.CompiledExpression;
+import org.mvel.ExpressionCompiler;
 import org.mvel.Macro;
 import org.mvel.MacroProcessor;
 import org.mvel.ast.WithNode;
@@ -76,9 +77,18 @@
             MacroProcessor macroProcessor = new MacroProcessor();
             macroProcessor.setMacros( macros );
             
-            final Serializable expr = MVEL.compileExpression( macroProcessor.parse( delimitExpressions( (String) context.getRuleDescr().getConsequence() )),
-                                                              ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses(), this.interceptors );
+            
 
+            String pkg = "";
+            if (context.getPkg()!=null && context.getPkg().getName()!=null && context.getPkg().getName().length()>0) {
+                pkg = context.getPkg().getName()+".";
+            }
+            
+            String sourceFile = pkg+context.getRuleDescr().getClassName();
+            
+            final Serializable expr = compileExpression( macroProcessor.parse( delimitExpressions( (String) context.getRuleDescr().getConsequence() )),
+                                                              ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses(), this.interceptors , sourceFile);
+            
             context.getRule().setConsequence( new MVELConsequence( expr,
                                                                    factory ) );
         } catch ( final Exception e ) {
@@ -182,4 +192,16 @@
         }
     }
 
+    
+    public static Serializable compileExpression(String expression, Map imports,
+                                                 Map interceptors, String sourceName) {
+        ExpressionCompiler parser = new ExpressionCompiler(expression);
+        parser.setImportedClasses(imports);
+        parser.setInterceptors(interceptors);
+        parser.setSourceFile(sourceName);
+        parser.setDebugSymbols( true );
+        CompiledExpression cExpr = parser.compile();
+        return cExpr;
+    }
+
 }

Added: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDebugger.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDebugger.java	                        (rev 0)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDebugger.java	2007-06-30 21:10:06 UTC (rev 12964)
@@ -0,0 +1,18 @@
+package org.drools.rule.builder.dialect.mvel;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class MVELDebugger {
+    
+    public Map frameLocalVars = new HashMap();
+    
+    public MVELDebugger() {
+        frameLocalVars.put( "hei", "houi" );
+    }
+    
+    public void fireBreakpoint() {
+        System.out.println("breakpoint catched");
+    }
+    
+}

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-06-30 17:19:41 UTC (rev 12963)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java	2007-06-30 21:10:06 UTC (rev 12964)
@@ -9,6 +9,7 @@
 
 import org.drools.base.ClassFieldExtractorCache;
 import org.drools.base.TypeResolver;
+import org.drools.commons.jci.readers.MemoryResourceReader;
 import org.drools.compiler.ImportError;
 import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.PackageBuilderConfiguration;
@@ -25,7 +26,9 @@
 import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.QueryDescr;
 import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.LineMappings;
 import org.drools.rule.Package;
+import org.drools.rule.Rule;
 import org.drools.rule.builder.AccumulateBuilder;
 import org.drools.rule.builder.ConsequenceBuilder;
 import org.drools.rule.builder.Dialect;
@@ -39,7 +42,21 @@
 import org.drools.rule.builder.RuleClassBuilder;
 import org.drools.rule.builder.RuleConditionBuilder;
 import org.drools.rule.builder.SalienceBuilder;
+import org.drools.rule.builder.dialect.java.DeclarationTypeFixer;
+import org.drools.rule.builder.dialect.java.JavaAccumulateBuilder;
+import org.drools.rule.builder.dialect.java.JavaConsequenceBuilder;
+import org.drools.rule.builder.dialect.java.JavaDialect;
+import org.drools.rule.builder.dialect.java.JavaEvalBuilder;
+import org.drools.rule.builder.dialect.java.JavaExprAnalyzer;
+import org.drools.rule.builder.dialect.java.JavaFunctionBuilder;
+import org.drools.rule.builder.dialect.java.JavaPredicateBuilder;
+import org.drools.rule.builder.dialect.java.JavaReturnValueBuilder;
+import org.drools.rule.builder.dialect.java.JavaRuleClassBuilder;
+import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
+import org.drools.rule.builder.dialect.java.PackageStore;
 import org.mvel.AbstractParser;
+import org.mvel.AbstractParser;
+import org.mvel.AbstractParser;
 import org.mvel.integration.impl.ClassImportResolverFactory;
 import org.mvel.integration.impl.StaticMethodImportResolverFactory;
 
@@ -47,10 +64,14 @@
     implements
     Dialect {
 
+    public final static String                     ID = "MVELDialect";
+
     private final static String                     EXPRESSION_DIALECT_NAME = "MVEL";
 
-    private final PatternBuilder                    pattern                 = new PatternBuilder();
-    private final QueryBuilder                      query                   = new QueryBuilder();
+    private final MVELRuleClassBuilder     rule         = new MVELRuleClassBuilder();
+    
+    private final PatternBuilder                    pattern     = new PatternBuilder( );
+    private final QueryBuilder             query        = new QueryBuilder();    
     private final MVELAccumulateBuilder             accumulate              = new MVELAccumulateBuilder();
     private final SalienceBuilder                   salience                = new MVELSalienceBuilder();
     private final MVELEvalBuilder                   eval                    = new MVELEvalBuilder();
@@ -60,9 +81,13 @@
     //private final JavaRuleClassBuilder            rule        = new JavaRuleClassBuilder();
     private final MVELFromBuilder                   from                    = new MVELFromBuilder();
 
+    private Map                            lineMappings;
+
     private List                                    results;
     //private final JavaFunctionBuilder             function    = new JavaFunctionBuilder();
 
+    private MemoryResourceReader           src;
+    
     private Package                                 pkg;
     private PackageBuilderConfiguration             configuration;
     private final TypeResolver                      typeResolver;
@@ -139,14 +164,29 @@
         this.builders.put( EvalDescr.class,
                            getEvalBuilder() );
     }
+    
+    public void init(Package pkg) {
 
-    public void init(Package pkg) {
         this.pkg = pkg;
+        
         this.results = new ArrayList();
+        this.src = new MemoryResourceReader();
+        
+        if ( pkg != null ) {
+            this.lineMappings = pkg.getPackageCompilationData().getLineMappings();
+        }
 
     }
 
     public void init(RuleDescr ruleDescr) {
+        
+        System.out.println("Init from MVELDialect called to ruleDescr "+ruleDescr);
+        final String ruleClassName = JavaDialect.getUniqueLegalName( this.pkg.getName(),
+                                                         ruleDescr.getName(),
+                                                         "mvel",
+                                                         this.src );
+        ruleDescr.setClassName( JavaDialect.ucFirst( ruleClassName ) );
+        ruleDescr.setDialect( this );
     }
 
     public String getExpressionDialectName() {
@@ -155,6 +195,17 @@
 
     public void addRule(RuleBuildContext context) {
 
+        final RuleDescr ruleDescr = context.getRuleDescr();
+
+        // setup the line mappins for this rule
+        final String name = this.pkg.getName() + "." + JavaDialect.ucFirst( ruleDescr.getClassName() );
+        final LineMappings mapping = new LineMappings( name );
+        mapping.setStartLine( ruleDescr.getConsequenceLine() );
+        mapping.setOffset( ruleDescr.getConsequenceOffset() );
+        System.out.println("Adding mvel mappings for "+name+"; "+mapping.getStartLine());
+        this.lineMappings.put( name,
+                               mapping );
+
     }
 
     public void addImport(String importEntry) {
@@ -295,11 +346,15 @@
     }
 
     public RuleClassBuilder getRuleClassBuilder() {
-        return null;
+        return rule;
     }
 
     public TypeResolver getTypeResolver() {
         return this.typeResolver;
     }
 
+    public String getId() {
+        return ID;
+    }
+
 }

Added: labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELRuleClassBuilder.java
===================================================================
--- labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELRuleClassBuilder.java	                        (rev 0)
+++ labs/jbossrules/branches/mvel-tooling-2007-06-30/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELRuleClassBuilder.java	2007-06-30 21:10:06 UTC (rev 12964)
@@ -0,0 +1,35 @@
+package org.drools.rule.builder.dialect.mvel;
+
+import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.builder.RuleBuildContext;
+import org.drools.rule.builder.RuleClassBuilder;
+
+public class MVELRuleClassBuilder
+    implements
+    RuleClassBuilder {
+
+    /**
+     * No real building for now.
+     * Simply to update ruleDescr.setConsequenceOffset
+     */
+    public void buildRule(RuleBuildContext context) {
+        final MVELDialect dialect = (MVELDialect) context.getDialect();
+
+        final String lineSeparator = System.getProperty( "line.separator" );
+
+        final StringBuffer buffer = new StringBuffer();
+
+        final RuleDescr ruleDescr = context.getRuleDescr();
+
+/*        for ( int i = 0, size = context.getMethods().size() - 1; i < size; i++ ) {
+            buffer.append( context.getMethods().get( i ) + lineSeparator );
+        }
+
+        final String[] lines = buffer.toString().split( lineSeparator );
+*/
+        //ruleDescr.setConsequenceOffset( lines.length + 1 );
+        ruleDescr.setConsequenceOffset( 0);
+
+    }
+
+}




More information about the jboss-svn-commits mailing list