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 7c6b18a578 [incubator-kie-drools#5707] [new-parser] null-safe 
dereferencing broken (#5771)
7c6b18a578 is described below

commit 7c6b18a578869e703bf2a566e993386010b57b54
Author: Toshiya Kobayashi <[email protected]>
AuthorDate: Sat Mar 9 17:56:14 2024 +0900

    [incubator-kie-drools#5707] [new-parser] null-safe dereferencing broken 
(#5771)
---
 .../drl/parser/antlr4/MiscDRLParserTest.java       | 30 ++++++++++++++++++++++
 .../org/drools/drl/parser/antlr4/DRLParser.g4      |  1 +
 2 files changed, 31 insertions(+)

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 c869a19062..5c82ed73ff 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
@@ -3609,4 +3609,34 @@ class MiscDRLParserTest {
         ExprConstraintDescr exprConstraintDescr = (ExprConstraintDescr) 
patternDescr.getConstraint().getDescrs().get(0);
         
assertThat(exprConstraintDescr.getExpression()).isEqualToIgnoringWhitespace(constraint);
     }
+
+    @Test
+    void nullSafeDereferencing() {
+        final String text = "package org.drools\n" +
+                "rule R1\n" +
+                "when\n" +
+                "    $p : Person(address!.city == $city)\n" +
+                "then\n" +
+                "end\n";
+        PackageDescr packageDescr = parser.parse(text);
+        RuleDescr ruleDescr = packageDescr.getRules().get(0);
+        PatternDescr patternDescr = (PatternDescr) 
ruleDescr.getLhs().getDescrs().get(0);
+        ExprConstraintDescr constraintDescr = (ExprConstraintDescr) 
patternDescr.getConstraint().getDescrs().get(0);
+        
assertThat(constraintDescr.toString()).isEqualToIgnoringWhitespace("address!.city
 == $city");
+    }
+
+    @Test
+    void nullSafeDereferencingMethodCall() {
+        final String text = "package org.drools\n" +
+                "rule R1\n" +
+                "when\n" +
+                "    $p : Person(address!.city!.startsWith(\"M\"))\n" +
+                "then\n" +
+                "end\n";
+        PackageDescr packageDescr = parser.parse(text);
+        RuleDescr ruleDescr = packageDescr.getRules().get(0);
+        PatternDescr patternDescr = (PatternDescr) 
ruleDescr.getLhs().getDescrs().get(0);
+        ExprConstraintDescr constraintDescr = (ExprConstraintDescr) 
patternDescr.getConstraint().getDescrs().get(0);
+        
assertThat(constraintDescr.toString()).isEqualToIgnoringWhitespace("address!.city!.startsWith(\"M\")");
+    }
 }
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 d65c9e2b73..6a98fab11e 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
@@ -253,6 +253,7 @@ drlExpression
        | SUPER superSuffix
        | explicitGenericInvocation
       )
+    | drlExpression NULL_SAFE_DOT ( drlIdentifier | methodCall )
     | drlExpression LBRACK drlExpression RBRACK
     | DRL_EVAL LPAREN conditionalOrExpression RPAREN
     | methodCall


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

Reply via email to