Coder Social home page Coder Social logo

apache / incubator-kie-drools Goto Github PK

View Code? Open in Web Editor NEW
5.7K 308.0 2.4K 282.52 MB

Drools is a rule engine, DMN engine and complex event processing (CEP) engine for Java.

Home Page: http://www.drools.org

Java 99.37% HTML 0.02% XSLT 0.05% GAP 0.41% Ruby 0.01% Shell 0.02% CSS 0.01% Batchfile 0.01% ANTLR 0.04% ASL 0.02% Groovy 0.03% JavaScript 0.02% Handlebars 0.01% FreeMarker 0.01% Makefile 0.01%
rule-engine java dmn hacktoberfest

incubator-kie-drools's Introduction

An open source rule engine, DMN engine and complex event processing (CEP) engine for Java™ and the JVM Platform.

Drools is a business rule management system with a forward-chaining and backward-chaining inference based rules engine, allowing fast and reliable evaluation of business rules and complex event processing. A rule engine is also a fundamental building block to create an expert system which, in artificial intelligence, is a computer system that emulates the decision-making ability of a human expert.

Be sure to check out the Drools' project website and documentation!

Developing Drools and jBPM

If you want to build or contribute to a kiegroup project, read this document.

It will save you and us a lot of time by setting up your development environment correctly. It solves all known pitfalls that can disrupt your development. It also describes all guidelines, tips and tricks. If you want your pull requests (or patches) to be merged, please respect those guidelines.

Test execution tip

Some test are meant to be executed on machine with en_US locale. A specific profile is provided to execute them on machines with different locale, namely test-en. There are two ways to activate such profile during maven build:

  1. -Ptest-en (profile-id based)
  2. -DTestEn (property based)

The following two commands will execute tests on machine with locale different than en_US:

  1. make test -Ptest-en
  2. make test -DTestEn

incubator-kie-drools's People

Contributors

baldimir avatar bauna avatar danielezonca avatar diega avatar enzhao avatar esteban-aliverti avatar etirelli avatar evacchi avatar fmeyer avatar ge0ffrey avatar ginxo avatar gitgabrio avatar jinzeming avatar krisv avatar lucamolteni avatar manstis avatar mariofusco avatar mbiarnes avatar mdproctor avatar michaelneale avatar mswiderski avatar psiroky avatar radtriste avatar rikkola avatar salaboy avatar sotty avatar sterobin avatar tarilabs avatar tkobayas avatar wlaun avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

incubator-kie-drools's Issues

[new-parser] Broken enum declaration

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.DeclaredTypesTest#testEnum

Notes

  • Both STANDARD_FROM_DRL and PATTERN_DSL.

Rule code snippet

declare enum PersonAge
    ELEVEN(11);

    key: int
end

Error output

### parse : ANTLR4_PARSER_ENABLED = true
line 1:120 extraneous input 'enum' expecting {'unit', 'function', 'global', 'declare', 'rule', 'query', 'when', 'then', 'end', 'and', 'or', 'exists', 'not', 'in', 'from', 'matches', 'memberOf', 'accumulate', 'acc', 'init', 'action', 'reverse', 'result', 'entry-point', 'eval', 'window', 'salience', 'enabled', 'no-loop', 'auto-focus', 'lock-on-active', 'refract', 'direct', 'agenda-group', 'activation-group', 'ruleflow-group', 'date-effective', 'date-expires', 'dialect', 'calendars', 'timer', 'duration', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', IDENTIFIER}
line 2:10 mismatched input '(' expecting ':'
line 4:7 mismatched input ':' expecting {'end', '[', ';', '.', '=', '<', '@', IDENTIFIER}
14:50:19.328 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:defaultKieBase
[1,120]: extraneous input 'enum' expecting {'unit', 'function', 'global', 'declare', 'rule', 'query', 'when', 'then', 'end', 'and', 'or', 'exists', 'not', 'in', 'from', 'matches', 'memberOf', 'accumulate', 'acc', 'init', 'action', 'reverse', 'result', 'entry-point', 'eval', 'window', 'salience', 'enabled', 'no-loop', 'auto-focus', 'lock-on-active', 'refract', 'direct', 'agenda-group', 'activation-group', 'ruleflow-group', 'date-effective', 'date-expires', 'dialect', 'calendars', 'timer', 'duration', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', IDENTIFIER}
[2,10]: mismatched input '(' expecting ':'
[4,7]: mismatched input ':' expecting {'end', '[', ';', '.', '=', '<', '@', IDENTIFIER}
[0,0]: Parser returned a null Package


java.lang.AssertionError: [Message [id=1, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=1, column=0
   text=extraneous input 'enum' expecting {'unit', 'function', 'global', 'declare', 'rule', 'query', 'when', 'then', 'end', 'and', 'or', 'exists', 'not', 'in', 'from', 'matches', 'memberOf', 'accumulate', 'acc', 'init', 'action', 'reverse', 'result', 'entry-point', 'eval', 'window', 'salience', 'enabled', 'no-loop', 'auto-focus', 'lock-on-active', 'refract', 'direct', 'agenda-group', 'activation-group', 'ruleflow-group', 'date-effective', 'date-expires', 'dialect', 'calendars', 'timer', 'duration', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', IDENTIFIER}], Message [id=2, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=2, column=0
   text=mismatched input '(' expecting ':'], Message [id=3, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=4, column=0
   text=mismatched input ':' expecting {'end', '[', ';', '.', '=', '<', '@', IDENTIFIER}], Message [id=4, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=0, column=0
   text=Parser returned a null Package]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.DeclaredTypesTest.testEnum(DeclaredTypesTest.java:488)

[new-parser] Broken QueryTest#testPositionalRecursiveQueryWithUnification

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.QueryTest#testPositionalRecursiveQueryWithUnification

Notes

  • Both STANDARD_FROM_DRL and PATTERN_DSL.

Rule code snippet

  • Query.

Error output

### parse : ANTLR4_PARSER_ENABLED = true
line 1:0 mismatched input 'end' expecting {TIME_INTERVAL, DRL_STRING_LITERAL, '?/', DECIMAL_LITERAL, HEX_LITERAL, FLOAT_LITERAL, BOOL_LITERAL, STRING_LITERAL, 'null', '(', '[', '.', '<', '!', '~', '++', '--', '+', '-', '*', '/', IDENTIFIER}
line 1:0 mismatched input 'end' expecting {TIME_INTERVAL, DRL_STRING_LITERAL, '?/', DECIMAL_LITERAL, HEX_LITERAL, FLOAT_LITERAL, BOOL_LITERAL, STRING_LITERAL, 'null', '(', '[', '.', '<', '!', '~', '++', '--', '+', '-', '*', '/', IDENTIFIER}

[new-parser] null-safe dereferencing broken

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.NullSafeDereferencingTest#testNullSafeIndex

Notes

  • Both STANDARD_FROM_DRL and PATTERN_DSL.

Rule code snippet

 Person( address!.city == $city )

Error output

### parse : ANTLR4_PARSER_ENABLED = true
line 4:16 no viable alternative at input 'address!.'
21:45:04.491 [main] ERROR o.d.d.parser.antlr4.DRLParserWrapper.parse:77 - Exception while creating PackageDescr
java.lang.IllegalStateException: ctx.lhsPattern().size() == 0 : 
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsPatternBind(DRLVisitorImpl.java:441)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsPatternBind(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$LhsPatternBindContext.accept(DRLParser.java:1961)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:795)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsUnary(DRLVisitorImpl.java:775)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsUnary(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$LhsUnaryContext.accept(DRLParser.java:1862)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
	at org.drools.drl.parser.antlr4.DRLParserBaseVisitor.visitLhsUnarySingle(DRLParserBaseVisitor.java:139)
	at org.drools.drl.parser.antlr4.DRLParser$LhsUnarySingleContext.accept(DRLParser.java:1515)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:795)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhs(DRLVisitorImpl.java:428)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitRuledef(DRLVisitorImpl.java:259)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitRuledef(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$RuledefContext.accept(DRLParser.java:1221)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
	at org.drools.drl.parser.antlr4.DRLParserBaseVisitor.visitDrlStatementdef(DRLParserBaseVisitor.java:27)
	at org.drools.drl.parser.antlr4.DRLParser$DrlStatementdefContext.accept(DRLParser.java:405)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:795)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitCompilationUnit(DRLVisitorImpl.java:91)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitCompilationUnit(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$CompilationUnitContext.accept(DRLParser.java:318)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:18)
	at org.drools.drl.parser.antlr4.DRLParserHelper.compilationUnitContext2PackageDescr(DRLParserHelper.java:87)
	at org.drools.drl.parser.antlr4.DRLParserWrapper.parse(DRLParserWrapper.java:75)
	at org.drools.drl.parser.antlr4.DRLParserWrapper.parse(DRLParserWrapper.java:55)
	at org.drools.drl.parser.DrlParser.lambda$parse$2(DrlParser.java:189)
	at org.drools.drl.parser.DrlParser.compileWithAntlr4Parser(DrlParser.java:202)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:189)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:177)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:166)
	at org.drools.compiler.builder.impl.resources.DrlResourceHandler.process(DrlResourceHandler.java:55)
	at org.drools.compiler.builder.impl.PackageDescrBuilder.buildResource(PackageDescrBuilder.java:73)
	at org.drools.compiler.builder.impl.PackageDescrBuilder.build(PackageDescrBuilder.java:51)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackageDescr(CompositeKnowledgeBuilderImpl.java:173)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:116)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:109)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:274)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:220)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:84)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:285)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:251)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:208)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:151)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.NullSafeDereferencingTest.testNullSafeIndex(NullSafeDereferencingTest.java:355)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
	at java.base/java.lang.reflect.Method.invoke(Method.java:577)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.junit.runners.Suite.runChild(Suite.java:128)
	at org.junit.runners.Suite.runChild(Suite.java:27)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
	at org.junit.vintage.engine.execution.RunnerExecutor.execute(RunnerExecutor.java:42)
	at org.junit.vintage.engine.VintageTestEngine.executeAllChildren(VintageTestEngine.java:80)
	at org.junit.vintage.engine.VintageTestEngine.execute(VintageTestEngine.java:72)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
	at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
	at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53)
	at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
	at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232)
	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)
21:45:04.492 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:defaultKieBase
[4,16]: no viable alternative at input 'address!.'
[0,0]: 
[0,0]: Parser returned a null Package


java.lang.AssertionError: [Message [id=1, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=4, column=0
   text=no viable alternative at input 'address!.'], Message [id=2, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=0, column=0
   text=], Message [id=3, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=0, column=0
   text=Parser returned a null Package]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.NullSafeDereferencingTest.testNullSafeIndex(NullSafeDereferencingTest.java:355)

[new-parser] Some rules do not fire in MultiKieBaseTest

Parent issue

Failing tests

- org.drools.model.codegen.execmodel.MultiKieBaseTest#testFoldersVsPackages
- org.drools.model.codegen.execmodel.MultiKieBaseTest#testHelloMultiKieBasesWithSharedDeclaredType

-> These 2 tests were already fixed probably by other fix (can't be sure which one).

Instead, this test failed in MultiKieBaseTest

  • org.drools.model.codegen.execmodel.MultiKieBaseTest#testHelloWorldWithPackagesAnd2KieBases

Notes

  • STANDARD_FROM_DRL only.

Rule code snippet

  • multiple rules

Error output

13:41:52.267 [main] ERROR o.d.c.kie.util.ChangeSetBuilder.diffResource:187 - Error analyzing the contents of org/pkg2/r2.drl. Skipping.
java.lang.ArrayIndexOutOfBoundsException: arraycopy: source index -1 out of bounds for byte[141]
	at java.base/java.lang.System.arraycopy(Native Method)
	at java.base/java.util.Arrays.copyOfRangeByte(Arrays.java:3864)
	at java.base/java.util.Arrays.copyOfRange(Arrays.java:3854)
	at org.drools.compiler.kie.util.ChangeSetBuilder.diffDescrs(ChangeSetBuilder.java:247)
	at org.drools.compiler.kie.util.ChangeSetBuilder.diffResource(ChangeSetBuilder.java:172)
	at org.drools.compiler.kie.util.ChangeSetBuilder.build(ChangeSetBuilder.java:98)
	at org.drools.compiler.kie.builder.impl.InternalKieModule.getChanges(InternalKieModule.java:141)
	at org.drools.compiler.kie.builder.impl.KieContainerImpl.update(KieContainerImpl.java:246)
	at org.drools.compiler.kie.builder.impl.KieContainerImpl.update(KieContainerImpl.java:242)
	at org.drools.compiler.kie.builder.impl.KieContainerImpl.updateToVersion(KieContainerImpl.java:200)
	at org.drools.model.codegen.execmodel.MultiKieBaseTest.testHelloWorldWithPackagesAnd2KieBases(MultiKieBaseTest.java:105)
	...
### parse : ANTLR4_PARSER_ENABLED = true

org.opentest4j.AssertionFailedError: 
expected: 1
 but was: 2
Expected :1
Actual   :2

[new-parser] Broken inline cast

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.inlinecast.InlineCastTest#testInlineCastSingle

Notes

  • Both STANDARD_FROM_DRL and PATTERN_DSL.

Rule code snippet

  $a : ICA( someB#ICB.onlyConcrete() == "Hello" )

Error output

### parse : ANTLR4_PARSER_ENABLED = true
line 2:34 no viable alternative at input 'someB#ICB.onlyConcrete('
line 2:37 mismatched input '==' expecting {'unit', 'function', 'global', 'declare', 'rule', 'query', 'when', 'then', 'end', 'and', 'or', 'exists', 'not', 'in', 'from', 'matches', 'memberOf', 'accumulate', 'acc', 'init', 'action', 'reverse', 'result', 'entry-point', 'eval', 'forall', 'over', 'salience', 'enabled', 'no-loop', 'auto-focus', 'lock-on-active', 'refract', 'direct', 'agenda-group', 'activation-group', 'ruleflow-group', 'date-effective', 'date-expires', 'dialect', 'calendars', 'timer', 'duration', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', '(', ';', '?', IDENTIFIER}
14:50:20.776 [main] ERROR o.d.d.parser.antlr4.DRLParserWrapper.parse:77 - Exception while creating PackageDescr
java.lang.IllegalStateException: ctx.lhsPattern().size() == 0 : 
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsPatternBind(DRLVisitorImpl.java:443)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsPatternBind(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$LhsPatternBindContext.accept(DRLParser.java:1961)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:797)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsUnary(DRLVisitorImpl.java:777)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsUnary(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$LhsUnaryContext.accept(DRLParser.java:1862)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
	at org.drools.drl.parser.antlr4.DRLParserBaseVisitor.visitLhsUnarySingle(DRLParserBaseVisitor.java:139)
	at org.drools.drl.parser.antlr4.DRLParser$LhsUnarySingleContext.accept(DRLParser.java:1515)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:797)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhs(DRLVisitorImpl.java:430)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitRuledef(DRLVisitorImpl.java:261)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitRuledef(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$RuledefContext.accept(DRLParser.java:1221)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
	at org.drools.drl.parser.antlr4.DRLParserBaseVisitor.visitDrlStatementdef(DRLParserBaseVisitor.java:27)
	at org.drools.drl.parser.antlr4.DRLParser$DrlStatementdefContext.accept(DRLParser.java:405)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:797)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitCompilationUnit(DRLVisitorImpl.java:91)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitCompilationUnit(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$CompilationUnitContext.accept(DRLParser.java:318)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:18)
	at org.drools.drl.parser.antlr4.DRLParserHelper.compilationUnitContext2PackageDescr(DRLParserHelper.java:87)
	at org.drools.drl.parser.antlr4.DRLParserWrapper.parse(DRLParserWrapper.java:75)
	at org.drools.drl.parser.antlr4.DRLParserWrapper.parse(DRLParserWrapper.java:55)
	at org.drools.drl.parser.DrlParser.lambda$parse$2(DrlParser.java:189)
	at org.drools.drl.parser.DrlParser.compileWithAntlr4Parser(DrlParser.java:202)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:189)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:177)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:166)
	at org.drools.compiler.builder.impl.resources.DrlResourceHandler.process(DrlResourceHandler.java:55)
	at org.drools.compiler.builder.impl.PackageDescrBuilder.buildResource(PackageDescrBuilder.java:73)
	at org.drools.compiler.builder.impl.PackageDescrBuilder.build(PackageDescrBuilder.java:51)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackageDescr(CompositeKnowledgeBuilderImpl.java:173)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:116)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:109)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:274)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:220)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:84)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:285)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:251)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:208)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:151)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.inlinecast.InlineCastTest.testInlineCastSingle(InlineCastTest.java:295)
14:50:20.776 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:defaultKieBase
[2,34]: no viable alternative at input 'someB#ICB.onlyConcrete('
[2,37]: mismatched input '==' expecting {'unit', 'function', 'global', 'declare', 'rule', 'query', 'when', 'then', 'end', 'and', 'or', 'exists', 'not', 'in', 'from', 'matches', 'memberOf', 'accumulate', 'acc', 'init', 'action', 'reverse', 'result', 'entry-point', 'eval', 'forall', 'over', 'salience', 'enabled', 'no-loop', 'auto-focus', 'lock-on-active', 'refract', 'direct', 'agenda-group', 'activation-group', 'ruleflow-group', 'date-effective', 'date-expires', 'dialect', 'calendars', 'timer', 'duration', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', '(', ';', '?', IDENTIFIER}
[0,0]: 
[0,0]: Parser returned a null Package


java.lang.AssertionError: [Message [id=1, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=2, column=0
   text=no viable alternative at input 'someB#ICB.onlyConcrete('], Message [id=2, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=2, column=0
   text=mismatched input '==' expecting {'unit', 'function', 'global', 'declare', 'rule', 'query', 'when', 'then', 'end', 'and', 'or', 'exists', 'not', 'in', 'from', 'matches', 'memberOf', 'accumulate', 'acc', 'init', 'action', 'reverse', 'result', 'entry-point', 'eval', 'forall', 'over', 'salience', 'enabled', 'no-loop', 'auto-focus', 'lock-on-active', 'refract', 'direct', 'agenda-group', 'activation-group', 'ruleflow-group', 'date-effective', 'date-expires', 'dialect', 'calendars', 'timer', 'duration', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', '(', ';', '?', IDENTIFIER}], Message [id=3, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=0, column=0
   text=], Message [id=4, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=0, column=0
   text=Parser returned a null Package]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.inlinecast.InlineCastTest.testInlineCastSingle(InlineCastTest.java:295)

How to secure rules without the deprecated Security Manager?

I have an app where I will allow third party users to write rules that will be compiled and executed. I want to prevent users from writing malicious code. In the past I've seen that Java's Security Manager was used to solve this problem. This is however marked as deprecated starting with Java 17. How can I go about securing my rules against stuff like System.exit() and the likes to be executed?

Improve Impact Analysis JsonOutputTest

Issue Description:

Improve Impact Analysis JsonOutputTest
#5643 (comment)

This test is very opaque. the input data are hidden and it is not clear which is the case that we are testing here. As an improvement I would strongly suggest to split the test into smaller pieces where you can expose the input data and show they map to output data.

Acceptance Criteria:

Improve the test case to meet "split the test into smaller pieces where you can expose the input data and show they map to output data."

Experiment: New DRL parser : Better implementation switch

Parent issue: #5678

#5677 (comment)

@mariofusco @yurloc Do you think it's fine to call the new parser DRL10? This doesn't introduce a new syntax, but we need a clear separation. So I use LanguageLevelOption. Feel free to share your thoughts.

Temporarily, yes. But it should be removed in the final step in my opinion.

  1. The language level stays the same. We're just changing an implementation detail that deals with how the source code in DRL6 language is being parsed.
  2. Is the language level option a public API? If yes, it's one more reason not to introduce DRL10. Implementation details should not proliferate to the public API.

Finally, we would like to use a better way for the implementation switch

Experiment: New DRL parser : Test failure : RHS end without preceding white-space

Parent issue: #5678

For example, AlphaNodeTest.testAlphaDelete, AlphaNodeTest.testAlphaModify and some more tests fail with parser errors like
text=missing DRL_RHS_END at '<EOF>', text=Rule Compilation error end cannot be resolved to a type Syntax error on token "R2", ; expected

those rules have RHS like

then
  modify($p) { setName("Mark")}end
then
  delete($p);end
then
  retract($p)end

Here, end doesn't preceded by a white-space nor a line break. The new parser cannot handle such an end.

I guess we may tell that they are invalid syntax, but in reality, we have lots of this kind of rules in our unit tests. Existing users may have, too.

The current DRL6Parser can handle such an end in getConsequenceCode.

https://github.com/apache/incubator-kie-drools/blob/8.44.0.Final/drools-drl-parser/src/main/java/org/drools/drl/parser/lang/DRL6Parser.java#L4622-L4654

[new-parser] Multiple broken tests in FromTest

Parent issue

Related issues

Failing tests

  • Many.

Notes

  • One test is special: org.drools.model.codegen.execmodel.FromTest#testMultipleFromList - this one fails in STANDARD_FROM_DRL only.

Rule code snippet

 $selectedList: List() from accumulate(Measurement($m: this) from $lst, 
collectList(DummyService.mapEntry($m, $measurement.getListOfCodes())))

Error output

### parse : ANTLR4_PARSER_ENABLED = true
21:45:12.485 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:defaultKieBase
Unable to Analyse Expression $m:
[Error: unable to resolve method using strict-mode: org.drools.model.codegen.execmodel.FromTest$Measurement.$m()]
[Near : {... $m ....}]
             ^ : [Rule name='will execute per each Measurement having ID color']

Rule Compilation error : [Rule name='will execute per each Measurement having ID color']
	$m cannot be resolved to a variable



java.lang.AssertionError: [Message [id=1, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=-1, column=0
   text=Unable to Analyse Expression $m:
[Error: unable to resolve method using strict-mode: org.drools.model.codegen.execmodel.FromTest$Measurement.$m()]
[Near : {... $m ....}]
             ^], Message [id=2, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=-1, column=0
   text=Rule Compilation error $m cannot be resolved to a variable]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.FromTest.testMultipleFromList(FromTest.java:1327)

[new-parser] Parser errors do not have line numbers

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.CompilationFailuresTest#testMaxIntegerResultOnDoublePatternShouldntCompile

Notes

  • Both STANDARD_FROM_DRL and PATTERN_DSL.

Rule code snippet

$max : Double() from accumulate ( $num : Integer(); max($num) )

Error output

### parse : ANTLR4_PARSER_ENABLED = true
21:45:12.129 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:defaultKieBase
InvalidExpressionErrorResult: Pattern of type: '[ClassObjectType class=java.lang.Double]' on rule 'X' is not compatible with type java.lang.Integer returned by accumulate function.

The parser fails correctly, but the error message's line property is unset (-1).

[new-parser] CEP rules: broken `after`, `before` and similar operators

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.CepTest#testAfterOnLongFields

Notes

  • STANDARD_FROM_DRL only.

Rule code snippet

    $b : StockTick( company == "ACME", timeFieldAsLong after[5,8] $a.timeFieldAsLong )

Error output

### parse : ANTLR4_PARSER_ENABLED = true
14:50:01.117 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:kb
Predicate 'timeFieldAsLong' must be a Boolean expression
[Line: -1, Column: -1] : [Rule name='R']



java.lang.AssertionError: [Message [id=1, kieBase=kb, level=ERROR, path=r0.drl, line=-1, column=0
   text=Predicate 'timeFieldAsLong' must be a Boolean expression
[Line: -1, Column: -1]]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.CepTest.testAfterOnLongFields(CepTest.java:616)

[new-parser] Broken half-binary expressions

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.HalfBinaryTest#testHalfBinaryOnComparable

Notes

  • Both STANDARD_FROM_DRL and PATTERN_DSL.

Rule code snippet

    String(this (> "C" && < "K"))

Error output

### parse : ANTLR4_PARSER_ENABLED = true
line 2:17 no viable alternative at input 'this (>'
14:50:10.342 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:defaultKieBase
[2,17]: no viable alternative at input 'this (>'
[0,0]: Parser returned a null Package


java.lang.AssertionError: [Message [id=1, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=2, column=0
   text=no viable alternative at input 'this (>'], Message [id=2, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=0, column=0
   text=Parser returned a null Package]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.HalfBinaryTest.testHalfBinaryOnComparable(HalfBinaryTest.java:113)

Experiment: New DRL parser

Issue Description:

Migrate a new DRL parser based on antlr 4, because the current DRL parser (based on antlr 3) is hard-coded in the generated Java codes that make it hard to maintain.

Acceptance Criteria:

  • Migrate a new DRL parser in the drools code base with a feature branch dev-new-parser.
  • Run unit tests
  • Fix and improve the parser by solving the test failures
    • It could be several separated issues/PRs which we can work on in parallel
  • Improve the parser / implementation design
    kiegroup/drools-lsp#48 (comment)
  • Possibly redundant token definitions (DRL_STRING_LITERAL in the DRL lexer and STRING_LITERAL in the Java lexer).
  • Inconsistent operator tokens (we now have DRL_MATCHES but not DRL_CONTAINS).
  • What's the benefit of the built-in operator token definitions if we still need to accept pluggable operators?
  • What to do with the overlap between the expression and DRL parsers?

Out of Scope:

  • Merging the new parser to main is out of scope of this issue. When it's ready, we will file a new issue for that
  • Once the parser is migrated to main, drools-lsp will remove its drools-parser and refer the new parser

[new-parser] Queries with arguments cannot be parsed

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.QueryTest#testQueryOneArgumentWithoutType

Notes

  • Both STANDARD_FROM_DRL and PATTERN_DSL.

Rule code snippet

query olderThan( $age )

Error output

### parse : ANTLR4_PARSER_ENABLED = true
line 1:78 no viable alternative at input '( $age )'
21:45:06.955 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:defaultKieBase
[1,78]: no viable alternative at input '( $age )'
[0,0]: Parser returned a null Package


java.lang.AssertionError: [Message [id=1, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=1, column=0
   text=no viable alternative at input '( $age )'], Message [id=2, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=0, column=0
   text=Parser returned a null Package]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.QueryTest.testQueryOneArgumentWithoutType(QueryTest.java:106)

[new-parser] org.kie.api.KieBase.getRule(String, String) is null

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.RuleAttributesTest#testMetadataBasics

Notes

  • PATTERN_DSL only.

Error output

### parse : ANTLR4_PARSER_ENABLED = true

java.lang.NullPointerException: Cannot invoke "org.kie.api.definition.rule.Rule.getMetaData()" because the return value of "org.kie.api.KieBase.getRule(String, String)" is null

	at org.drools.model.codegen.execmodel.RuleAttributesTest.testMetadataBasics(RuleAttributesTest.java:397)

[new-parser] missing {';', ','} at '$sum'

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.NamedConsequencesTest#testIfAfterAccumulate

Notes

  • Both STANDARD_FROM_DRL and PATTERN_DSL.

Rule code snippet

  accumulate ( $p: Person ( getName().startsWith("M"));
                $sum : sum($p.getAge())
              )

Error output

### parse : ANTLR4_PARSER_ENABLED = true
line 6:16 missing {';', ','} at '$sum'
line 8:2 mismatched input 'if' expecting {'unit', 'function', 'global', 'declare', 'rule', 'query', 'when', 'then', 'end', 'and', 'or', 'exists', 'not', 'in', 'from', 'matches', 'memberOf', 'accumulate', 'acc', 'init', 'action', 'reverse', 'result', 'entry-point', 'eval', 'forall', 'salience', 'enabled', 'no-loop', 'auto-focus', 'lock-on-active', 'refract', 'direct', 'agenda-group', 'activation-group', 'ruleflow-group', 'date-effective', 'date-expires', 'dialect', 'calendars', 'timer', 'duration', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', '(', ';', '?', IDENTIFIER}
21:45:11.158 [main] ERROR o.d.d.parser.antlr4.DRLParserWrapper.parse:77 - Exception while creating PackageDescr
org.drools.drl.parser.antlr4.DRLParserException: rhs has to start with 'then' : rhs = if ($sum > 70) do[greater]
  String()
then
  $r.addValue("default");
then[greater]
  $r.addValue("greater");
	at org.drools.drl.parser.antlr4.ParserStringUtils.trimThen(ParserStringUtils.java:78)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitRuledef(DRLVisitorImpl.java:266)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitRuledef(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$RuledefContext.accept(DRLParser.java:1221)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
	at org.drools.drl.parser.antlr4.DRLParserBaseVisitor.visitDrlStatementdef(DRLParserBaseVisitor.java:27)
	at org.drools.drl.parser.antlr4.DRLParser$DrlStatementdefContext.accept(DRLParser.java:405)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:795)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitCompilationUnit(DRLVisitorImpl.java:91)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitCompilationUnit(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$CompilationUnitContext.accept(DRLParser.java:318)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:18)
	at org.drools.drl.parser.antlr4.DRLParserHelper.compilationUnitContext2PackageDescr(DRLParserHelper.java:87)
	at org.drools.drl.parser.antlr4.DRLParserWrapper.parse(DRLParserWrapper.java:75)
	at org.drools.drl.parser.antlr4.DRLParserWrapper.parse(DRLParserWrapper.java:55)
	at org.drools.drl.parser.DrlParser.lambda$parse$2(DrlParser.java:189)
	at org.drools.drl.parser.DrlParser.compileWithAntlr4Parser(DrlParser.java:202)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:189)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:177)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:166)
	at org.drools.compiler.builder.impl.resources.DrlResourceHandler.process(DrlResourceHandler.java:55)
	at org.drools.compiler.builder.impl.PackageDescrBuilder.buildResource(PackageDescrBuilder.java:73)
	at org.drools.compiler.builder.impl.PackageDescrBuilder.build(PackageDescrBuilder.java:51)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackageDescr(CompositeKnowledgeBuilderImpl.java:173)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:116)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:109)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:274)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:220)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:84)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:285)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:251)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:208)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:149)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.NamedConsequencesTest.testIfAfterAccumulate(NamedConsequencesTest.java:169)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
	at java.base/java.lang.reflect.Method.invoke(Method.java:577)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.junit.runners.Suite.runChild(Suite.java:128)
	at org.junit.runners.Suite.runChild(Suite.java:27)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
	at org.junit.vintage.engine.execution.RunnerExecutor.execute(RunnerExecutor.java:42)
	at org.junit.vintage.engine.VintageTestEngine.executeAllChildren(VintageTestEngine.java:80)
	at org.junit.vintage.engine.VintageTestEngine.execute(VintageTestEngine.java:72)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
	at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
	at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53)
	at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
	at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232)
	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)
21:45:11.159 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:defaultKieBase
[6,16]: missing {';', ','} at '$sum'
[8,2]: mismatched input 'if' expecting {'unit', 'function', 'global', 'declare', 'rule', 'query', 'when', 'then', 'end', 'and', 'or', 'exists', 'not', 'in', 'from', 'matches', 'memberOf', 'accumulate', 'acc', 'init', 'action', 'reverse', 'result', 'entry-point', 'eval', 'forall', 'salience', 'enabled', 'no-loop', 'auto-focus', 'lock-on-active', 'refract', 'direct', 'agenda-group', 'activation-group', 'ruleflow-group', 'date-effective', 'date-expires', 'dialect', 'calendars', 'timer', 'duration', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', '(', ';', '?', IDENTIFIER}
[0,0]: 
[0,0]: Parser returned a null Package


java.lang.AssertionError: [Message [id=1, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=6, column=0
   text=missing {';', ','} at '$sum'], Message [id=2, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=8, column=0
   text=mismatched input 'if' expecting {'unit', 'function', 'global', 'declare', 'rule', 'query', 'when', 'then', 'end', 'and', 'or', 'exists', 'not', 'in', 'from', 'matches', 'memberOf', 'accumulate', 'acc', 'init', 'action', 'reverse', 'result', 'entry-point', 'eval', 'forall', 'salience', 'enabled', 'no-loop', 'auto-focus', 'lock-on-active', 'refract', 'direct', 'agenda-group', 'activation-group', 'ruleflow-group', 'date-effective', 'date-expires', 'dialect', 'calendars', 'timer', 'duration', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', '(', ';', '?', IDENTIFIER}], Message [id=3, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=0, column=0
   text=], Message [id=4, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=0, column=0
   text=Parser returned a null Package]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.NamedConsequencesTest.testIfAfterAccumulate(NamedConsequencesTest.java:169)

[new-parser] Unable to resolve method (`from new`) in a query

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.QueryTest#testQueryWithDyanmicInsert
  • org.drools.model.codegen.execmodel.FromTest#testNew

Notes

  • Both STANDARD_FROM_DRL and PATTERN_DSL but different error outputs.

Rule code snippet

query peeps( Person $p, String $name, int $age )
    $p := Person( ) from new Person( $name, $age )

Error output

### parse : ANTLR4_PARSER_ENABLED = true
line 1:0 mismatched input 'this' expecting {TIME_INTERVAL, DRL_STRING_LITERAL, '?/', DECIMAL_LITERAL, HEX_LITERAL, FLOAT_LITERAL, BOOL_LITERAL, STRING_LITERAL, 'null', '(', '[', '.', '<', '!', '~', '++', '--', '+', '-', '*', '/', IDENTIFIER}
21:45:06.772 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:defaultKieBase
Unable to Analyse Expression newPerson($name,$age):
[Error: unable to resolve method using strict-mode: java.lang.Object.newPerson(java.lang.String, int)]
[Near : {... newPerson($name,$age) ....}]
             ^ : [Query name='peeps']



java.lang.AssertionError: [Message [id=1, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=-1, column=0
   text=Unable to Analyse Expression newPerson($name,$age):
[Error: unable to resolve method using strict-mode: java.lang.Object.newPerson(java.lang.String, int)]
[Near : {... newPerson($name,$age) ....}]
             ^]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.QueryTest.testQueryWithDyanmicInsert(QueryTest.java:823)

Is there any way to shorten the kbs rule loading time

We encountered a drools problem in our online environment and would like to ask for advice. The thing is like this,
We have approximately 160,000 rule files. When the project was started, the CompositeKnowledgeBuilder.build action was too time-consuming, causing the application to be unable to serve external users for a long time. Is there any way to shorten the kbs rule loading time?

drools version:7.74.1.Final

[new-parser] Broken QueryTest#testQueryWithInheritance: mismatched input 'init'

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.QueryTest#testQueryWithInheritance

Notes

  • Both STANDARD_FROM_DRL and PATTERN_DSL.

Rule code snippet

Complex rule with type declarations and a query. The problem is reported here:

rule init when

Error output

### parse : ANTLR4_PARSER_ENABLED = true
line 13:5 mismatched input 'init' expecting {DRL_STRING_LITERAL, IDENTIFIER}
21:45:07.345 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:defaultKieBase
[13,5]: mismatched input 'init' expecting {DRL_STRING_LITERAL, IDENTIFIER}
[0,0]: Parser returned a null Package


java.lang.AssertionError: [Message [id=1, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=13, column=0
   text=mismatched input 'init' expecting {DRL_STRING_LITERAL, IDENTIFIER}], Message [id=2, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=0, column=0
   text=Parser returned a null Package]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.QueryTest.testQueryWithInheritance(QueryTest.java:1127)

[new-parser] casting in expressions doesn't work

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.CompilerTest#testBetaCast

Notes

  • STANDARD_FROM_DRL only.

Rule code snippet

  $a : Address(shortNumber == (short)$intField)

Error output

### parse : ANTLR4_PARSER_ENABLED = true
line 1:16 no viable alternative at input '(short'
line 1:16 mismatched input 'short' expecting {'not', 'matches', '(', '>', '<', '~', '==', '<=', '>=', '!=', IDENTIFIER}
21:44:56.387 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:defaultKieBase
Unable to Analyse Expression shortNumber == :
[Error: Malformed expression]
[Near : {... shortNumber == ....}]
                           ^ : [Rule name='R']



java.lang.AssertionError: [Message [id=1, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=-1, column=0
   text=Unable to Analyse Expression shortNumber == :
[Error: Malformed expression]
[Near : {... shortNumber == ....}]
                           ^]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.CompilerTest.testBetaCast(CompilerTest.java:1893)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
	at java.base/java.lang.reflect.Method.invoke(Method.java:577)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:258)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.junit.runners.Suite.runChild(Suite.java:128)
	at org.junit.runners.Suite.runChild(Suite.java:27)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
	at org.junit.vintage.engine.execution.RunnerExecutor.execute(RunnerExecutor.java:42)
	at org.junit.vintage.engine.VintageTestEngine.executeAllChildren(VintageTestEngine.java:80)
	at org.junit.vintage.engine.VintageTestEngine.execute(VintageTestEngine.java:72)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
	at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
	at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53)
	at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
	at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232)
	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)

[new-parser] CEP rules: broken annotations

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.CepTest#testExpires

Notes

  • Both STANDARD_FROM_DRL and PATTERN_DSL.

Rule code snippet

declare StockFact
    @role( value = event )
    @expires( value = 2s, policy = TIME_SOFT )
end

Error output

### parse : ANTLR4_PARSER_ENABLED = true
line 6:22 no viable alternative at input 'value = 2s'
line 6:20 mismatched input '=' expecting ':'
line 6:45 extraneous input ')' expecting 'end'
14:50:01.178 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:kb
[6,22]: no viable alternative at input 'value = 2s'
[6,20]: mismatched input '=' expecting ':'
[6,45]: extraneous input ')' expecting 'end'
[0,0]: Parser returned a null Package


java.lang.AssertionError: [Message [id=1, kieBase=kb, level=ERROR, path=r0.drl, line=6, column=0
   text=no viable alternative at input 'value = 2s'], Message [id=2, kieBase=kb, level=ERROR, path=r0.drl, line=6, column=0
   text=mismatched input '=' expecting ':'], Message [id=3, kieBase=kb, level=ERROR, path=r0.drl, line=6, column=0
   text=extraneous input ')' expecting 'end'], Message [id=4, kieBase=kb, level=ERROR, path=r0.drl, line=0, column=0
   text=Parser returned a null Package]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.CepTest.testExpires(CepTest.java:452)

[new-parser] Broken enclosed binding

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.BindingTest#testComplexEnclosedBinding

Notes

  • Both STANDARD_FROM_DRL and PATTERN_DSL.

Rule code snippet

  $p : Person( ($n : name == "Mario") && (age > 20) )

Error output

line 3:19 no viable alternative at input '($n :'
line 3:26 mismatched input '==' expecting {'(', '.'}
line 3:38 mismatched input '&&' expecting {'(', '.'}
21:45:33.077 [main] ERROR o.d.d.parser.antlr4.DRLParserWrapper.parse:77 - Exception while creating PackageDescr
org.drools.drl.parser.antlr4.DRLParserException: rhs has to start with 'then' : rhs = && (age > 20) )
then
  result.add($n);
	at org.drools.drl.parser.antlr4.ParserStringUtils.trimThen(ParserStringUtils.java:78)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitRuledef(DRLVisitorImpl.java:266)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitRuledef(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$RuledefContext.accept(DRLParser.java:1221)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
	at org.drools.drl.parser.antlr4.DRLParserBaseVisitor.visitDrlStatementdef(DRLParserBaseVisitor.java:27)
	at org.drools.drl.parser.antlr4.DRLParser$DrlStatementdefContext.accept(DRLParser.java:405)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:795)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitCompilationUnit(DRLVisitorImpl.java:91)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitCompilationUnit(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$CompilationUnitContext.accept(DRLParser.java:318)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:18)
	at org.drools.drl.parser.antlr4.DRLParserHelper.compilationUnitContext2PackageDescr(DRLParserHelper.java:87)
	at org.drools.drl.parser.antlr4.DRLParserWrapper.parse(DRLParserWrapper.java:75)
	at org.drools.drl.parser.antlr4.DRLParserWrapper.parse(DRLParserWrapper.java:55)
	at org.drools.drl.parser.DrlParser.lambda$parse$2(DrlParser.java:189)
	at org.drools.drl.parser.DrlParser.compileWithAntlr4Parser(DrlParser.java:202)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:189)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:177)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:166)
	at org.drools.compiler.builder.impl.resources.DrlResourceHandler.process(DrlResourceHandler.java:55)
	at org.drools.compiler.builder.impl.PackageDescrBuilder.buildResource(PackageDescrBuilder.java:73)
	at org.drools.compiler.builder.impl.PackageDescrBuilder.build(PackageDescrBuilder.java:51)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackageDescr(CompositeKnowledgeBuilderImpl.java:173)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:116)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:109)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:274)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:220)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:84)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:285)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:251)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:208)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:151)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.BindingTest.testComplexEnclosedBinding(BindingTest.java:166)
21:45:33.077 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:defaultKieBase
[3,19]: no viable alternative at input '($n :'
[3,26]: mismatched input '==' expecting {'(', '.'}
[3,38]: mismatched input '&&' expecting {'(', '.'}
[0,0]: 
[0,0]: Parser returned a null Package


java.lang.AssertionError: [Message [id=1, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=3, column=0
   text=no viable alternative at input '($n :'], Message [id=2, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=3, column=0
   text=mismatched input '==' expecting {'(', '.'}], Message [id=3, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=3, column=0
   text=mismatched input '&&' expecting {'(', '.'}], Message [id=4, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=0, column=0
   text=], Message [id=5, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=0, column=0
   text=Parser returned a null Package]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.BindingTest.testComplexEnclosedBinding(BindingTest.java:166)

[new-parser] CEP rules: broken sliding window declaration and reference

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.CepTest#testDeclaredSlidingWindow

Notes

  • Both STANDARD_FROM_DRL and PATTERN_DSL.

Rule code snippet

declare window DeclaredWindow
    StockTick( company == "DROO" ) over window:time( 5s )
end
rule R when
    $a : StockTick() from window DeclaredWindow
then

Error output

### parse : ANTLR4_PARSER_ENABLED = true
line 3:53 mismatched input '5s' expecting {'unit', 'function', 'global', 'declare', 'rule', 'query', 'when', 'then', 'end', 'and', 'or', 'exists', 'not', 'in', 'from', 'matches', 'memberOf', 'accumulate', 'acc', 'init', 'action', 'reverse', 'result', 'entry-point', 'eval', 'salience', 'enabled', 'no-loop', 'auto-focus', 'lock-on-active', 'refract', 'direct', 'agenda-group', 'activation-group', 'ruleflow-group', 'date-effective', 'date-expires', 'dialect', 'calendars', 'timer', 'duration', DRL_STRING_LITERAL, DRL_BIG_DECIMAL_LITERAL, DRL_BIG_INTEGER_LITERAL, 'boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'new', 'short', 'super', 'switch', 'this', 'void', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', DECIMAL_LITERAL, HEX_LITERAL, OCT_LITERAL, BINARY_LITERAL, FLOAT_LITERAL, HEX_FLOAT_LITERAL, BOOL_LITERAL, CHAR_LITERAL, TEXT_BLOCK, 'null', '(', '[', '<', '!', '~', '++', '--', '+', '-', '@', IDENTIFIER}
line 6:26 mismatched input 'window' expecting {'(', '.'}
14:50:01.443 [main] ERROR o.d.d.parser.antlr4.DRLParserWrapper.parse:77 - Exception while creating PackageDescr
java.lang.IllegalStateException: ctx.lhsPattern().size() == 0 : 
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsPatternBind(DRLVisitorImpl.java:443)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsPatternBind(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$LhsPatternBindContext.accept(DRLParser.java:1961)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:797)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsUnary(DRLVisitorImpl.java:777)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsUnary(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$LhsUnaryContext.accept(DRLParser.java:1862)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
	at org.drools.drl.parser.antlr4.DRLParserBaseVisitor.visitLhsUnarySingle(DRLParserBaseVisitor.java:139)
	at org.drools.drl.parser.antlr4.DRLParser$LhsUnarySingleContext.accept(DRLParser.java:1515)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:797)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhs(DRLVisitorImpl.java:430)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitRuledef(DRLVisitorImpl.java:261)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitRuledef(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$RuledefContext.accept(DRLParser.java:1221)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
	at org.drools.drl.parser.antlr4.DRLParserBaseVisitor.visitDrlStatementdef(DRLParserBaseVisitor.java:27)
	at org.drools.drl.parser.antlr4.DRLParser$DrlStatementdefContext.accept(DRLParser.java:405)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:797)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitCompilationUnit(DRLVisitorImpl.java:91)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitCompilationUnit(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$CompilationUnitContext.accept(DRLParser.java:318)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:18)
	at org.drools.drl.parser.antlr4.DRLParserHelper.compilationUnitContext2PackageDescr(DRLParserHelper.java:87)
	at org.drools.drl.parser.antlr4.DRLParserWrapper.parse(DRLParserWrapper.java:75)
	at org.drools.drl.parser.antlr4.DRLParserWrapper.parse(DRLParserWrapper.java:55)
	at org.drools.drl.parser.DrlParser.lambda$parse$2(DrlParser.java:189)
	at org.drools.drl.parser.DrlParser.compileWithAntlr4Parser(DrlParser.java:202)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:189)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:177)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:166)
	at org.drools.compiler.builder.impl.resources.DrlResourceHandler.process(DrlResourceHandler.java:55)
	at org.drools.compiler.builder.impl.PackageDescrBuilder.buildResource(PackageDescrBuilder.java:73)
	at org.drools.compiler.builder.impl.PackageDescrBuilder.build(PackageDescrBuilder.java:51)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackageDescr(CompositeKnowledgeBuilderImpl.java:173)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:116)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:109)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:274)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:220)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:84)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:285)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:251)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:208)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:151)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.CepTest.testDeclaredSlidingWindow(CepTest.java:218)
14:50:01.443 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:kb
[3,53]: mismatched input '5s' expecting {'unit', 'function', 'global', 'declare', 'rule', 'query', 'when', 'then', 'end', 'and', 'or', 'exists', 'not', 'in', 'from', 'matches', 'memberOf', 'accumulate', 'acc', 'init', 'action', 'reverse', 'result', 'entry-point', 'eval', 'salience', 'enabled', 'no-loop', 'auto-focus', 'lock-on-active', 'refract', 'direct', 'agenda-group', 'activation-group', 'ruleflow-group', 'date-effective', 'date-expires', 'dialect', 'calendars', 'timer', 'duration', DRL_STRING_LITERAL, DRL_BIG_DECIMAL_LITERAL, DRL_BIG_INTEGER_LITERAL, 'boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'new', 'short', 'super', 'switch', 'this', 'void', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', DECIMAL_LITERAL, HEX_LITERAL, OCT_LITERAL, BINARY_LITERAL, FLOAT_LITERAL, HEX_FLOAT_LITERAL, BOOL_LITERAL, CHAR_LITERAL, TEXT_BLOCK, 'null', '(', '[', '<', '!', '~', '++', '--', '+', '-', '@', IDENTIFIER}
[6,26]: mismatched input 'window' expecting {'(', '.'}
[0,0]: 
[0,0]: Parser returned a null Package


java.lang.AssertionError: [Message [id=1, kieBase=kb, level=ERROR, path=r0.drl, line=3, column=0
   text=mismatched input '5s' expecting {'unit', 'function', 'global', 'declare', 'rule', 'query', 'when', 'then', 'end', 'and', 'or', 'exists', 'not', 'in', 'from', 'matches', 'memberOf', 'accumulate', 'acc', 'init', 'action', 'reverse', 'result', 'entry-point', 'eval', 'salience', 'enabled', 'no-loop', 'auto-focus', 'lock-on-active', 'refract', 'direct', 'agenda-group', 'activation-group', 'ruleflow-group', 'date-effective', 'date-expires', 'dialect', 'calendars', 'timer', 'duration', DRL_STRING_LITERAL, DRL_BIG_DECIMAL_LITERAL, DRL_BIG_INTEGER_LITERAL, 'boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'new', 'short', 'super', 'switch', 'this', 'void', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', DECIMAL_LITERAL, HEX_LITERAL, OCT_LITERAL, BINARY_LITERAL, FLOAT_LITERAL, HEX_FLOAT_LITERAL, BOOL_LITERAL, CHAR_LITERAL, TEXT_BLOCK, 'null', '(', '[', '<', '!', '~', '++', '--', '+', '-', '@', IDENTIFIER}], Message [id=2, kieBase=kb, level=ERROR, path=r0.drl, line=6, column=0
   text=mismatched input 'window' expecting {'(', '.'}], Message [id=3, kieBase=kb, level=ERROR, path=r0.drl, line=0, column=0
   text=], Message [id=4, kieBase=kb, level=ERROR, path=r0.drl, line=0, column=0
   text=Parser returned a null Package]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.CepTest.testDeclaredSlidingWindow(CepTest.java:218)

Remove productized profile from kogito-runtimes

The kogito-codegen-* modules are all modules used internally for the code generation of the different features of kogito. They are not meant to be directly imported by end-users, but they are only support for other modules and then I don't see any valid reason to keep them out of the product. In particular the kogito-codegen-rules module acts a support for other codegens and can be typically used in conjunction with the kogito-codegen-processes one (which is part of the product) as demonstrated by kogito-codegen-processes-integration-tests, so especially for this use case it seems unreasonable to keep it in the product while excluding the other.

Those codegen modules are mostly used for the Quarkus extension and there we need to take a decision on which of those extensions we want to actually keep also in the product. At the moment the only productized extension is the serverless-workflow one. Moreover now all the features provided by the kogito-quarkus-rules-extension are also present in the Drools extension. In essence now the Kogito rules extension is a pure duplicate of the Drools one, so I don't see any reason to keep it. For all other extensions (processes. decisions, predictions) we can maybe re-evaluate if we want to keep the out of the product, but if so I believe it would be trivial to do this with the mechanism already implemented by @rgdoliveira for Drools.

In essence my suggestion is the following:

  • Keep all the kogito-codegen-* modules also in the product since they are not exposed to end-users.
  • Delete the kogito-quarkus-rules-extension module since now it is only a duplicate of the Drools extension for Quarkus.
  • Exclude all the Quarkus extensions that we don't want in the product at midstream level using @rgdoliveira's scripts.

[new-parser] function definition causes an error

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.MvelOperatorsTest#testMatchesWithFunction

Notes

  • Both STANDARD_FROM_DRL and PATTERN_DSL.

Rule code snippet

function String addStar(String s) { return s + "*"; }

Error output

### parse : ANTLR4_PARSER_ENABLED = true
line 2:45 missing ';' at '+'
line 2:47 mismatched input '"*"' expecting {'boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'new', 'short', 'super', 'switch', 'this', 'void', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', DECIMAL_LITERAL, HEX_LITERAL, OCT_LITERAL, BINARY_LITERAL, FLOAT_LITERAL, HEX_FLOAT_LITERAL, BOOL_LITERAL, CHAR_LITERAL, STRING_LITERAL, TEXT_BLOCK, 'null', '(', '<', '!', '~', '++', '--', '+', '-', '@', IDENTIFIER}
21:45:05.199 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:defaultKieBase
[2,45]: missing ';' at '+'
[2,47]: mismatched input '"*"' expecting {'boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'new', 'short', 'super', 'switch', 'this', 'void', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', DECIMAL_LITERAL, HEX_LITERAL, OCT_LITERAL, BINARY_LITERAL, FLOAT_LITERAL, HEX_FLOAT_LITERAL, BOOL_LITERAL, CHAR_LITERAL, STRING_LITERAL, TEXT_BLOCK, 'null', '(', '<', '!', '~', '++', '--', '+', '-', '@', IDENTIFIER}
[0,0]: Parser returned a null Package


java.lang.AssertionError: [Message [id=1, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=2, column=0
   text=missing ';' at '+'], Message [id=2, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=2, column=0
   text=mismatched input '"*"' expecting {'boolean', 'byte', 'char', 'double', 'float', 'int', 'long', 'new', 'short', 'super', 'switch', 'this', 'void', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', DECIMAL_LITERAL, HEX_LITERAL, OCT_LITERAL, BINARY_LITERAL, FLOAT_LITERAL, HEX_FLOAT_LITERAL, BOOL_LITERAL, CHAR_LITERAL, STRING_LITERAL, TEXT_BLOCK, 'null', '(', '<', '!', '~', '++', '--', '+', '-', '@', IDENTIFIER}], Message [id=3, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=0, column=0
   text=Parser returned a null Package]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.MvelOperatorsTest.testMatchesWithFunction(MvelOperatorsTest.java:327)

[new-parser] Broken ExisistentialTest#test2NotsWithAnd

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.ExisistentialTest#test2NotsWithAnd

Notes

  • Both STANDARD_FROM_DRL and PATTERN_DSL.

Rule code snippet

rule R when
  (not (and Integer( $i : intValue )
            String( length > $i )
       )
  )

Error output

### parse : ANTLR4_PARSER_ENABLED = true
line 3:12 no viable alternative at input '(not (and Integer'
line 6:2 mismatched input ')' expecting {'unit', 'function', 'global', 'declare', 'rule', 'query', 'when', 'then', 'end', 'and', 'or', 'exists', 'not', 'in', 'from', 'matches', 'memberOf', 'accumulate', 'acc', 'init', 'action', 'reverse', 'result', 'entry-point', 'eval', 'forall', 'salience', 'enabled', 'no-loop', 'auto-focus', 'lock-on-active', 'refract', 'direct', 'agenda-group', 'activation-group', 'ruleflow-group', 'date-effective', 'date-expires', 'dialect', 'calendars', 'timer', 'duration', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', '(', '?', IDENTIFIER}
21:45:23.173 [main] ERROR o.d.d.parser.antlr4.DRLParserWrapper.parse:77 - Exception while creating PackageDescr
java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0
	at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:100)
	at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106)
	at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302)
	at java.base/java.util.Objects.checkIndex(Objects.java:359)
	at java.base/java.util.ArrayList.get(ArrayList.java:427)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsUnary(DRLVisitorImpl.java:775)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsUnary(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$LhsUnaryContext.accept(DRLParser.java:1862)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
	at org.drools.drl.parser.antlr4.DRLParserBaseVisitor.visitLhsUnarySingle(DRLParserBaseVisitor.java:139)
	at org.drools.drl.parser.antlr4.DRLParser$LhsUnarySingleContext.accept(DRLParser.java:1515)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:795)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhs(DRLVisitorImpl.java:428)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitRuledef(DRLVisitorImpl.java:259)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitRuledef(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$RuledefContext.accept(DRLParser.java:1221)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
	at org.drools.drl.parser.antlr4.DRLParserBaseVisitor.visitDrlStatementdef(DRLParserBaseVisitor.java:27)
	at org.drools.drl.parser.antlr4.DRLParser$DrlStatementdefContext.accept(DRLParser.java:405)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:795)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitCompilationUnit(DRLVisitorImpl.java:91)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitCompilationUnit(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$CompilationUnitContext.accept(DRLParser.java:318)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:18)
	at org.drools.drl.parser.antlr4.DRLParserHelper.compilationUnitContext2PackageDescr(DRLParserHelper.java:87)
	at org.drools.drl.parser.antlr4.DRLParserWrapper.parse(DRLParserWrapper.java:75)
	at org.drools.drl.parser.antlr4.DRLParserWrapper.parse(DRLParserWrapper.java:55)
	at org.drools.drl.parser.DrlParser.lambda$parse$2(DrlParser.java:189)
	at org.drools.drl.parser.DrlParser.compileWithAntlr4Parser(DrlParser.java:202)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:189)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:177)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:166)
	at org.drools.compiler.builder.impl.resources.DrlResourceHandler.process(DrlResourceHandler.java:55)
	at org.drools.compiler.builder.impl.PackageDescrBuilder.buildResource(PackageDescrBuilder.java:73)
	at org.drools.compiler.builder.impl.PackageDescrBuilder.build(PackageDescrBuilder.java:51)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackageDescr(CompositeKnowledgeBuilderImpl.java:173)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:116)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:109)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:274)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:220)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:84)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:285)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:251)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:208)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:151)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.ExisistentialTest.test2NotsWithAnd(ExisistentialTest.java:329)
21:45:23.173 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:defaultKieBase
[3,12]: no viable alternative at input '(not (and Integer'
[6,2]: mismatched input ')' expecting {'unit', 'function', 'global', 'declare', 'rule', 'query', 'when', 'then', 'end', 'and', 'or', 'exists', 'not', 'in', 'from', 'matches', 'memberOf', 'accumulate', 'acc', 'init', 'action', 'reverse', 'result', 'entry-point', 'eval', 'forall', 'salience', 'enabled', 'no-loop', 'auto-focus', 'lock-on-active', 'refract', 'direct', 'agenda-group', 'activation-group', 'ruleflow-group', 'date-effective', 'date-expires', 'dialect', 'calendars', 'timer', 'duration', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', '(', '?', IDENTIFIER}
[0,0]: 
[0,0]: Parser returned a null Package


java.lang.AssertionError: [Message [id=1, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=3, column=0
   text=no viable alternative at input '(not (and Integer'], Message [id=2, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=6, column=0
   text=mismatched input ')' expecting {'unit', 'function', 'global', 'declare', 'rule', 'query', 'when', 'then', 'end', 'and', 'or', 'exists', 'not', 'in', 'from', 'matches', 'memberOf', 'accumulate', 'acc', 'init', 'action', 'reverse', 'result', 'entry-point', 'eval', 'forall', 'salience', 'enabled', 'no-loop', 'auto-focus', 'lock-on-active', 'refract', 'direct', 'agenda-group', 'activation-group', 'ruleflow-group', 'date-effective', 'date-expires', 'dialect', 'calendars', 'timer', 'duration', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', '(', '?', IDENTIFIER}], Message [id=3, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=0, column=0
   text=], Message [id=4, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=0, column=0
   text=Parser returned a null Package]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.ExisistentialTest.test2NotsWithAnd(ExisistentialTest.java:329)

[new-parser] mismatched input 'if'/'do' (support named consequences)

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.NamedConsequencesTest#testIfElseWithMvelAccessor
  • org.drools.model.codegen.execmodel.NamedConsequencesTest#testNamedConsequence

Notes

  • Both STANDARD_FROM_DRL and PATTERN_DSL.

Rule code snippet

rule R1 dialect "mvel" when
    $a: Cheese ( type == "stilton" )
    if ( $a.price > Cheese.BASE_PRICE ) do[t1] else do[t2]

Error output

### parse : ANTLR4_PARSER_ENABLED = true
line 6:4 mismatched input 'if' expecting {'not', 'in', 'matches', 'memberOf', 'after', 'before', 'coincides', 'during', 'includes', 'finishes', 'finishedby', 'meets', 'metby', 'overlaps', 'overlappedby', 'starts', 'startedby', ':=', 'instanceof', ')', '[', ',', '.', '=', '>', '<', '?', '==', '<=', '>=', '!=', '&&', '||', '++', '--', '+', '-', '*', '/', '&', '|', '^', '%', '+=', '-=', '*=', '/=', '&=', '|=', '^=', '%=', '<<=', '>>=', '>>>=', '::'}
21:45:11.061 [main] ERROR o.d.d.parser.antlr4.DRLParserWrapper.parse:77 - Exception while creating PackageDescr
org.drools.drl.parser.antlr4.DRLParserException: rhs has to start with 'then' : rhs = if ( $a.price > Cheese.BASE_PRICE ) do[t1] else do[t2]
    $b: Cheese ( type == "cheddar" )
then
    results.add( $b.getType() );
then[t1]
    results.add( $a.getType() );
then[t2]
    results.add( $a.getType().toUpperCase() );
	at org.drools.drl.parser.antlr4.ParserStringUtils.trimThen(ParserStringUtils.java:78)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitRuledef(DRLVisitorImpl.java:266)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitRuledef(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$RuledefContext.accept(DRLParser.java:1221)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
	at org.drools.drl.parser.antlr4.DRLParserBaseVisitor.visitDrlStatementdef(DRLParserBaseVisitor.java:27)
	at org.drools.drl.parser.antlr4.DRLParser$DrlStatementdefContext.accept(DRLParser.java:405)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:795)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitCompilationUnit(DRLVisitorImpl.java:91)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitCompilationUnit(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$CompilationUnitContext.accept(DRLParser.java:318)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:18)
	at org.drools.drl.parser.antlr4.DRLParserHelper.compilationUnitContext2PackageDescr(DRLParserHelper.java:87)
	at org.drools.drl.parser.antlr4.DRLParserWrapper.parse(DRLParserWrapper.java:75)
	at org.drools.drl.parser.antlr4.DRLParserWrapper.parse(DRLParserWrapper.java:55)
	at org.drools.drl.parser.DrlParser.lambda$parse$2(DrlParser.java:189)
	at org.drools.drl.parser.DrlParser.compileWithAntlr4Parser(DrlParser.java:202)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:189)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:177)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:166)
	at org.drools.compiler.builder.impl.resources.DrlResourceHandler.process(DrlResourceHandler.java:55)
	at org.drools.compiler.builder.impl.PackageDescrBuilder.buildResource(PackageDescrBuilder.java:73)
	at org.drools.compiler.builder.impl.PackageDescrBuilder.build(PackageDescrBuilder.java:51)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackageDescr(CompositeKnowledgeBuilderImpl.java:173)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:116)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:109)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:274)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:220)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:84)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:285)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:251)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:208)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:151)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.NamedConsequencesTest.testIfElseWithMvelAccessor(NamedConsequencesTest.java:221)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
	at java.base/java.lang.reflect.Method.invoke(Method.java:577)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.junit.runners.Suite.runChild(Suite.java:128)
	at org.junit.runners.Suite.runChild(Suite.java:27)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
	at org.junit.vintage.engine.execution.RunnerExecutor.execute(RunnerExecutor.java:42)
	at org.junit.vintage.engine.VintageTestEngine.executeAllChildren(VintageTestEngine.java:80)
	at org.junit.vintage.engine.VintageTestEngine.execute(VintageTestEngine.java:72)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
	at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
	at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53)
	at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
	at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232)
	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)
21:45:11.062 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:defaultKieBase
[6,4]: mismatched input 'if' expecting {'not', 'in', 'matches', 'memberOf', 'after', 'before', 'coincides', 'during', 'includes', 'finishes', 'finishedby', 'meets', 'metby', 'overlaps', 'overlappedby', 'starts', 'startedby', ':=', 'instanceof', ')', '[', ',', '.', '=', '>', '<', '?', '==', '<=', '>=', '!=', '&&', '||', '++', '--', '+', '-', '*', '/', '&', '|', '^', '%', '+=', '-=', '*=', '/=', '&=', '|=', '^=', '%=', '<<=', '>>=', '>>>=', '::'}
[0,0]: 
[0,0]: Parser returned a null Package


java.lang.AssertionError: [Message [id=1, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=6, column=0
   text=mismatched input 'if' expecting {'not', 'in', 'matches', 'memberOf', 'after', 'before', 'coincides', 'during', 'includes', 'finishes', 'finishedby', 'meets', 'metby', 'overlaps', 'overlappedby', 'starts', 'startedby', ':=', 'instanceof', ')', '[', ',', '.', '=', '>', '<', '?', '==', '<=', '>=', '!=', '&&', '||', '++', '--', '+', '-', '*', '/', '&', '|', '^', '%', '+=', '-=', '*=', '/=', '&=', '|=', '^=', '%=', '<<=', '>>=', '>>>=', '::'}], Message [id=2, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=0, column=0
   text=], Message [id=3, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=0, column=0
   text=Parser returned a null Package]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.NamedConsequencesTest.testIfElseWithMvelAccessor(NamedConsequencesTest.java:221)

Update PR template

Update PR template to meet:

  1. Remove old kiegroup specific guidance
  2. Suggest to link github issue rather than JIRA

[new-parser] rule super_key failed predicate

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.NodeSharingTest#testShareAccumulate

Notes

  • STANDARD_FROM_DRL only.

Rule code snippet

  accumulate ( $p: Person ( getName().startsWith(\"M\") );
                $sum : sum($p.getAge())
              )

Error output

### parse : ANTLR4_PARSER_ENABLED = true
line 1:10 rule super_key failed predicate: {(helper.validateIdentifierKey(DroolsSoftKeywords.SUPER))}?
line 1:10 rule super_key failed predicate: {(helper.validateIdentifierKey(DroolsSoftKeywords.SUPER))}?
21:44:44.693 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:defaultKieBase
Unable to Analyse Expression getName().:
Index 10 out of bounds for length 10 : [Rule name='X1']



java.lang.AssertionError: [Message [id=1, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=-1, column=0
   text=Unable to Analyse Expression getName().:
Index 10 out of bounds for length 10]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.NodeSharingTest.testShareAccumulate(NodeSharingTest.java:345)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
	at java.base/java.lang.reflect.Method.invoke(Method.java:577)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.junit.runners.Suite.runChild(Suite.java:128)
	at org.junit.runners.Suite.runChild(Suite.java:27)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
	at org.junit.vintage.engine.execution.RunnerExecutor.execute(RunnerExecutor.java:42)
	at org.junit.vintage.engine.VintageTestEngine.executeAllChildren(VintageTestEngine.java:80)
	at org.junit.vintage.engine.VintageTestEngine.execute(VintageTestEngine.java:72)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
	at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
	at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53)
	at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
	at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232)
	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)

[new-parser] `end` with succeeding `rule` in the same line fails

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.RuleAttributesTest#testCrossNoLoopWithNodeSharing after fixing #5700

Notes

The new Lexer assumes that end ends with NewLine or EOF. If rule follows in the same line, end is not detected.

For example:

    "end " + // no new line

    "rule 'Rule 2' " +

produces:

	end cannot be resolved to a type
	Syntax error on token ""Rule 2"", = expected
        ...

Complete STANDARD_FROM_DRL output

java.lang.AssertionError: 
[Message [id=1, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=-1, column=0
   text=Rule Compilation error end cannot be resolved to a type
Syntax error on token ""Rule 2"", = expected
agenda cannot be resolved to a variable
The target type of this expression must be a functional interface
Syntax error on token ""End"", -> expected
Syntax error on token "when", ? expected
Syntax error, insert ";" to complete LocalVariableDeclarationStatement
Syntax error on token "then", invalid AssignmentOperator]]
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.RuleAttributesTest.testCrossNoLoopWithNodeSharing(RuleAttributesTest.java:171)

Complete PATTERN_DSL output

11:51:21.111 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:defaultKieBase
InvalidExpressionErrorResult: Unable to parse consequence caused by: (line 2,col 60) Parse error. Found  "\"Rule 2\"" <STRING_LITERAL>, expected one of  "," ";" "=" "@" "["
Problem stacktrace : 
  com.github.javaparser.GeneratedJavaParser.generateParseException(GeneratedJavaParser.java:13933)
  com.github.javaparser.GeneratedJavaParser.jj_consume_token(GeneratedJavaParser.java:13778)
  com.github.javaparser.GeneratedJavaParser.BlockStatement(GeneratedJavaParser.java:5807)
  com.github.javaparser.GeneratedJavaParser.Statements(GeneratedJavaParser.java:2773)
  com.github.javaparser.GeneratedJavaParser.Block(GeneratedJavaParser.java:5744)
  com.github.javaparser.GeneratedJavaParser.BlockParseStart(GeneratedJavaParser.java:8238)
  com.github.javaparser.JavaParser.parse(JavaParser.java:125)
  com.github.javaparser.JavaParser.parseBlock(JavaParser.java:317)
  org.drools.model.codegen.execmodel.generator.DrlxParseUtil.parseBlock(DrlxParseUtil.java:500)
  org.drools.model.codegen.execmodel.generator.Consequence.rewriteConsequence(Consequence.java:229)
  org.drools.model.codegen.execmodel.generator.Consequence.createCall(Consequence.java:143)
  org.drools.model.codegen.execmodel.generator.ModelGenerator.processRule(ModelGenerator.java:242)
  org.drools.model.codegen.execmodel.generator.ModelGenerator.processRuleDescr(ModelGenerator.java:185)
  org.drools.model.codegen.execmodel.generator.ModelGenerator.processRules(ModelGenerator.java:164)
  org.drools.model.codegen.execmodel.generator.ModelGenerator.generateModel(ModelGenerator.java:130)
  org.drools.model.codegen.execmodel.processors.ModelGeneratorPhase.process(ModelGeneratorPhase.java:48)
  org.drools.compiler.builder.impl.processors.IteratingPhase.process(IteratingPhase.java:53)
  org.drools.model.codegen.execmodel.processors.ModelMainCompilationPhase.process(ModelMainCompilationPhase.java:104)
  org.drools.model.codegen.execmodel.ModelBuilderImpl.doSecondBuildStep(ModelBuilderImpl.java:114)
  org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:125)
  org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:109)
  org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:274)
  org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:220)
  org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:84)
  org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:285)
  org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:251)
  org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:208)
  org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:149)
  org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
  org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
  org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
  org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
  org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
  org.drools.model.codegen.execmodel.RuleAttributesTest.testCrossNoLoopWithNodeSharing(RuleAttributesTest.java:171)

[new-parser] Broken OOPath expressions

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.QueryTest#testQueryWithOOPath
  • org.drools.model.codegen.execmodel.OOPathTest

Notes

  • Both STANDARD_FROM_DRL and PATTERN_DSL.

Rule code snippet

query listSafeCities
$cities : List() from accumulate (Person ( $city: /address#InternationalAddress[state == "Safecountry"]/city), collectList($city))
end

Error output

### parse : ANTLR4_PARSER_ENABLED = true
line 2:50 no viable alternative at input '(Person ( $city: /'
line 2:50 no viable alternative at input '$city: /'
line 2:50 extraneous input '/' expecting {'unit', 'function', 'global', 'declare', 'rule', 'query', 'when', 'then', 'end', 'and', 'or', 'exists', 'not', 'in', 'from', 'matches', 'memberOf', 'accumulate', 'acc', 'init', 'action', 'reverse', 'result', 'entry-point', 'eval', 'salience', 'enabled', 'no-loop', 'auto-focus', 'lock-on-active', 'refract', 'direct', 'agenda-group', 'activation-group', 'ruleflow-group', 'date-effective', 'date-expires', 'dialect', 'calendars', 'timer', 'duration', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', '(', '?', IDENTIFIER}
line 2:58 mismatched input '#' expecting {'(', '.'}
line 2:129 extraneous input ')' expecting {'unit', 'function', 'global', 'declare', 'rule', 'query', 'when', 'then', 'end', 'and', 'or', 'exists', 'not', 'in', 'from', 'matches', 'memberOf', 'accumulate', 'acc', 'init', 'action', 'reverse', 'result', 'entry-point', 'eval', 'forall', 'salience', 'enabled', 'no-loop', 'auto-focus', 'lock-on-active', 'refract', 'direct', 'agenda-group', 'activation-group', 'ruleflow-group', 'date-effective', 'date-expires', 'dialect', 'calendars', 'timer', 'duration', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', '(', '?', IDENTIFIER}
21:45:06.913 [main] ERROR o.d.d.parser.antlr4.DRLParserWrapper.parse:77 - Exception while creating PackageDescr
java.lang.IllegalStateException: ctx.lhsPattern().size() == 0 : 
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsPatternBind(DRLVisitorImpl.java:441)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsPatternBind(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$LhsPatternBindContext.accept(DRLParser.java:1961)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:795)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsUnary(DRLVisitorImpl.java:775)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsUnary(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$LhsUnaryContext.accept(DRLParser.java:1862)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:795)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.lambda$visitQuerydef$4(DRLVisitorImpl.java:307)
	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitQuerydef(DRLVisitorImpl.java:308)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitQuerydef(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$QuerydefContext.accept(DRLParser.java:1321)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
	at org.drools.drl.parser.antlr4.DRLParserBaseVisitor.visitDrlStatementdef(DRLParserBaseVisitor.java:27)
	at org.drools.drl.parser.antlr4.DRLParser$DrlStatementdefContext.accept(DRLParser.java:405)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:795)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitCompilationUnit(DRLVisitorImpl.java:91)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitCompilationUnit(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$CompilationUnitContext.accept(DRLParser.java:318)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:18)
	at org.drools.drl.parser.antlr4.DRLParserHelper.compilationUnitContext2PackageDescr(DRLParserHelper.java:87)
	at org.drools.drl.parser.antlr4.DRLParserWrapper.parse(DRLParserWrapper.java:75)
	at org.drools.drl.parser.antlr4.DRLParserWrapper.parse(DRLParserWrapper.java:55)
	at org.drools.drl.parser.DrlParser.lambda$parse$2(DrlParser.java:189)
	at org.drools.drl.parser.DrlParser.compileWithAntlr4Parser(DrlParser.java:202)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:189)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:177)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:166)
	at org.drools.compiler.builder.impl.resources.DrlResourceHandler.process(DrlResourceHandler.java:55)
	at org.drools.compiler.builder.impl.PackageDescrBuilder.buildResource(PackageDescrBuilder.java:73)
	at org.drools.compiler.builder.impl.PackageDescrBuilder.build(PackageDescrBuilder.java:51)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackageDescr(CompositeKnowledgeBuilderImpl.java:173)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:116)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:109)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:274)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:220)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:84)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:285)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:251)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:208)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:151)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.QueryTest.testQueryWithOOPath(QueryTest.java:300)
21:45:06.913 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:defaultKieBase
[2,50]: no viable alternative at input '(Person ( $city: /'
[2,50]: no viable alternative at input '$city: /'
[2,50]: extraneous input '/' expecting {'unit', 'function', 'global', 'declare', 'rule', 'query', 'when', 'then', 'end', 'and', 'or', 'exists', 'not', 'in', 'from', 'matches', 'memberOf', 'accumulate', 'acc', 'init', 'action', 'reverse', 'result', 'entry-point', 'eval', 'salience', 'enabled', 'no-loop', 'auto-focus', 'lock-on-active', 'refract', 'direct', 'agenda-group', 'activation-group', 'ruleflow-group', 'date-effective', 'date-expires', 'dialect', 'calendars', 'timer', 'duration', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', '(', '?', IDENTIFIER}
[2,58]: mismatched input '#' expecting {'(', '.'}
[2,129]: extraneous input ')' expecting {'unit', 'function', 'global', 'declare', 'rule', 'query', 'when', 'then', 'end', 'and', 'or', 'exists', 'not', 'in', 'from', 'matches', 'memberOf', 'accumulate', 'acc', 'init', 'action', 'reverse', 'result', 'entry-point', 'eval', 'forall', 'salience', 'enabled', 'no-loop', 'auto-focus', 'lock-on-active', 'refract', 'direct', 'agenda-group', 'activation-group', 'ruleflow-group', 'date-effective', 'date-expires', 'dialect', 'calendars', 'timer', 'duration', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', '(', '?', IDENTIFIER}
[0,0]: 
[0,0]: Parser returned a null Package


java.lang.AssertionError: [Message [id=1, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=2, column=0
   text=no viable alternative at input '(Person ( $city: /'], Message [id=2, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=2, column=0
   text=no viable alternative at input '$city: /'], Message [id=3, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=2, column=0
   text=extraneous input '/' expecting {'unit', 'function', 'global', 'declare', 'rule', 'query', 'when', 'then', 'end', 'and', 'or', 'exists', 'not', 'in', 'from', 'matches', 'memberOf', 'accumulate', 'acc', 'init', 'action', 'reverse', 'result', 'entry-point', 'eval', 'salience', 'enabled', 'no-loop', 'auto-focus', 'lock-on-active', 'refract', 'direct', 'agenda-group', 'activation-group', 'ruleflow-group', 'date-effective', 'date-expires', 'dialect', 'calendars', 'timer', 'duration', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', '(', '?', IDENTIFIER}], Message [id=4, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=2, column=0
   text=mismatched input '#' expecting {'(', '.'}], Message [id=5, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=2, column=0
   text=extraneous input ')' expecting {'unit', 'function', 'global', 'declare', 'rule', 'query', 'when', 'then', 'end', 'and', 'or', 'exists', 'not', 'in', 'from', 'matches', 'memberOf', 'accumulate', 'acc', 'init', 'action', 'reverse', 'result', 'entry-point', 'eval', 'forall', 'salience', 'enabled', 'no-loop', 'auto-focus', 'lock-on-active', 'refract', 'direct', 'agenda-group', 'activation-group', 'ruleflow-group', 'date-effective', 'date-expires', 'dialect', 'calendars', 'timer', 'duration', 'module', 'open', 'requires', 'exports', 'opens', 'to', 'uses', 'provides', 'with', 'transitive', 'var', 'yield', 'record', 'sealed', 'permits', '(', '?', IDENTIFIER}], Message [id=6, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=0, column=0
   text=], Message [id=7, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=0, column=0
   text=Parser returned a null Package]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.QueryTest.testQueryWithOOPath(QueryTest.java:300)

Comptability issue with Spring-boot 3.2

I am opening this issue so the others could be aware when upgrading to spring-boot 3.2.

On spring-boot, it was added nested jar support, it seems that this causes problem when Kie needs to find kmodule.xml

logs of the problem:

2024-02-26T15:37:23.303Z  INFO 1 --- [microservice-x] [  XNIO-1 task-2] o.d.c.k.b.impl.ClasspathKieProject       : Found kmodule: jar:nested:/srv/app.jar/!BOOT-INF/lib/x-module-0.0.1-SNAPSHOT-plain.jar!/META-INF/kmodule.xml
2024-02-26T15:37:23.619Z  WARN 1 --- [microservice-x] [  XNIO-1 task-2] o.d.c.k.b.impl.ClasspathKieProject       : Unable to find pom.properties in /srv/app.jar/!BOOT-INF/lib/x-module-0.0.1-SNAPSHOT-plain.jar
2024-02-26T15:37:23.621Z  WARN 1 --- [microservice-x] [  XNIO-1 task-2] o.d.c.k.b.impl.ClasspathKieProject       : As folder project tried to fall back to pom.xml, but could not find one
2024-02-26T15:37:23.621Z  WARN 1 --- [microservice-x] [  XNIO-1 task-2] o.d.c.k.b.impl.ClasspathKieProject       : Unable to load pom.properties from/srv/app.jar/!BOOT-INF/lib/x-module-0.0.1-SNAPSHOT-plain.jar
2024-02-26T15:37:23.621Z  WARN 1 --- [microservice-x] [  XNIO-1 task-2] o.d.c.k.b.impl.ClasspathKieProject       : Cannot find maven pom properties for this project. Using the container's default ReleaseId
2024-02-26T15:37:23.623Z  INFO 1 --- [microservice-x] [  XNIO-1 task-2] o.d.c.k.b.i.InternalKieModuleProvider    : Creating KieModule for artifact org.default:artifact:1.0.0
2024-02-26T15:37:23.645Z ERROR 1 --- [microservice-x] [  XNIO-1 task-2] o.d.c.k.b.impl.ClasspathKieProject       : Unable to build index of kmodule.xml url=jar:nested:/srv/app.jar/!BOOT-INF/lib/x-module-0.0.1-SNAPSHOT-plain.jar!/META-INF/kmodule.xml Range [57, 56) out of bounds for length 56
2024-02-26T15:37:23.652Z ERROR 1 --- [microservice-x] [  XNIO-1 task-2] x.d.ExceptionHandler    : RuntimeException java.lang.RuntimeException: Cannot find a default KieSession

after adding the option bellow on build.gradle

bootJar {
  loaderImplementation = org.springframework.boot.loader.tools.LoaderImplementation.CLASSIC
}

logs after applying the LoaderImplementation.CLASSIC

2024-02-26T15:48:52.940Z  INFO 1 --- [microservice-x] [  XNIO-1 task-2] o.d.c.k.b.impl.ClasspathKieProject       : Found kmodule: jar:file:/srv/app.jar!/BOOT-INF/lib/x-module-0.0.1-SNAPSHOT-plain.jar!/META-INF/kmodule.xml
2024-02-26T15:48:53.269Z  WARN 1 --- [microservice-x] [  XNIO-1 task-2] o.d.c.k.b.impl.ClasspathKieProject       : Unable to load pom.properties from/srv/app.jar!/BOOT-INF/lib/x-module-0.0.1-SNAPSHOT-plain.jar
2024-02-26T15:48:53.269Z  WARN 1 --- [microservice-x] [  XNIO-1 task-2] o.d.c.k.b.impl.ClasspathKieProject       : Cannot find maven pom properties for this project. Using the container's default ReleaseId
2024-02-26T15:48:53.271Z  INFO 1 --- [microservice-x] [  XNIO-1 task-2] o.d.c.k.b.i.InternalKieModuleProvider    : Creating KieModule for artifact org.default:artifact:1.0.0
2024-02-26T15:48:53.285Z  INFO 1 --- [microservice-x] [  XNIO-1 task-2] o.d.c.kie.builder.impl.KieContainerImpl  : Start creation of KieBase: defaultKieBase
2024-02-26T15:48:54.647Z  INFO 1 --- [microservice-x] [  XNIO-1 task-2] o.d.c.kie.builder.impl.KieContainerImpl  : End creation of KieBase: defaultKieBase

Update drools documentation : Bring back traditional DRL syntax explanation

https://kie.zulipchat.com/#narrow/stream/232677-drools/topic/How.20long.20Drools.20.3E8.20will.20support.20old.20rule.20syntax.3F/near/405766768

When we were about to release Drools 8, we wanted to promote RuleUnit, so reduced the part about traditional syntax in the documentation. However, I feel it's better to bring the traditional syntax explanations back to the document so that you don't need to refer old version docs.

Acceptance Criteria:
Bring the traditional DRL syntax examples/explanations in the Rule Language Reference chapter.

[new-parser] `this` keyword not handled correctly

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.NodeSharingTest#testShareCombinedConstraintAnd

Notes

  • STANDARD_FROM_DRL only.

Rule code snippet

    $b : StockTick( company == "ACME" && this after[5s,8s] $a )

Error output

### parse : ANTLR4_PARSER_ENABLED = true
line 1:21 mismatched input 'this' expecting {TIME_INTERVAL, DRL_STRING_LITERAL, '?/', DECIMAL_LITERAL, HEX_LITERAL, FLOAT_LITERAL, BOOL_LITERAL, STRING_LITERAL, 'null', '(', '[', '.', '<', '!', '~', '++', '--', '+', '-', '*', '/', '@', IDENTIFIER}
line 1:21 mismatched input 'this' expecting {TIME_INTERVAL, DRL_STRING_LITERAL, '?/', DECIMAL_LITERAL, HEX_LITERAL, FLOAT_LITERAL, BOOL_LITERAL, STRING_LITERAL, 'null', '(', '[', '.', '<', '!', '~', '++', '--', '+', '-', '*', '/', '@', IDENTIFIER}
fired
fired
fired
fired

org.opentest4j.AssertionFailedError: 
expected: 0
 but was: 2
Expected :0
Actual   :2
<Click to see difference>


	at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:67)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	at org.drools.model.codegen.execmodel.NodeSharingTest.testShareCombinedConstraintAnd(NodeSharingTest.java:487)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
	at java.base/java.lang.reflect.Method.invoke(Method.java:577)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.junit.runners.Suite.runChild(Suite.java:128)
	at org.junit.runners.Suite.runChild(Suite.java:27)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
	at org.junit.vintage.engine.execution.RunnerExecutor.execute(RunnerExecutor.java:42)
	at org.junit.vintage.engine.VintageTestEngine.executeAllChildren(VintageTestEngine.java:80)
	at org.junit.vintage.engine.VintageTestEngine.execute(VintageTestEngine.java:72)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
	at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
	at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53)
	at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
	at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232)
	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)

Experiment: New DRL Parser : Test failure : Unknown language level

Parent issue: #5678

For example, KnowledgeBuilderTest.testWarnOnFunctionReplacementand some other tests fail with

java.lang.RuntimeException: Unknown language level
	at org.drools.drl.parser.DRLFactory.getDRLParser(DRLFactory.java:109)
	at org.drools.drl.parser.DRLFactory.buildParser(DRLFactory.java:71)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:87)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:93)
	at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.addPackageFromDrl(KnowledgeBuilderImpl.java:314)
	at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.addPackageFromDrl(KnowledgeBuilderImpl.java:300)

It means DrlParser and DRLFactory require more (hopefully clean) integration with the new parser.

Remove productized profile from Drools

The productized profile is legacy (product related) and needs to be removed from Drools.

It is currently used for managing modules that should not be in default profile and also holds some workaround that was previous required by Quarkus 2.13.x LTS.

[new-parser] Broken PropertyReactivityTest: `@watch()` annotation not recognized

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.PropertyReactivityTest#testWatch

Notes

  • Both STANDARD_FROM_DRL and PATTERN_DSL.

Rule code snippet

    $p : Person( age < 50 ) @watch(!age)

Error output

### parse : ANTLR4_PARSER_ENABLED = true
line 4:28 mismatched input '@' expecting {'not', 'in', 'matches', 'memberOf', 'after', 'before', 'coincides', 'during', 'includes', 'finishes', 'finishedby', 'meets', 'metby', 'overlaps', 'overlappedby', 'starts', 'startedby', ':=', 'instanceof', ')', '[', ',', '.', '=', '>', '<', '?', '==', '<=', '>=', '!=', '&&', '||', '++', '--', '+', '-', '*', '/', '&', '|', '^', '%', '+=', '-=', '*=', '/=', '&=', '|=', '^=', '%=', '<<=', '>>=', '>>>=', '::'}
14:50:10.891 [main] ERROR o.d.d.parser.antlr4.DRLParserWrapper.parse:77 - Exception while creating PackageDescr
org.drools.drl.parser.antlr4.DRLParserException: rhs has to start with 'then' : rhs = @watch(!age)
then
    modify($p) { setAge( $p.getAge()+1 ) };
	at org.drools.drl.parser.antlr4.ParserStringUtils.trimThen(ParserStringUtils.java:78)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitRuledef(DRLVisitorImpl.java:268)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitRuledef(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$RuledefContext.accept(DRLParser.java:1221)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
	at org.drools.drl.parser.antlr4.DRLParserBaseVisitor.visitDrlStatementdef(DRLParserBaseVisitor.java:27)
	at org.drools.drl.parser.antlr4.DRLParser$DrlStatementdefContext.accept(DRLParser.java:405)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:797)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitCompilationUnit(DRLVisitorImpl.java:91)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitCompilationUnit(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$CompilationUnitContext.accept(DRLParser.java:318)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:18)
	at org.drools.drl.parser.antlr4.DRLParserHelper.compilationUnitContext2PackageDescr(DRLParserHelper.java:87)
	at org.drools.drl.parser.antlr4.DRLParserWrapper.parse(DRLParserWrapper.java:75)
	at org.drools.drl.parser.antlr4.DRLParserWrapper.parse(DRLParserWrapper.java:55)
	at org.drools.drl.parser.DrlParser.lambda$parse$2(DrlParser.java:189)
	at org.drools.drl.parser.DrlParser.compileWithAntlr4Parser(DrlParser.java:202)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:189)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:177)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:166)
	at org.drools.compiler.builder.impl.resources.DrlResourceHandler.process(DrlResourceHandler.java:55)
	at org.drools.compiler.builder.impl.PackageDescrBuilder.buildResource(PackageDescrBuilder.java:73)
	at org.drools.compiler.builder.impl.PackageDescrBuilder.build(PackageDescrBuilder.java:51)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackageDescr(CompositeKnowledgeBuilderImpl.java:173)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:116)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:109)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:274)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:220)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:84)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:285)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:251)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:208)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:151)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.PropertyReactivityTest.testWatch(PropertyReactivityTest.java:142)
14:50:10.892 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:defaultKieBase
[4,28]: mismatched input '@' expecting {'not', 'in', 'matches', 'memberOf', 'after', 'before', 'coincides', 'during', 'includes', 'finishes', 'finishedby', 'meets', 'metby', 'overlaps', 'overlappedby', 'starts', 'startedby', ':=', 'instanceof', ')', '[', ',', '.', '=', '>', '<', '?', '==', '<=', '>=', '!=', '&&', '||', '++', '--', '+', '-', '*', '/', '&', '|', '^', '%', '+=', '-=', '*=', '/=', '&=', '|=', '^=', '%=', '<<=', '>>=', '>>>=', '::'}
[0,0]: 
[0,0]: Parser returned a null Package


java.lang.AssertionError: [Message [id=1, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=4, column=0
   text=mismatched input '@' expecting {'not', 'in', 'matches', 'memberOf', 'after', 'before', 'coincides', 'during', 'includes', 'finishes', 'finishedby', 'meets', 'metby', 'overlaps', 'overlappedby', 'starts', 'startedby', ':=', 'instanceof', ')', '[', ',', '.', '=', '>', '<', '?', '==', '<=', '>=', '!=', '&&', '||', '++', '--', '+', '-', '*', '/', '&', '|', '^', '%', '+=', '-=', '*=', '/=', '&=', '|=', '^=', '%=', '<<=', '>>=', '>>>=', '::'}], Message [id=2, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=0, column=0
   text=], Message [id=3, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=0, column=0
   text=Parser returned a null Package]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.PropertyReactivityTest.testWatch(PropertyReactivityTest.java:142)

[new-parser] Grouped accessors for nested objects broken

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.CompilerTest#testChainOfMethodCallInConstraintSub

Notes

  • PATTERN_DSL only.

Rule code snippet

  $p : Person( address.(city.startsWith("I") &&  city.length() == 5  ) )

Error output

### parse : ANTLR4_PARSER_ENABLED = true

java.lang.AssertionError: [Message [id=1, level=ERROR, path=src/main/java/defaultpkg/PFA/LambdaPredicateFAECF003FA1F7B02276D174B3E3A28E2.java, line=22, column=809
   text=Type mismatch: cannot convert from Address to boolean], Message [id=2, level=ERROR, path=src/main/java/defaultpkg/PFA/LambdaPredicateFAECF003FA1F7B02276D174B3E3A28E2.java, line=0, column=0
   text=Java source of src/main/java/defaultpkg/PFA/LambdaPredicateFAECF003FA1F7B02276D174B3E3A28E2.java in error:
package defaultpkg.PFA;


import static defaultpkg.Rules029EE342789B9ECE6C6C0AEA5F2505EC.*;
import org.drools.model.codegen.execmodel.domain.Person;
import defaultpkg.*;
import org.drools.modelcompiler.dsl.pattern.D;

@org.drools.compiler.kie.builder.MaterializedLambda()
public enum LambdaPredicateFAECF003FA1F7B02276D174B3E3A28E2 implements org.drools.model.functions.Predicate1<org.drools.model.codegen.execmodel.domain.Person>, org.drools.model.functions.HashedExpression {

    INSTANCE;

    public static final String EXPRESSION_HASH = "8D259D9F1DDB57E5CB829B926CC8A8B4";

    public java.lang.String getExpressionHash() {
        return EXPRESSION_HASH;
    }

    @Override()
    public boolean test(org.drools.model.codegen.execmodel.domain.Person _this) throws java.lang.Exception {
        return _this.getAddress();
    }

    @Override()
    public org.drools.model.functions.PredicateInformation predicateInformation() {
        org.drools.model.functions.PredicateInformation info = new org.drools.model.functions.PredicateInformation("address.(city.startsWith(\"I\") &&  city.length() == 5  )");
        info.addRuleNames("R", "r0.drl");
        return info;
    }
}
]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.CompilerTest.testChainOfMethodCallInConstraintSub(CompilerTest.java:990)

Refactor and Cleanup Left and Right Tuple to address Super Cache issues

The super cache fix work has shown a need to change how we work with certain classes and interfaces. This preliminary work moves a few places to use concrete classes and and cast where necessary. This work has demonstrated performance improvements - however, it's left the code in a place where it sometimes uses interfaces and sometimes uses concrete classes. Further, without an interface-only approach, the current code will make it impossible to do bi-linear networks, which would improve network sharing.

The following code refactors Left and Right Tuples to promote and use concrete classes everywhere. IT further centralises and expands on the Super Cache fixer code, to ensure casts are used based on switches rather than the previous chained if statements. The code reworks NodeTypeEnums, to include more information (at no extra cost), this allows a large number of instanceof uses too be removed - although it's not clear if Sink.getType or NetworkNode.getType() is slow, i.e. should we cast to BaseNode always before calling getType().

Lastly the code improves the api around LinkedLists and the supporting classes and interfaces. Making DoubleLinkedEntry extend SingleLinkedEntry and further making all classes extend those. This also results in simplifications for TupleLists.

What I will explore next is if FactHandle could now just extend TupleImpl, too, instead of using the separate LinkedTuples classes.

There should be no changes in functionality or behaviour from this code, all tests pass. However at some point some soak testing may be good, to check not regressions in performance or memory usage.

Move tuple order correction from runtime to network build time

DROOLS-17 Introduced the fix to ensure Tuples are added in order when dynamic rules are added. However, it does this at runtime when a tuple is added, not just at network build time.

This improvement is to move this fix back into network build time. It does this by hooking into the sink adapter and detaching tuples after the otn-id. After the propagation through the sink adapter is finished, it will reattach any detached tuples.

My other motivation for this is I was looking at making FactHandle extend TupleImpl, and this work makes that simpler - as it's creating less special behaviour at runtime.

[new-parser] Unexpected global

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.GroupByTest#providedInstance

Notes

  • Both STANDARD_FROM_DRL and PATTERN_DSL.

Rule code snippet

import java.util.Map;
global Map results;
rule X when

Error output

### parse : ANTLR4_PARSER_ENABLED = true

java.lang.RuntimeException: Unexpected global [results]

	at org.drools.kiesession.session.StatefulKnowledgeSessionImpl.setGlobal(StatefulKnowledgeSessionImpl.java:968)
	at org.drools.model.codegen.execmodel.GroupByTest.lambda$providedInstance$2(GroupByTest.java:88)
	at org.drools.model.codegen.execmodel.GroupByTest.lambda$assertSessionHasProperties$0(GroupByTest.java:63)

[new-parser] Array initialization fails

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.ComplexRulesTest#test1

Notes

  • STANDARD_FROM_DRL only.

Rule code snippet

not ( 
        $policySet_not : ChildFactWithObject ( 
            id == $childFactWithObject.id , 
            eval(true == functions.arrayContainsInstanceWithParameters((Object[])$policySet_not.getObjectValue(), new Object[]{"getMessageId", "42103"}))
        )
    )

Error output

### parse : ANTLR4_PARSER_ENABLED = true
line 1:97 extraneous input 'new' expecting {TIME_INTERVAL, DRL_STRING_LITERAL, '?/', DECIMAL_LITERAL, HEX_LITERAL, FLOAT_LITERAL, BOOL_LITERAL, STRING_LITERAL, 'null', '(', '[', '.', '<', '!', '~', '++', '--', '+', '-', '*', '/', IDENTIFIER}
line 1:109 no viable alternative at input 'Object[]{'
21:45:15.378 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:defaultKieBase
Unable to Analyse Expression true == functions.arrayContainsInstanceWithParameters((Object[])$policySet_not.getObjectValue(), new:
[Error: unbalanced braces ( ... )]
[Near : {... stanceWithParameters((Object[])$policySet_not.getO ....}]
                                                         ^ : [Rule name='R1']



java.lang.AssertionError: [Message [id=1, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=-1, column=0
   text=Unable to Analyse Expression true == functions.arrayContainsInstanceWithParameters((Object[])$policySet_not.getObjectValue(), new:
[Error: unbalanced braces ( ... )]
[Near : {... stanceWithParameters((Object[])$policySet_not.getO ....}]
                                                         ^]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.ComplexRulesTest.testComplexRule(ComplexRulesTest.java:158)
	at org.drools.model.codegen.execmodel.ComplexRulesTest.test1(ComplexRulesTest.java:103)

[docs] Add explanation for DRL declared Rule Unit

Issue

Reported in https://stackoverflow.com/questions/78042892/drools-drl-rule-unit-with-ruleunitdata-declaration-isnt-working

Rule units in DRL
https://docs.drools.org/8.44.0.Final/drools-docs/drools/language-reference/index.html#con-drl-rule-units_drl-rules

DRL declared Rule Unit is meaningful only when you also auto-generate the application java code to use the generated RuleUnit, because the class doesn't exist until the project is built by maven. Such a use case can be found in drools-quarkus integration which also generates REST endpoint (https://github.com/apache/incubator-kie-drools/blob/main/drools-quarkus-extension/drools-quarkus-ruleunit-integration-test/src/main/resources/org/drools/quarkus/ruleunit/test/AlertingService.drl).

Add explanation not to confuse users.

[new-parser] no viable alternative after `contains` operator

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.CompilerTest#testHashSet

Notes

  • Both STANDARD_FROM_DRL and PATTERN_DSL.
  • See also org.drools.model.codegen.execmodel.MvelOperatorsTest that has failures related to other operators like excludes and str.

Rule code snippet

  $a : Application(categories contains "hello")

Error output

### parse : ANTLR4_PARSER_ENABLED = true
line 15:39 no viable alternative at input 'categories contains "hello"'
21:44:57.511 [main] ERROR o.d.d.parser.antlr4.DRLParserWrapper.parse:77 - Exception while creating PackageDescr
java.lang.IllegalStateException: ctx.lhsPattern().size() == 0 : 
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsPatternBind(DRLVisitorImpl.java:441)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsPatternBind(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$LhsPatternBindContext.accept(DRLParser.java:1961)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:795)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsUnary(DRLVisitorImpl.java:775)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsUnary(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$LhsUnaryContext.accept(DRLParser.java:1862)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
	at org.drools.drl.parser.antlr4.DRLParserBaseVisitor.visitLhsUnarySingle(DRLParserBaseVisitor.java:139)
	at org.drools.drl.parser.antlr4.DRLParser$LhsUnarySingleContext.accept(DRLParser.java:1515)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:795)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhs(DRLVisitorImpl.java:428)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitRuledef(DRLVisitorImpl.java:259)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitRuledef(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$RuledefContext.accept(DRLParser.java:1221)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
	at org.drools.drl.parser.antlr4.DRLParserBaseVisitor.visitDrlStatementdef(DRLParserBaseVisitor.java:27)
	at org.drools.drl.parser.antlr4.DRLParser$DrlStatementdefContext.accept(DRLParser.java:405)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:795)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitCompilationUnit(DRLVisitorImpl.java:91)
	at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitCompilationUnit(DRLVisitorImpl.java:74)
	at org.drools.drl.parser.antlr4.DRLParser$CompilationUnitContext.accept(DRLParser.java:318)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:18)
	at org.drools.drl.parser.antlr4.DRLParserHelper.compilationUnitContext2PackageDescr(DRLParserHelper.java:87)
	at org.drools.drl.parser.antlr4.DRLParserWrapper.parse(DRLParserWrapper.java:75)
	at org.drools.drl.parser.antlr4.DRLParserWrapper.parse(DRLParserWrapper.java:55)
	at org.drools.drl.parser.DrlParser.lambda$parse$2(DrlParser.java:189)
	at org.drools.drl.parser.DrlParser.compileWithAntlr4Parser(DrlParser.java:202)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:189)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:177)
	at org.drools.drl.parser.DrlParser.parse(DrlParser.java:166)
	at org.drools.compiler.builder.impl.resources.DrlResourceHandler.process(DrlResourceHandler.java:55)
	at org.drools.compiler.builder.impl.PackageDescrBuilder.buildResource(PackageDescrBuilder.java:73)
	at org.drools.compiler.builder.impl.PackageDescrBuilder.build(PackageDescrBuilder.java:51)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackageDescr(CompositeKnowledgeBuilderImpl.java:173)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:116)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:109)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:274)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:220)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:84)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:285)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:251)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:208)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:151)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.CompilerTest.testHashSet(CompilerTest.java:2742)
21:44:57.514 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:defaultKieBase
[15,39]: no viable alternative at input 'categories contains "hello"'
[0,0]: 
[0,0]: Parser returned a null Package


java.lang.AssertionError: [Message [id=1, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=15, column=0
   text=no viable alternative at input 'categories contains "hello"'], Message [id=2, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=0, column=0
   text=], Message [id=3, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=0, column=0
   text=Parser returned a null Package]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.CompilerTest.testHashSet(CompilerTest.java:2742)

[new-parser] Broken cron and interval timer attributes

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.CepTest#testCalendarsWithCronAndStartAndEnd
  • org.drools.model.codegen.execmodel.CepTest#testIntervalTimer

Notes

  • PATTERN_DSL only.

Rule code snippet

rule xxx
  timer (cron: 0 0 0 * * ?) 

Error output

### parse : ANTLR4_PARSER_ENABLED = true
14:50:02.849 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:kb
InvalidExpressionErrorResult: (cron: 0 0 0 * * ?)


java.lang.AssertionError: [Message [id=1, kieBase=kb, level=ERROR, path=r0.drl, line=-1, column=0
   text=(cron: 0 0 0 * * ?)]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.CepTest.testCalendarsWithCronAndStartAndEnd(CepTest.java:1223)

[new-parser] Can't use single-quoted Strings in RHS

Parent issue

Failing tests

  • org.drools.model.codegen.execmodel.RuleAttributesTest#testCrossNoLoopWithNodeSharing
  • org.drools.model.codegen.execmodel.CompilerTest#testPrettyPrinterCrashing - uses MVEL dialect

Notes

Single quotes are allowed not only for single characters but also for Strings in DRL. The new parsers doesn't handle single-quoted Strings in RHS correctly. For example in:

...
"  then\n" +
"      System.out.println( 'At 1' ); " +
...

produces:

line 2:28 mismatched character 't' expecting '''

Note that we can see different error output in STANDARD_FROM_DRL and PATTERN_DSL versions of the test. The error is also different when the rule uses the MVEL dialect.

Complete STANDARD_FROM_DRL output

### parse : ANTLR4_PARSER_ENABLED = true
line 2:28 mismatched character 't' expecting '''
line 2:33 mismatched character ')' expecting '''
line 2:72 mismatched character 'u' expecting '''
line 2:79 mismatched character ' ' expecting '''
line 2:96 mismatched character 'n' expecting '''
line 2:100 mismatched character ' ' expecting '''
line 2:203 mismatched character 't' expecting '''
line 2:208 mismatched character ')' expecting '''
21:44:42.328 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:defaultKieBase
Rule Compilation error : [Rule name='Rule 1']
	Invalid character constant



java.lang.AssertionError: [Message [id=1, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=-1, column=0
   text=Rule Compilation error Invalid character constant]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.RuleAttributesTest.testCrossNoLoopWithNodeSharing(RuleAttributesTest.java:171)

Complete PATTERN_DSL output

### parse : ANTLR4_PARSER_ENABLED = true
21:44:43.540 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:defaultKieBase
InvalidExpressionErrorResult: Unable to parse consequence caused by: Lexical error at line 2, column 23.  Encountered: "t" (116), after : "\'A"
Problem stacktrace : 
  com.github.javaparser.GeneratedJavaParserTokenManager.getNextToken(GeneratedJavaParserTokenManager.java:3130)
  com.github.javaparser.GeneratedJavaParser.jj_ntk_f(GeneratedJavaParser.java:13836)
  com.github.javaparser.GeneratedJavaParser.Arguments(GeneratedJavaParser.java:5199)
  com.github.javaparser.GeneratedJavaParser.PrimarySuffixWithoutSuper(GeneratedJavaParser.java:5041)
  com.github.javaparser.GeneratedJavaParser.PrimarySuffix(GeneratedJavaParser.java:4986)
  com.github.javaparser.GeneratedJavaParser.PrimaryExpression(GeneratedJavaParser.java:4663)
  com.github.javaparser.GeneratedJavaParser.StatementExpression(GeneratedJavaParser.java:6046)
  com.github.javaparser.GeneratedJavaParser.Statement(GeneratedJavaParser.java:5613)
  com.github.javaparser.GeneratedJavaParser.BlockStatement(GeneratedJavaParser.java:5865)
  com.github.javaparser.GeneratedJavaParser.Statements(GeneratedJavaParser.java:2773)
  com.github.javaparser.GeneratedJavaParser.Block(GeneratedJavaParser.java:5744)
  com.github.javaparser.GeneratedJavaParser.BlockParseStart(GeneratedJavaParser.java:8238)
  com.github.javaparser.JavaParser.parse(JavaParser.java:125)
  com.github.javaparser.JavaParser.parseBlock(JavaParser.java:317)
  org.drools.model.codegen.execmodel.generator.DrlxParseUtil.parseBlock(DrlxParseUtil.java:500)
  org.drools.model.codegen.execmodel.generator.Consequence.rewriteConsequence(Consequence.java:229)
  org.drools.model.codegen.execmodel.generator.Consequence.createCall(Consequence.java:143)
  org.drools.model.codegen.execmodel.generator.ModelGenerator.processRule(ModelGenerator.java:242)
  org.drools.model.codegen.execmodel.generator.ModelGenerator.processRuleDescr(ModelGenerator.java:185)
  org.drools.model.codegen.execmodel.generator.ModelGenerator.processRules(ModelGenerator.java:164)
  org.drools.model.codegen.execmodel.generator.ModelGenerator.generateModel(ModelGenerator.java:130)
  org.drools.model.codegen.execmodel.processors.ModelGeneratorPhase.process(ModelGeneratorPhase.java:48)
  org.drools.compiler.builder.impl.processors.IteratingPhase.process(IteratingPhase.java:53)
  org.drools.model.codegen.execmodel.processors.ModelMainCompilationPhase.process(ModelMainCompilationPhase.java:104)
  org.drools.model.codegen.execmodel.ModelBuilderImpl.doSecondBuildStep(ModelBuilderImpl.java:114)
  org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:125)
  org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:109)
  org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:274)
  org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:220)
  org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:84)
  org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:285)
  org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:251)
  org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:208)
  org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:149)
  org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
  org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
  org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
  org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
  org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
  org.drools.model.codegen.execmodel.RuleAttributesTest.testCrossNoLoopWithNodeSharing(RuleAttributesTest.java:171)



java.lang.AssertionError: [Message [id=1, kieBase=defaultKieBase, level=ERROR, path=r0.drl, line=-1, column=0
   text=Unable to parse consequence caused by: Lexical error at line 2, column 23.  Encountered: "t" (116), after : "\'A"
Problem stacktrace : 
  com.github.javaparser.GeneratedJavaParserTokenManager.getNextToken(GeneratedJavaParserTokenManager.java:3130)
  com.github.javaparser.GeneratedJavaParser.jj_ntk_f(GeneratedJavaParser.java:13836)
  com.github.javaparser.GeneratedJavaParser.Arguments(GeneratedJavaParser.java:5199)
  com.github.javaparser.GeneratedJavaParser.PrimarySuffixWithoutSuper(GeneratedJavaParser.java:5041)
  com.github.javaparser.GeneratedJavaParser.PrimarySuffix(GeneratedJavaParser.java:4986)
  com.github.javaparser.GeneratedJavaParser.PrimaryExpression(GeneratedJavaParser.java:4663)
  com.github.javaparser.GeneratedJavaParser.StatementExpression(GeneratedJavaParser.java:6046)
  com.github.javaparser.GeneratedJavaParser.Statement(GeneratedJavaParser.java:5613)
  com.github.javaparser.GeneratedJavaParser.BlockStatement(GeneratedJavaParser.java:5865)
  com.github.javaparser.GeneratedJavaParser.Statements(GeneratedJavaParser.java:2773)
  com.github.javaparser.GeneratedJavaParser.Block(GeneratedJavaParser.java:5744)
  com.github.javaparser.GeneratedJavaParser.BlockParseStart(GeneratedJavaParser.java:8238)
  com.github.javaparser.JavaParser.parse(JavaParser.java:125)
  com.github.javaparser.JavaParser.parseBlock(JavaParser.java:317)
  org.drools.model.codegen.execmodel.generator.DrlxParseUtil.parseBlock(DrlxParseUtil.java:500)
  org.drools.model.codegen.execmodel.generator.Consequence.rewriteConsequence(Consequence.java:229)
  org.drools.model.codegen.execmodel.generator.Consequence.createCall(Consequence.java:143)
  org.drools.model.codegen.execmodel.generator.ModelGenerator.processRule(ModelGenerator.java:242)
  org.drools.model.codegen.execmodel.generator.ModelGenerator.processRuleDescr(ModelGenerator.java:185)
  org.drools.model.codegen.execmodel.generator.ModelGenerator.processRules(ModelGenerator.java:164)
  org.drools.model.codegen.execmodel.generator.ModelGenerator.generateModel(ModelGenerator.java:130)
  org.drools.model.codegen.execmodel.processors.ModelGeneratorPhase.process(ModelGeneratorPhase.java:48)
  org.drools.compiler.builder.impl.processors.IteratingPhase.process(IteratingPhase.java:53)
  org.drools.model.codegen.execmodel.processors.ModelMainCompilationPhase.process(ModelMainCompilationPhase.java:104)
  org.drools.model.codegen.execmodel.ModelBuilderImpl.doSecondBuildStep(ModelBuilderImpl.java:114)
  org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:125)
  org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:109)
  org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:274)
  org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:220)
  org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:84)
  org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:285)
  org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:251)
  org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:208)
  org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:149)
  org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
  org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
  org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
  org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
  org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
  org.drools.model.codegen.execmodel.RuleAttributesTest.testCrossNoLoopWithNodeSharing(RuleAttributesTest.java:171)
]]

	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:157)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.RuleAttributesTest.testCrossNoLoopWithNodeSharing(RuleAttributesTest.java:171)

Error output for a rule with MVEL dialect

### parse : ANTLR4_PARSER_ENABLED = true

com.github.javaparser.ParseProblemException: Lexical error at line 3, column 21.  Encountered: "l" (108), after : "\'b"
Problem stacktrace : 
  org.drools.mvel.parser.GeneratedMvelParserTokenManager.getNextToken(GeneratedMvelParserTokenManager.java:3591)
  org.drools.mvel.parser.GeneratedMvelParser.jj_scan_token(GeneratedMvelParser.java:16027)
  org.drools.mvel.parser.GeneratedMvelParser.jj_3R_156(GeneratedMvelParser.java:13421)
  org.drools.mvel.parser.GeneratedMvelParser.jj_3R_308(GeneratedMvelParser.java:13225)
  org.drools.mvel.parser.GeneratedMvelParser.jj_3R_245(GeneratedMvelParser.java:13204)
  org.drools.mvel.parser.GeneratedMvelParser.jj_3R_525(GeneratedMvelParser.java:12972)
  org.drools.mvel.parser.GeneratedMvelParser.jj_3R_521(GeneratedMvelParser.java:12781)
  org.drools.mvel.parser.GeneratedMvelParser.jj_3R_517(GeneratedMvelParser.java:12544)
  org.drools.mvel.parser.GeneratedMvelParser.jj_3R_515(GeneratedMvelParser.java:12304)
  org.drools.mvel.parser.GeneratedMvelParser.jj_3R_509(GeneratedMvelParser.java:12153)
  org.drools.mvel.parser.GeneratedMvelParser.jj_3R_496(GeneratedMvelParser.java:11614)
  org.drools.mvel.parser.GeneratedMvelParser.jj_3R_475(GeneratedMvelParser.java:11528)
  org.drools.mvel.parser.GeneratedMvelParser.jj_3R_443(GeneratedMvelParser.java:11395)
  org.drools.mvel.parser.GeneratedMvelParser.jj_3R_383(GeneratedMvelParser.java:11272)
  org.drools.mvel.parser.GeneratedMvelParser.jj_3R_313(GeneratedMvelParser.java:11038)
  org.drools.mvel.parser.GeneratedMvelParser.jj_3R_250(GeneratedMvelParser.java:10839)
  org.drools.mvel.parser.GeneratedMvelParser.jj_3R_163(GeneratedMvelParser.java:10743)
  org.drools.mvel.parser.GeneratedMvelParser.jj_3R_113(GeneratedMvelParser.java:15779)
  org.drools.mvel.parser.GeneratedMvelParser.jj_3R_149(GeneratedMvelParser.java:10915)
  org.drools.mvel.parser.GeneratedMvelParser.jj_3_65(GeneratedMvelParser.java:10821)
  org.drools.mvel.parser.GeneratedMvelParser.jj_2_65(GeneratedMvelParser.java:9971)
  org.drools.mvel.parser.GeneratedMvelParser.Arguments(GeneratedMvelParser.java:5283)
  org.drools.mvel.parser.GeneratedMvelParser.PrimaryPrefix(GeneratedMvelParser.java:4929)
  org.drools.mvel.parser.GeneratedMvelParser.PrimaryExpression(GeneratedMvelParser.java:4640)
  org.drools.mvel.parser.GeneratedMvelParser.StatementExpression(GeneratedMvelParser.java:6012)
  org.drools.mvel.parser.GeneratedMvelParser.Statement(GeneratedMvelParser.java:5604)
  org.drools.mvel.parser.GeneratedMvelParser.BlockStatement(GeneratedMvelParser.java:5872)
  org.drools.mvel.parser.GeneratedMvelParser.Statements(GeneratedMvelParser.java:2640)
  org.drools.mvel.parser.GeneratedMvelParser.Block(GeneratedMvelParser.java:5744)
  org.drools.mvel.parser.GeneratedMvelParser.BlockParseStart(GeneratedMvelParser.java:7998)
  org.drools.mvel.parser.MvelParser.parse(MvelParser.java:140)
  org.drools.mvel.parser.MvelParser.simplifiedParse(MvelParser.java:258)
  org.drools.mvel.parser.MvelParser.parseBlock(MvelParser.java:275)
  org.drools.mvelcompiler.MvelCompiler.compileStatement(MvelCompiler.java:52)
  org.drools.model.codegen.execmodel.generator.Consequence.createExecuteCallMvel(Consequence.java:211)
  org.drools.model.codegen.execmodel.generator.Consequence.createCall(Consequence.java:170)
  org.drools.model.codegen.execmodel.generator.ModelGenerator.processRule(ModelGenerator.java:242)
  org.drools.model.codegen.execmodel.generator.ModelGenerator.processRuleDescr(ModelGenerator.java:185)
  org.drools.model.codegen.execmodel.generator.ModelGenerator.processRules(ModelGenerator.java:164)
  org.drools.model.codegen.execmodel.generator.ModelGenerator.generateModel(ModelGenerator.java:130)
  org.drools.model.codegen.execmodel.processors.ModelGeneratorPhase.process(ModelGeneratorPhase.java:48)
  org.drools.compiler.builder.impl.processors.IteratingPhase.process(IteratingPhase.java:53)
  org.drools.model.codegen.execmodel.processors.ModelMainCompilationPhase.process(ModelMainCompilationPhase.java:104)
  org.drools.model.codegen.execmodel.ModelBuilderImpl.doSecondBuildStep(ModelBuilderImpl.java:114)
  org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:125)
  org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:109)
  org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:274)
  org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:220)
  org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:84)
  org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:285)
  org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:251)
  org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:208)
  org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:149)
  org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
  org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
  org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
  org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
  org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
  org.drools.model.codegen.execmodel.CompilerTest.testPrettyPrinterCrashing(CompilerTest.java:1804)


	at org.drools.mvel.parser.MvelParser.simplifiedParse(MvelParser.java:263)
	at org.drools.mvel.parser.MvelParser.parseBlock(MvelParser.java:275)
	at org.drools.mvelcompiler.MvelCompiler.compileStatement(MvelCompiler.java:52)
	at org.drools.model.codegen.execmodel.generator.Consequence.createExecuteCallMvel(Consequence.java:211)
	at org.drools.model.codegen.execmodel.generator.Consequence.createCall(Consequence.java:170)
	at org.drools.model.codegen.execmodel.generator.ModelGenerator.processRule(ModelGenerator.java:242)
	at org.drools.model.codegen.execmodel.generator.ModelGenerator.processRuleDescr(ModelGenerator.java:185)
	at org.drools.model.codegen.execmodel.generator.ModelGenerator.processRules(ModelGenerator.java:164)
	at org.drools.model.codegen.execmodel.generator.ModelGenerator.generateModel(ModelGenerator.java:130)
	at org.drools.model.codegen.execmodel.processors.ModelGeneratorPhase.process(ModelGeneratorPhase.java:48)
	at org.drools.compiler.builder.impl.processors.IteratingPhase.process(IteratingPhase.java:53)
	at org.drools.model.codegen.execmodel.processors.ModelMainCompilationPhase.process(ModelMainCompilationPhase.java:104)
	at org.drools.model.codegen.execmodel.ModelBuilderImpl.doSecondBuildStep(ModelBuilderImpl.java:114)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:125)
	at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:109)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:274)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:220)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:84)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:285)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:251)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:208)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:149)
	at org.drools.model.codegen.execmodel.BaseModelTest.createKieBuilder(BaseModelTest.java:132)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:121)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieContainer(BaseModelTest.java:114)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:110)
	at org.drools.model.codegen.execmodel.BaseModelTest.getKieSession(BaseModelTest.java:106)
	at org.drools.model.codegen.execmodel.CompilerTest.testPrettyPrinterCrashing(CompilerTest.java:1804)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.