This is an automated email from the ASF dual-hosted git repository.
mariofusco 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 7f338a314b [incubator-kie-drools-5909] [new-parser] Accumulate parsed
incorrectl… (#5965)
7f338a314b is described below
commit 7f338a314b3a133f4097c7fd522189b7580acda5
Author: Toshiya Kobayashi <[email protected]>
AuthorDate: Wed May 22 16:24:28 2024 +0900
[incubator-kie-drools-5909] [new-parser] Accumulate parsed incorrectl…
(#5965)
* [incubator-kie-drools-5909] [new-parser] Accumulate parsed incorrectly if
init and action statements are empty
* Update
drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
Co-authored-by: Jiří Locker <[email protected]>
---------
Co-authored-by: Jiří Locker <[email protected]>
---
.../drools/drl/parser/antlr4/MiscDRLParserTest.java | 20 ++++++++++++++++++++
.../antlr4/org/drools/drl/parser/antlr4/DRLParser.g4 | 2 +-
.../drl/parser/antlr4/Antlr4ParserStringUtils.java | 3 +++
.../org/drools/drl/parser/antlr4/DRLVisitorImpl.java | 2 +-
4 files changed, 25 insertions(+), 2 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 85c8423ba8..ca565a8320 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
@@ -5122,4 +5122,24 @@ class MiscDRLParserTest {
assertThat(pkg.getRules().get(0).getName()).isEqualTo("R");
}
+
+ @Test
+ void accumulateEmptyChunks() {
+ String text = "rule R\n" +
+ "when\n" +
+ " $totalAmount : Number() from accumulate( Cheese(
$price : price ),\n" +
+ " init( ),\n" +
+ " action(
),\n" +
+ " result( null
) );\n" +
+ "then\n" +
+ "end";
+ RuleDescr rule = parseAndGetFirstRuleDescr(text);
+
+ final PatternDescr outPattern = (PatternDescr)
rule.getLhs().getDescrs().get( 0 );
+ final AccumulateDescr accumulateDescr = (AccumulateDescr)
outPattern.getSource();
+ assertThat(accumulateDescr.getInitCode()).isEmpty();
+ assertThat(accumulateDescr.getActionCode()).isEmpty();
+ assertThat(accumulateDescr.getReverseCode()).isNull();
+ assertThat(accumulateDescr.getResultCode()).isEqualTo( "null");
+ }
}
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 da397785c1..e96aa729ae 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
@@ -340,7 +340,7 @@ fromAccumulate := ACCUMULATE LEFT_PAREN lhsAnd
(COMMA|SEMICOLON)
) RIGHT_PAREN
*/
fromAccumulate : (DRL_ACCUMULATE|DRL_ACC) LPAREN lhsAndDef (COMMA|SEMI)
- ( DRL_INIT LPAREN initBlockStatements=chunk RPAREN COMMA?
DRL_ACTION LPAREN actionBlockStatements=chunk RPAREN COMMA? ( DRL_REVERSE
LPAREN reverseBlockStatements=chunk RPAREN COMMA?)? DRL_RESULT LPAREN
expression RPAREN
+ ( DRL_INIT LPAREN initBlockStatements=chunk? RPAREN COMMA?
DRL_ACTION LPAREN actionBlockStatements=chunk? RPAREN COMMA? ( DRL_REVERSE
LPAREN reverseBlockStatements=chunk? RPAREN COMMA?)? DRL_RESULT LPAREN
resultBlockStatements=chunk RPAREN
| accumulateFunction
)
RPAREN (SEMI)?
diff --git
a/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/Antlr4ParserStringUtils.java
b/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/Antlr4ParserStringUtils.java
index a33eb143dd..a0f09fb471 100644
---
a/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/Antlr4ParserStringUtils.java
+++
b/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/Antlr4ParserStringUtils.java
@@ -38,6 +38,9 @@ public class Antlr4ParserStringUtils {
* Get text from ParserRuleContext's CharStream without trimming whitespace
*/
public static String getTextPreservingWhitespace(ParserRuleContext ctx) {
+ if (ctx == null) {
+ return "";
+ }
// Using raw CharStream
int startIndex = ctx.start.getStartIndex();
int stopIndex = ctx.stop.getStopIndex();
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 485928d6e7..ddb3d370fa 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
@@ -798,7 +798,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
if (ctx.DRL_REVERSE() != null) {
accumulateDescr.setReverseCode(getTextPreservingWhitespace(ctx.reverseBlockStatements));
}
-
accumulateDescr.setResultCode(getTextPreservingWhitespace(ctx.expression()));
+
accumulateDescr.setResultCode(getTextPreservingWhitespace(ctx.resultBlockStatements));
} else {
// accumulate function
accumulateDescr.addFunction(visitAccumulateFunction(ctx.accumulateFunction()));
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]