[jboss-jira] [JBoss JIRA] Updated: (JBRULES-3000) Free form expression <field> != <object>.<method>(...) fails to parse
Mark Proctor (JIRA)
jira-events at lists.jboss.org
Thu Sep 29 03:05:33 EDT 2011
[ https://issues.jboss.org/browse/JBRULES-3000?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Mark Proctor updated JBRULES-3000:
----------------------------------
Assignee: Edson Tirelli (was: Mark Proctor)
> Free form expression <field> != <object>.<method>(...) fails to parse
> ---------------------------------------------------------------------
>
> Key: JBRULES-3000
> URL: https://issues.jboss.org/browse/JBRULES-3000
> Project: Drools
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Components: drools-compiler (expert)
> Affects Versions: 3.0.4
> Reporter: Wolfgang Laun
> Assignee: Edson Tirelli
> Fix For: 5.3.0.Final
>
>
> According to Drools Introduction 2.1.3.1. Free Form expressions in Constraints (New Parser) "free form" expressions should be possible. However, the rule shown below does not compile and a stack dump is printed, (The legacy form using a return value restriction works correctly.)
> public abstract class BinOp {
> private Pin inPin1;
> private Pin inPin2;
> private Pin outPin;
> public BinOp( Pin inPin1, Pin inPin2, Pin outPin ){
> this.inPin1 = inPin1;
> this.inPin2 = inPin2;
> this.outPin = outPin;
> }
> public Pin getInPin1() { return inPin1; }
> public Pin getInPin2() { return inPin2; }
> public Pin getOutPin() { return outPin; }
> protected abstract boolean op( boolean x, boolean y );
> public boolean op( Pin x, Pin y ){
> return op( x.isValue(), y.isValue() );
> }
> }
> public class Pin {
> private boolean value;
> public Pin(){
> }
> public boolean isValue(){
> return value;
> }
> public void setValue( boolean value ){
> this.value = value;
> }
> }
> rule "gate with two inputs"
> when
> $binOp : BinOp( $inPin1 : inPin1, $inPin2 : inPin2, $outPin : outPin )
> Pin( this == $inPin1 )
> Pin( this == $inPin2 )
> Pin( this == $outPin, value != ( $binOp.op( $inPin1, $inPin2 ) ) )
> then
> //...
> end
> Error message + stack dump:
> Exception in thread "main" [Error: Failed to compile: 2 compilation error(s):
> - (1,5) unable to resolve method using strict-mode: appl.circuit.BinOp.$inPin1()
> - (1,5) unqualified type in strict mode for: $inPin1]
> [Near : {... op( $inPin1, $inPin2 ) ....}]
> ^
> [Line: 1, Column: 5]
> at org.mvel2.compiler.ExpressionCompiler.compile(ExpressionCompiler.java:95)
> at org.mvel2.MVEL.compileExpression(MVEL.java:829)
> at org.drools.base.extractors.MVELClassFieldReader.<init>(MVELClassFieldReader.java:64)
> at org.drools.rule.builder.PatternBuilder.createDeclarationObject(PatternBuilder.java:976)
> at org.drools.rule.builder.PatternBuilder.createDeclarationObject(PatternBuilder.java:939)
> at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:582)
> at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:242)
> at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:61)
> at org.drools.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:65)
> at org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:81)
> at org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:1546)
> at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:653)
> at org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:295)
> at org.drools.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:471)
> at org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:28)
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list