[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