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]

Reply via email to