[jboss-jira] [JBoss JIRA] Created: (JBRULES-3000) Free form expression <field> != <object>.<method>(...) fails to parse

Wolfgang Laun (JIRA) jira-events at lists.jboss.org
Thu Apr 28 02:27:18 EDT 2011


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


More information about the jboss-jira mailing list