[jboss-svn-commits] JBL Code SVN: r6069 - in labs/jbossrules/trunk/drools-compiler/src/main: java/org/drools/compiler java/org/drools/lang/descr java/org/drools/semantics/java resources/org/drools/semantics/java

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Sep 2 17:04:54 EDT 2006


Author: mark.proctor at jboss.com
Date: 2006-09-02 17:04:46 -0400 (Sat, 02 Sep 2006)
New Revision: 6069

Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FunctionDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/FunctionBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/semantics/java/javaFunction.stg
Log:
JBRULES-118 map generate code line numbers to drl line numbers
JBRULES-379 function with another drools function call won't compile (either with eclipse compiler or janino)

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2006-09-01 21:48:22 UTC (rev 6068)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2006-09-02 21:04:46 UTC (rev 6069)
@@ -308,7 +308,8 @@
             
         addClassCompileTask( this.pkg.getName() + "." + ucFirst( functionDescr.getName() ),
                              buidler.build( this.pkg,
-                                            functionDescr ),
+                                            functionDescr,
+                                            getFunctionFixer() ),
                              this.src,
                              new FunctionErrorHandler( functionDescr,
                                                        "Function Compilation error" ) );

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FunctionDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FunctionDescr.java	2006-09-01 21:48:22 UTC (rev 6068)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FunctionDescr.java	2006-09-02 21:04:46 UTC (rev 6069)
@@ -20,14 +20,18 @@
 import java.util.Collections;
 import java.util.List;
 
-public class FunctionDescr {
+public class FunctionDescr extends PatternDescr {
+    private static final long serialVersionUID = 320;
+    
     private final String name;
     private final String returnType;
-
+    
     private List         parameterTypes = Collections.EMPTY_LIST;
     private List         parameterNames = Collections.EMPTY_LIST;
 
     private String       text;
+    
+    private int      offset;
 
     public FunctionDescr(final String name,
                          final String returnType) {
@@ -71,4 +75,15 @@
     public String getText() {
         return this.text;
     }
+
+    public int getOffset() {
+        return this.offset;
+    }
+
+    public void setOffset(int offset) {
+        this.offset = offset;
+    }
+    
+    
+    
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/FunctionBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/FunctionBuilder.java	2006-09-01 21:48:22 UTC (rev 6068)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/FunctionBuilder.java	2006-09-02 21:04:46 UTC (rev 6069)
@@ -16,24 +16,30 @@
  * limitations under the License.
  */
 
+import java.io.BufferedReader;
+import java.io.IOException;
 import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
 
 import org.antlr.stringtemplate.StringTemplate;
 import org.antlr.stringtemplate.StringTemplateGroup;
 import org.antlr.stringtemplate.language.AngleBracketTemplateLexer;
+import org.drools.RuntimeDroolsException;
 import org.drools.lang.descr.FunctionDescr;
 import org.drools.rule.Package;
 
 public class FunctionBuilder {
     private static final StringTemplateGroup functionGroup = new StringTemplateGroup( new InputStreamReader( FunctionBuilder.class.getResourceAsStream( "javaFunction.stg" ) ),
-                                                                                AngleBracketTemplateLexer.class );
+                                                                                      AngleBracketTemplateLexer.class );
 
     public FunctionBuilder() {
 
     }
 
     public String build(final Package pkg,
-                        final FunctionDescr functionDescr) {
+                        final FunctionDescr functionDescr,
+                        final FunctionFixer fixer) {
         final StringTemplate st = FunctionBuilder.functionGroup.getInstanceOf( "function" );
 
         st.setAttribute( "package",
@@ -57,9 +63,29 @@
                          functionDescr.getParameterNames() );
 
         st.setAttribute( "text",
-                         functionDescr.getText() );
+                         fixer.fix( functionDescr.getText() ) );
+        
+        String text = st.toString();
+        
+        BufferedReader reader = new BufferedReader( new StringReader ( text ) );
+        String line = null;
+        String lineStartsWith = "    public static " + functionDescr.getReturnType( ) + " " + functionDescr.getName();
+        int offset = 0;
+        try {
+            while ( ( line = reader.readLine() ) != null ) {
+                offset++;
+                if ( line.startsWith( lineStartsWith ) ) {
+                    break;
+                }
+            }
+            functionDescr.setOffset( offset );
+        } catch ( IOException e ) {
+            // won't ever happen, it's just reading over a string.
+            throw new RuntimeDroolsException( "Error determining start offset with function" );
+        }
+        
 
-        return st.toString();
+        return text;
 
     }
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java	2006-09-01 21:48:22 UTC (rev 6068)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java	2006-09-02 21:04:46 UTC (rev 6069)
@@ -139,7 +139,7 @@
                                                                                               AngleBracketTemplateLexer.class );
 
     private static final KnowledgeHelperFixer knowledgeHelperFixer = new KnowledgeHelperFixer();
-    
+
     private final FunctionFixer               functionFixer;
 
     // @todo move to an interface so it can work as a decorator
@@ -477,8 +477,8 @@
             final Object object = fieldConstraintDescr.getRestrictions().get( 0 );
 
             final Restriction restriction = buildRestriction( extractor,
-                                                        fieldConstraintDescr,
-                                                        (RestrictionDescr) object );
+                                                              fieldConstraintDescr,
+                                                              (RestrictionDescr) object );
             if ( restriction == null ) {
                 // @todo log errors
                 return;
@@ -568,8 +568,8 @@
         }
 
         final Restriction restriction = buildRestriction( extractor,
-                                                    fieldConstraintDescr,
-                                                    currentRestriction );
+                                                          fieldConstraintDescr,
+                                                          currentRestriction );
         currentList.add( restriction );
 
         Restriction restrictions = null;
@@ -922,42 +922,17 @@
 
             for ( final Iterator iter = arguments.iterator(); iter.hasNext(); ) {
                 valueHandlers.add( buildValueHandler( (ArgumentValueDescr) iter.next() ) );
-                //                if ( desc.getType() == ArgumentValueDescr.VARIABLE ) {
-                //                    if ( this.declarations.containsKey( desc.getValue() ) ) {
-                //                        valueHandlers.add( new DeclarationVariable( (Declaration) declarations.get( desc.getValue() ) ) );
-                //                    } else if ( this.pkg.getGlobals().containsKey( desc.getValue() ) ) {
-                //                        valueHandlers.add( new GlobalVariable( (String) desc.getValue(), ( Class ) this.pkg.getGlobals().get( desc.getValue() ) ) );
-                //                    } else {
-                //                        throw new IllegalArgumentException( "Uknown variable: " + desc.getValue() );
-                //                    }
-                //                //} else if ( desc.getType() == ArgumentValueDescr.MAP ) {
-                //                    //valueHandlers.add( o )
-                //                } else {
-                //                    // handling a literal
-                //                    valueHandlers.add( new LiteralValue( (String) desc.getValue(), Object.class ) );
-                //                }
             }
 
             final MethodInvoker invoker = new MethodInvoker( methodAccessor.getMethodName(),
-                                                       instanceValueHandler,
-                                                       (ValueHandler[]) valueHandlers.toArray( new ValueHandler[valueHandlers.size()] ) );
+                                                             instanceValueHandler,
+                                                             (ValueHandler[]) valueHandlers.toArray( new ValueHandler[valueHandlers.size()] ) );
             dataProvider = new MethodDataProvider( invoker );
         }
-        //        if ( invokerDescr.getClass() == FieldAccessDescr.class ) {
-        //            //FieldAccessDescr fieldAccessDescr = ( FieldAccessDescr ) invokerDescr;
-        //        } else if ( invokerDescr.getClass() == FunctionCallDescr.class ) {
-        //            //FunctionCallDescr functionCallDescr = ( FunctionCallDescr) invokerDescr;
-        //        } else if ( invokerDescr.getClass() == AccessDescr.class ) {
-        //            AccessDescr AccessDescr = (AccessDescr) invokerDescr;
-        //            dataProvider = new DataProvider( AccessDescr.getVariableName(),
-        //                                                   AccessDescr.getName(),
-        //                                                   AccessDescr.getArguments(),
-        //                                                   this.declarations,
-        //                                                   this.pkg.getGlobals() );
-        //        }
 
         return new From( column,
                          dataProvider );
+
     }
 
     private ValueHandler buildValueHandler(final ArgumentValueDescr descr) {
@@ -1150,10 +1125,8 @@
 
         final String[] lines = buffer.toString().split( lineSeparator );
 
-        this.ruleDescr.setConsequenceOffset( lines.length + 2 );
-        //To get the error position in the DRL
-        //error.getLine() - this.ruleDescr.getConsequenceOffset() + this.ruleDescr.getConsequenceLine()
-
+        this.ruleDescr.setConsequenceOffset( lines.length + 1 );
+        
         buffer.append( this.methods.get( this.methods.size() - 1 ) + lineSeparator );
         buffer.append( "}" );
 
@@ -1204,7 +1177,7 @@
         } else {
             try {
                 extractor = this.classFieldExtractorCache.getExtractor( ((ClassObjectType) objectType).getClassType(),
-                                                                   fieldName );
+                                                                        fieldName );
             } catch ( final RuntimeDroolsException e ) {
                 this.errors.add( new RuleError( this.rule,
                                                 descr,

Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/semantics/java/javaFunction.stg
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/semantics/java/javaFunction.stg	2006-09-01 21:48:22 UTC (rev 6068)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/semantics/java/javaFunction.stg	2006-09-02 21:04:46 UTC (rev 6069)
@@ -5,9 +5,8 @@
 
 <imports:{ importEntry | import <importEntry>;<\n>}>   
 
-public class <className>
-{
-    private static final long serialVersionUID  = 7952983928232702826L;
+public class <className> {
+    private static final long serialVersionUID  = 320L;
     
     public static <returnType> <methodName>(<parameterTypes, parameterNames:{ type, name | <type> <name>}; separator=",\n">) throws Exception {
         <text>




More information about the jboss-svn-commits mailing list