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]