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: Mark Proctor
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