This is an automated email from the ASF dual-hosted git repository.
tkobayas pushed a commit to branch dev-new-parser
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git
The following commit(s) were added to refs/heads/dev-new-parser by this push:
new 514b7d8744 [incubator-kie-drools-5906] [new-parser] unification in
accumulate (#5907)
514b7d8744 is described below
commit 514b7d874443cabb250b28e95baa9298dcbc405b
Author: Toshiya Kobayashi <[email protected]>
AuthorDate: Thu May 9 10:15:35 2024 +0900
[incubator-kie-drools-5906] [new-parser] unification in accumulate (#5907)
---
.../drl/parser/antlr4/MiscDRLParserTest.java | 27 ++++++++++++++++++++++
.../org/drools/drl/parser/antlr4/DRLParser.g4 | 2 +-
.../drools/drl/parser/antlr4/DRLVisitorImpl.java | 11 +++++++--
3 files changed, 37 insertions(+), 3 deletions(-)
diff --git
a/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
b/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
index 94802923bb..899d7902d3 100644
---
a/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
+++
b/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
@@ -4751,4 +4751,31 @@ class MiscDRLParserTest {
ExprConstraintDescr exprConstraintDescr =
parseAndGetFirstConstraintDescr(text);
assertThat(exprConstraintDescr.getExpression()).isEqualTo("value == 10
&& someMethod(value) == 4");
}
+
+ @Test
+ void unificationInAccumulateRule() {
+ final String text =
+ "rule R\n" +
+ "when\n" +
+ " MyFact($i : currentValue)\n" +
+ " accumulate( $p : Person( name == \"John\" ),\n" +
+ " $i := min( $p.getAge() ) )\n" +
+ "then\n" +
+ "end";
+ RuleDescr rule = parseAndGetFirstRuleDescr(text);
+ assertThat(rule.getLhs().getDescrs().size()).isEqualTo(2);
+
+ final PatternDescr outPattern = (PatternDescr)
rule.getLhs().getDescrs().get(1);
+ AccumulateDescr accumulateDescr = (AccumulateDescr)
outPattern.getSource();
+
assertThat(accumulateDescr.getInputPattern()).isInstanceOfSatisfying(PatternDescr.class,
patternDescr -> {
+ assertThat(patternDescr.getIdentifier()).isEqualTo("$p");
+ assertThat(patternDescr.getObjectType()).isEqualTo("Person");
+ });
+
+ AccumulateDescr.AccumulateFunctionCallDescr accumulateFunction =
accumulateDescr.getFunctions().get(0);
+ assertThat(accumulateFunction.getBind()).isEqualTo("$i");
+ assertThat(accumulateFunction.isUnification()).isTrue();
+ assertThat(accumulateFunction.getFunction()).isEqualTo("min");
+
assertThat(accumulateFunction.getParams()).containsExactly("$p.getAge()");
+ }
}
diff --git
a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRLParser.g4
b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRLParser.g4
index 6c37402f10..2416b09cfb 100644
---
a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRLParser.g4
+++
b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRLParser.g4
@@ -351,7 +351,7 @@ blockStatements : drlBlockStatement* ;
/*
accumulateFunction := label? ID parameters
*/
-accumulateFunction : label? drlIdentifier conditionalExpressions ;
+accumulateFunction : (label|unif)? drlIdentifier conditionalExpressions ;
// parameters := LEFT_PAREN (conditionalExpression (COMMA
conditionalExpression)* )? RIGHT_PAREN
conditionalExpressions : LPAREN (conditionalExpression (COMMA
conditionalExpression)* )? RPAREN ;
diff --git
a/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/DRLVisitorImpl.java
b/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/DRLVisitorImpl.java
index 1faa36574e..8212a7f64c 100644
---
a/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/DRLVisitorImpl.java
+++
b/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/DRLVisitorImpl.java
@@ -803,12 +803,19 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
@Override
public AccumulateDescr.AccumulateFunctionCallDescr
visitAccumulateFunction(DRLParser.AccumulateFunctionContext ctx) {
String function = ctx.drlIdentifier().getText();
- String bind = ctx.label() == null ? null :
ctx.label().drlIdentifier().getText();
+ String bind = null;
+ boolean unify = false;
+ if (ctx.label() != null) {
+ bind = ctx.label().drlIdentifier().getText();
+ } else if (ctx.unif() != null) {
+ bind = ctx.unif().drlIdentifier().getText();
+ unify = true;
+ }
String[] params =
ctx.conditionalExpressions().conditionalExpression().stream()
.map(RuleContext::getText)
.toArray(String[]::new);
- return new AccumulateDescr.AccumulateFunctionCallDescr(function, bind,
false, params);
+ return new AccumulateDescr.AccumulateFunctionCallDescr(function, bind,
unify, params);
}
@Override
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]