[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