Martin Panzer created DROOLS-6025:
-------------------------------------
Summary: 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
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 in executable form.
{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)
Disconnected from the target VM, address: '127.0.0.1:59601', transport:
'socket'
Process finished with exit code 1
{code}
--
This message was sent by Atlassian Jira
(v8.13.1#813001)