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]