Very edge case, but we should keep it working for backward compatibility reasons. The root cause is identical to
5818
5910
Due to the usage of JavaLexer, words like package, return, etc. are no longer IDENTIFIER tokens but respective keyword tokens and so they cannot be matched in rules where IDENTIFIER is expected. The obvious solution is to add RETURN as an alternative to the drlIdentifier rule. We should however think twice and make sure this is the right approach. Another solution could be to adapt JavaLexer and drop keywords that are not useful for DRLParser rules.
Rule code snippet
when
Cheese( price < 5) from return ([c])
Error output
### parse : ANTLR4_PARSER_ENABLED = true
line 59:32 no viable alternative at input 'from return'
14:42:29.412 [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.getKieBuilderFromClasspathResources(KieUtil.java:187)
at org.drools.testcoverage.common.util.KieBaseUtil.getKieBaseFromClasspathResources(KieBaseUtil.java:57)
at org.drools.mvel.integrationtests.ExtendsTest.testExtendsBasic(ExtendsTest.java:728)
14:42:29.412 [main] ERROR o.d.c.k.b.impl.AbstractKieProject.buildKnowledgePackages:280 - Unable to build KieBaseModel:KieBaseModelName
[59,32]: no viable alternative at input 'from return'
[0,0]:
[0,0]: Parser returned a null Package
14:42:29.412 [main] ERROR o.d.testcoverage.common.util.KieUtil.getKieBuilderFromKieFileSystem:165 - KieBuilder errors: [Message [id=1, kieBase=KieBaseModelName, level=ERROR, path=extend_rule_test.drl, line=59, column=0
text=no viable alternative at input 'from return'], Message [id=2, kieBase=KieBaseModelName, level=ERROR, path=extend_rule_test.drl, line=0, column=0
text=], Message [id=3, kieBase=KieBaseModelName, level=ERROR, path=extend_rule_test.drl, line=0, column=0
text=Parser returned a null Package]]
java.lang.AssertionError: [[Message [id=1, kieBase=KieBaseModelName, level=ERROR, path=extend_rule_test.drl, line=59, column=0
text=no viable alternative at input 'from return'], Message [id=2, kieBase=KieBaseModelName, level=ERROR, path=extend_rule_test.drl, line=0, column=0
text=], Message [id=3, kieBase=KieBaseModelName, level=ERROR, path=extend_rule_test.drl, line=0, column=0
text=Parser returned a null Package]]]
Expecting empty but was: [Message [id=1, kieBase=KieBaseModelName, level=ERROR, path=extend_rule_test.drl, line=59, column=0
text=no viable alternative at input 'from return'],
Message [id=2, kieBase=KieBaseModelName, level=ERROR, path=extend_rule_test.drl, line=0, column=0
text=],
Message [id=3, kieBase=KieBaseModelName, level=ERROR, path=extend_rule_test.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.getKieBuilderFromClasspathResources(KieUtil.java:187)
at org.drools.testcoverage.common.util.KieBaseUtil.getKieBaseFromClasspathResources(KieBaseUtil.java:57)
at org.drools.mvel.integrationtests.ExtendsTest.testExtendsBasic(ExtendsTest.java:728)
Parent issue
5678
Failing tests
org.drools.mvel.integrationtests.ExtendsTest#testExtendsBasic
Notes
Very edge case, but we should keep it working for backward compatibility reasons. The root cause is identical to
5818
5910
Due to the usage of JavaLexer, words like
package
,return
, etc. are no longerIDENTIFIER
tokens but respective keyword tokens and so they cannot be matched in rules whereIDENTIFIER
is expected. The obvious solution is to addRETURN
as an alternative to thedrlIdentifier
rule. We should however think twice and make sure this is the right approach. Another solution could be to adapt JavaLexer and drop keywords that are not useful for DRLParser rules.Rule code snippet
Error output