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 a2f9c7444b [incubator-kie-drools-5908] ReteOOWaltzTest 'end' detection 
issue (#5913)
a2f9c7444b is described below

commit a2f9c7444b033da7620aba21bb3d16656af4aae8
Author: Toshiya Kobayashi <[email protected]>
AuthorDate: Mon May 13 14:23:27 2024 +0900

    [incubator-kie-drools-5908] ReteOOWaltzTest 'end' detection issue (#5913)
    
    * [incubator-kie-drools-5908] ReteOOWaltzTest 'end' detection issue
    
    * Update 
drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
    
    Co-authored-by: Jiří Locker <[email protected]>
    
    * Update 
drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
    
    Co-authored-by: Jiří Locker <[email protected]>
    
    * Update 
drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
    
    Co-authored-by: Jiří Locker <[email protected]>
    
    * Update 
drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
    
    Co-authored-by: Jiří Locker <[email protected]>
    
    * 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]>
---
 .../drl/parser/antlr4/MiscDRLParserTest.java       | 77 ++++++++++++++++++++++
 .../org/drools/drl/parser/antlr4/DRLLexer.g4       |  5 +-
 .../org/drools/drl/parser/antlr4/DRLParser.g4      |  2 +-
 3 files changed, 82 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 183d284334..8b220177df 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
@@ -3728,6 +3728,83 @@ class MiscDRLParserTest {
         assertThat(ruleDescrList.get(1).getName()).isEqualTo("R2");
     }
 
+    @Test
+    void endAndNonPairingDoubleQuoteInSingleLineCommentInRHS() {
+        final String text = "package org.drools\n" +
+                "rule R1\n" +
+                "when\n" +
+                "    $p : Person()\n" +
+                "then\n" +
+                "    //System.out.println(\");\n" + // non-pairing double 
quote in comment
+                "    retract($p)\n" +
+                "end\n" +
+                "rule \"R2\" when Person() then end";
+        PackageDescr packageDescr = parseAndGetPackageDescr(text);
+
+        List<RuleDescr> ruleDescrList = packageDescr.getRules();
+        assertThat(ruleDescrList).hasSize(2);
+        assertThat(ruleDescrList.get(0).getName()).isEqualTo("R1");
+        assertThat(ruleDescrList.get(1).getName()).isEqualTo("R2");
+    }
+
+    @Test
+    void endAndNonPairingDoubleQuoteInMultiLineCommentInRHS() {
+        final String text = "package org.drools\n" +
+                "rule R1\n" +
+                "when\n" +
+                "    $p : Person()\n" +
+                "then\n" +
+                "    /*System.out.println\n" +
+                "          (\");*/\n" + // non-pairing double quote in comment
+                "    retract($p)\n" +
+                "end\n" +
+                "rule \"R2\" when Person() then end";
+        PackageDescr packageDescr = parseAndGetPackageDescr(text);
+
+        List<RuleDescr> ruleDescrList = packageDescr.getRules();
+        assertThat(ruleDescrList).hasSize(2);
+        assertThat(ruleDescrList.get(0).getName()).isEqualTo("R1");
+        assertThat(ruleDescrList.get(1).getName()).isEqualTo("R2");
+    }
+
+    @Test
+    void endAndDoubleQuotationsInRHS() {
+        final String text = "package org.drools\n" +
+                "rule R1\n" +
+                "when\n" +
+                "    $p : Person()\n" +
+                "then\n" +
+                "    System.out.println(\"Draw \"+$p1+\" \"+$p2);\n" +
+                "    retract($p)\n" +
+                "end\n" +
+                "rule \"R2\" when Person() then end";
+        PackageDescr packageDescr = parseAndGetPackageDescr(text);
+
+        List<RuleDescr> ruleDescrList = packageDescr.getRules();
+        assertThat(ruleDescrList).hasSize(2);
+        assertThat(ruleDescrList.get(0).getName()).isEqualTo("R1");
+        assertThat(ruleDescrList.get(1).getName()).isEqualTo("R2");
+    }
+
+    @Test
+    void endAndSingleQuotationsInRHS() {
+        final String text = "package org.drools\n" +
+                "rule R1\n" +
+                "when\n" +
+                "    $p : Person()\n" +
+                "then\n" +
+                "    System.out.println('Draw '+$p1+' '+$p2);\n" +
+                "    retract($p)\n" +
+                "end\n" +
+                "rule \"R2\" when Person() then end";
+        PackageDescr packageDescr = parseAndGetPackageDescr(text);
+
+        List<RuleDescr> ruleDescrList = packageDescr.getRules();
+        assertThat(ruleDescrList).hasSize(2);
+        assertThat(ruleDescrList.get(0).getName()).isEqualTo("R1");
+        assertThat(ruleDescrList.get(1).getName()).isEqualTo("R2");
+    }
+
     @Test
     void singleQuoteInRhsWithSpace() {
         String consequence = getResultConsequence("    System.out.println( 
'singleQuoteInRhs' );\n");
diff --git 
a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRLLexer.g4
 
b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRLLexer.g4
index 58719554de..5809147d65 100644
--- 
a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRLLexer.g4
+++ 
b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRLLexer.g4
@@ -169,6 +169,9 @@ DrlUnicodeEscape
 
 mode RHS;
 RHS_WS : [ \t\r\n\u000C]+ -> channel(HIDDEN);
+RHS_COMMENT:            '/*' .*? '*/' ;
+RHS_LINE_COMMENT:       '//' ~[\r\n]* ;
+
 //DRL_RHS_END : 'end' [ \t]* SEMI? [ \t]* ('\n' | '\r\n' | EOF) { 
setText("end"); } -> popMode;
 DRL_RHS_END : {isRhsDrlEnd()}? DRL_END -> popMode;
 
@@ -181,7 +184,7 @@ RHS_STRING_LITERAL
 RHS_NAMED_CONSEQUENCE_THEN : DRL_THEN LBRACK IDENTIFIER RBRACK ;
 
 RHS_CHUNK
-    : ~[ ()[\]{},;\t\r\n\u000C]+ // ;}) could be a delimitter proceding 'end'. 
()[]{},; are delimiters to match RHS_STRING_LITERAL
+    : ~[ "'()[\]{},;\t\r\n\u000C]+ // ;}) could be a delimitter proceding 
'end'. ()[]{},; are delimiters to match RHS_STRING_LITERAL
     | LPAREN
     | RPAREN
     | LBRACK
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 018375dd5d..e277eb9826 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
@@ -420,7 +420,7 @@ groupByKeyBinding : label? conditionalExpression ;
 
 rhs : DRL_THEN consequenceBody namedConsequence* ;
 
-consequenceBody : ( RHS_STRING_LITERAL | RHS_CHUNK )* ;
+consequenceBody : ( RHS_COMMENT | RHS_LINE_COMMENT | RHS_STRING_LITERAL | 
RHS_CHUNK )* ;
 
 // THEN LEFT_SQUARE ID RIGHT_SQUARE chunk
 namedConsequence : RHS_NAMED_CONSEQUENCE_THEN consequenceBody ;


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to