apache / incubator-kie-drools

Drools is a rule engine, DMN engine and complex event processing (CEP) engine for Java.
http://www.drools.org
5.85k stars 2.49k forks source link

[new-parser] Corner-case combinations of `not`, `or`, and `exists` #5912

Closed yurloc closed 4 months ago

yurloc commented 4 months ago

Parent issue

Failing tests

Notes

We might need to re-introduce the lhsOr rule and mimic the old parser's rule structure even more closely to make this work.

Rule code snippet

not ( not ( Cheese() ) )

and

exists(not(Integer()) or not(Double()))

Error output

14:50:16.331 [Time-limited test] WARN  o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:256 - No files found for KieBase KieBaseModelName
### parse : ANTLR4_PARSER_ENABLED = true
### parse : ANTLR4_PARSER_ENABLED = true
14:50:16.409 [Time-limited test] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:KieBaseModelName
Unable to resolve ObjectType 'not' : [Rule name='notNotRule']

14:50:16.409 [Time-limited test] ERROR o.d.testcoverage.common.util.KieUtil.getKieBuilderFromKieFileSystem:165 - KieBuilder errors: [Message [id=1, kieBase=KieBaseModelName, level=ERROR, path=test_JBRULES_2206_2.drl, line=20, column=0
   text=Unable to resolve ObjectType 'not']]

java.lang.AssertionError: [[Message [id=1, kieBase=KieBaseModelName, level=ERROR, path=test_JBRULES_2206_2.drl, line=20, column=0
   text=Unable to resolve ObjectType 'not']]] 
Expecting empty but was: [Message [id=1, kieBase=KieBaseModelName, level=ERROR, path=test_JBRULES_2206_2.drl, line=20, column=0
   text=Unable to resolve ObjectType 'not']]

    at org.drools.testcoverage.common.util.KieUtil.getKieBuilderFromKieFileSystem(KieUtil.java:169)
    at org.drools.testcoverage.common.util.KieUtil.getKieBuilderFromKieFileSystem(KieUtil.java:134)
    at org.drools.testcoverage.common.util.KieUtil.buildAndInstallKieModuleIntoRepo(KieUtil.java:78)
    at org.drools.testcoverage.common.util.KieUtil.buildAndInstallKieModuleIntoRepo(KieUtil.java:72)
    at org.drools.testcoverage.common.util.KieUtil.getKieModuleFromResources(KieUtil.java:249)
    at org.drools.testcoverage.common.util.KieUtil.getKieModuleFromResources(KieUtil.java:238)
    at org.drools.testcoverage.common.util.KieBaseUtil.getKieBaseFromKieModuleFromResources(KieBaseUtil.java:102)
    at org.drools.testcoverage.common.util.KieBaseUtil.getKieBaseFromClasspathResources(KieBaseUtil.java:136)
    at org.drools.mvel.integrationtests.DynamicRulesTest.testJBRULES_2206(DynamicRulesTest.java:1175)

and

### parse : ANTLR4_PARSER_ENABLED = true
14:41:07.179 [Time-limited test] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:KieBaseModelName
Unable to resolve ObjectType 'not' : [Rule name='R1']

14:41:07.179 [Time-limited test] ERROR o.d.testcoverage.common.util.KieUtil.getKieBuilderFromKieFileSystem:165 - KieBuilder errors: [Message [id=1, kieBase=KieBaseModelName, level=ERROR, path=rules1.drl, line=17, column=0
   text=Unable to resolve ObjectType 'not']]

java.lang.AssertionError: [[Message [id=1, kieBase=KieBaseModelName, level=ERROR, path=rules1.drl, line=17, column=0
   text=Unable to resolve ObjectType 'not']]] 
Expecting empty but was: [Message [id=1, kieBase=KieBaseModelName, level=ERROR, path=rules1.drl, line=17, column=0
   text=Unable to resolve ObjectType 'not']]

    at org.drools.testcoverage.common.util.KieUtil.getKieBuilderFromKieFileSystem(KieUtil.java:169)
    at org.drools.testcoverage.common.util.KieUtil.getKieBuilderFromKieFileSystem(KieUtil.java:134)
    at org.drools.testcoverage.common.util.KieUtil.buildAndInstallKieModuleIntoRepo(KieUtil.java:78)
    at org.drools.testcoverage.common.util.KieUtil.buildAndInstallKieModuleIntoRepo(KieUtil.java:72)
    at org.drools.testcoverage.common.util.KieUtil.getKieModuleFromResources(KieUtil.java:249)
    at org.drools.testcoverage.common.util.KieUtil.getKieModuleFromResources(KieUtil.java:238)
    at org.drools.testcoverage.common.util.KieBaseUtil.getKieBaseFromKieModuleFromResources(KieBaseUtil.java:102)
    at org.drools.testcoverage.common.util.KieBaseUtil.getKieBaseFromKieModuleFromDrl(KieBaseUtil.java:115)
    at org.drools.compiler.integrationtests.ActivateAndDeleteOnListenerTest.getSessionWithEagerActivation(ActivateAndDeleteOnListenerTest.java:708)
    at org.drools.compiler.integrationtests.ActivateAndDeleteOnListenerTest.testSegMemInitializationWithForceEagerActivationAndExistsWithNots(ActivateAndDeleteOnListenerTest.java:668)
tkobayas commented 4 months ago

/take