Annotations should also be allowed after infix OR, prefix AND, and infix AND.
Rule code snippet
rule "test collect with annotation"
when
( and @Annot
String()
Integer() )
then
end
Error output
### parse : ANTLR4_PARSER_ENABLED = true
line 1:156 no viable alternative at input '( and @'
line 1:200 extraneous input ')' expecting 'then'
14:48:53.519 [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:545)
at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsPatternBind(DRLVisitorImpl.java:83)
at org.drools.drl.parser.antlr4.DRLParser$LhsPatternBindContext.accept(DRLParser.java:2661)
at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:1075)
at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsUnary(DRLVisitorImpl.java:1062)
at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhsUnary(DRLVisitorImpl.java:83)
at org.drools.drl.parser.antlr4.DRLParser$LhsUnaryContext.accept(DRLParser.java:2477)
at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
at org.drools.drl.parser.antlr4.DRLParserBaseVisitor.visitLhsUnarySingle(DRLParserBaseVisitor.java:201)
at org.drools.drl.parser.antlr4.DRLParser$LhsUnarySingleContext.accept(DRLParser.java:2110)
at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:1075)
at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitLhs(DRLVisitorImpl.java:532)
at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitRuledef(DRLVisitorImpl.java:340)
at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitRuledef(DRLVisitorImpl.java:83)
at org.drools.drl.parser.antlr4.DRLParser$RuledefContext.accept(DRLParser.java:1664)
at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:1075)
at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDrlStatementdef(DRLVisitorImpl.java:166)
at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDrlStatementdef(DRLVisitorImpl.java:83)
at org.drools.drl.parser.antlr4.DRLParser$DrlStatementdefContext.accept(DRLParser.java:523)
at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitDescrChildren(DRLVisitorImpl.java:1075)
at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitCompilationUnit(DRLVisitorImpl.java:102)
at org.drools.drl.parser.antlr4.DRLVisitorImpl.visitCompilationUnit(DRLVisitorImpl.java:83)
at org.drools.drl.parser.antlr4.DRLParser$CompilationUnitContext.accept(DRLParser.java:435)
at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:18)
at org.drools.drl.parser.antlr4.DRLParserHelper.compilationUnitContext2PackageDescr(DRLParserHelper.java:91)
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:191)
at org.drools.drl.parser.DrlParser.compileWithAntlr4Parser(DrlParser.java:204)
at org.drools.drl.parser.DrlParser.parse(DrlParser.java:191)
at org.drools.drl.parser.DrlParser.parse(DrlParser.java:179)
at org.drools.drl.parser.DrlParser.parse(DrlParser.java:168)
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.testcoverage.common.util.KieUtil.getKieBuilderFromKieFileSystem(KieUtil.java:149)
at org.drools.testcoverage.common.util.KieUtil.getKieBuilderFromKieFileSystem(KieUtil.java:134)
at org.drools.testcoverage.common.util.KieUtil.getKieBuilderFromResources(KieUtil.java:121)
at org.drools.testcoverage.common.util.KieUtil.getKieBuilderFromDrls(KieUtil.java:107)
at org.drools.compiler.integrationtests.AnnotationsTest.testAnnotationOnLHSAndMerging(AnnotationsTest.java:297)
14:48:53.519 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:KieBaseModelName
[1,156]: no viable alternative at input '( and @'
[1,200]: extraneous input ')' expecting 'then'
[0,0]:
[0,0]: Parser returned a null Package
14:48:53.519 [main] ERROR o.d.testcoverage.common.util.KieUtil.getKieBuilderFromKieFileSystem:165 - KieBuilder errors: [Message [id=1, kieBase=KieBaseModelName, level=ERROR, path=rules1.drl, line=1, column=0
text=no viable alternative at input '( and @'], Message [id=2, kieBase=KieBaseModelName, level=ERROR, path=rules1.drl, line=1, column=0
text=extraneous input ')' expecting 'then'], Message [id=3, kieBase=KieBaseModelName, level=ERROR, path=rules1.drl, line=0, column=0
text=], Message [id=4, kieBase=KieBaseModelName, level=ERROR, path=rules1.drl, line=0, column=0
text=Parser returned a null Package]]
java.lang.AssertionError: [[Message [id=1, kieBase=KieBaseModelName, level=ERROR, path=rules1.drl, line=1, column=0
text=no viable alternative at input '( and @'], Message [id=2, kieBase=KieBaseModelName, level=ERROR, path=rules1.drl, line=1, column=0
text=extraneous input ')' expecting 'then'], Message [id=3, kieBase=KieBaseModelName, level=ERROR, path=rules1.drl, line=0, column=0
text=], Message [id=4, kieBase=KieBaseModelName, level=ERROR, path=rules1.drl, line=0, column=0
text=Parser returned a null Package]]]
Expecting empty but was: [Message [id=1, kieBase=KieBaseModelName, level=ERROR, path=rules1.drl, line=1, column=0
text=no viable alternative at input '( and @'],
Message [id=2, kieBase=KieBaseModelName, level=ERROR, path=rules1.drl, line=1, column=0
text=extraneous input ')' expecting 'then'],
Message [id=3, kieBase=KieBaseModelName, level=ERROR, path=rules1.drl, line=0, column=0
text=],
Message [id=4, kieBase=KieBaseModelName, level=ERROR, path=rules1.drl, line=0, column=0
text=Parser returned a null Package]]
at org.drools.testcoverage.common.util.KieUtil.getKieBuilderFromKieFileSystem(KieUtil.java:169)
at org.drools.testcoverage.common.util.KieUtil.getKieBuilderFromKieFileSystem(KieUtil.java:134)
at org.drools.testcoverage.common.util.KieUtil.getKieBuilderFromResources(KieUtil.java:121)
at org.drools.testcoverage.common.util.KieUtil.getKieBuilderFromDrls(KieUtil.java:107)
at org.drools.compiler.integrationtests.AnnotationsTest.testAnnotationOnLHSAndMerging(AnnotationsTest.java:297)
Parent issue
5678
Failing tests
org.drools.compiler.integrationtests.AnnotationsTest#testAnnotationOnLHSAndMerging
Notes
See for example the piece of the old parser that allows annotation after prefix OR: https://github.com/apache/incubator-kie-drools/blob/200c4697aede45bc8a76ea5a9ded7b17233f1b78/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/lang/DRL6Parser.java#L2153
Annotations should also be allowed after infix OR, prefix AND, and infix AND.
Rule code snippet
Error output