]
Mario Fusco updated DROOLS-6025:
--------------------------------
Sprint: 2021 Week 07-09 (from Feb 15)
UnsupportedOperationException when using forall inside accumulate
-----------------------------------------------------------------
Key: DROOLS-6025
URL:
https://issues.redhat.com/browse/DROOLS-6025
Project: Drools
Issue Type: Bug
Affects Versions: 7.49.0.Final
Reporter: Martin Panzer
Assignee: Mario Fusco
Priority: Major
Attachments: drool-uoe-repro.zip
I use the PatternDSL to dynamicly generate new rules based on user input.
In some cases, generated rules can contain an forall inside of an accumulator
(D.accumulate).
This worked fine in 7.48.0.Final.
In 7.49.0.Final, this throws the exception from below.
For reference, this is an shortened example of the code. The full reproducer contains
this code, and is attached to this issue.
{code:java}
ViewItem<?> forallRule = PatternDSL.and(
PatternDSL.forall(//
PatternDSL.pattern(grandV).expr(grand ->
"A".equals(grand.getName()))//
));
Variable<Integer> matchesSum =
PatternDSL.declarationOf(Integer.class);
ExprViewItem<Object> accumulate =
D.accumulate(PatternDSL.and(PatternDSL.pattern(childV), forallRule),
D.accFunction(IntegerSumAccumulateFunction.class,
PatternDSL.valueOf(1)).as(matchesSum));
return PatternDSL.and(accumulate, PatternDSL.expr(matchesSum, (sum)
-> sum == 1));
{code}
{code:java}
Exception in thread "main" java.lang.UnsupportedOperationException
at
org.drools.modelcompiler.KiePackagesBuilder.conditionToGroupElementType(KiePackagesBuilder.java:1119)
at
org.drools.modelcompiler.KiePackagesBuilder.recursivelyAddConditions(KiePackagesBuilder.java:622)
at
org.drools.modelcompiler.KiePackagesBuilder.buildAccumulate(KiePackagesBuilder.java:578)
at
org.drools.modelcompiler.KiePackagesBuilder.conditionToElement(KiePackagesBuilder.java:490)
at
org.drools.modelcompiler.KiePackagesBuilder.addSubConditions(KiePackagesBuilder.java:658)
at
org.drools.modelcompiler.KiePackagesBuilder.conditionToElement(KiePackagesBuilder.java:476)
at
org.drools.modelcompiler.KiePackagesBuilder.addSubConditions(KiePackagesBuilder.java:658)
at org.drools.modelcompiler.KiePackagesBuilder.populateLHS(KiePackagesBuilder.java:446)
at org.drools.modelcompiler.KiePackagesBuilder.compileRule(KiePackagesBuilder.java:246)
at org.drools.modelcompiler.KiePackagesBuilder.build(KiePackagesBuilder.java:217)
at
org.drools.modelcompiler.builder.KieBaseBuilder.createKieBaseFromModel(KieBaseBuilder.java:80)
at
org.drools.modelcompiler.builder.KieBaseBuilder.createKieBaseFromModel(KieBaseBuilder.java:74)
at
org.drools.modelcompiler.builder.KieBaseBuilder.createKieBaseFromModel(KieBaseBuilder.java:60)
at com.acme.Main.compile(Main.java:68)
at com.acme.Main.main(Main.java:29)
{code}