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 f9123bc653 [incubator-kie-drools#5742] [new-parser] Broken inline cast 
(#5806)
f9123bc653 is described below

commit f9123bc653d60c4b6954fcc14dba350875548368
Author: Toshiya Kobayashi <[email protected]>
AuthorDate: Thu Mar 28 18:24:46 2024 +0900

    [incubator-kie-drools#5742] [new-parser] Broken inline cast (#5806)
    
    * [incubator-kie-drools#5742] [new-parser] Broken inline cast
    
    * fixed duplicate test
---
 .../drl/parser/antlr4/MiscDRLParserTest.java       | 39 ++++++++++++++++++++++
 .../drools/drl/parser/antlr4/DRL6Expressions.g4    |  2 +-
 .../org/drools/drl/parser/antlr4/DRLParser.g4      |  5 +++
 3 files changed, 45 insertions(+), 1 deletion(-)

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 a65fafec28..0029602df5 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
@@ -3870,4 +3870,43 @@ class MiscDRLParserTest {
         assertThat(constraintDescr.toString())
                 .isEqualToIgnoringWhitespace("/wife[$age : age] && age > 
$age");
     }
+
+    @Test
+    void inlineCast() {
+        final String text = "package org.drools\n" +
+                "rule R1\n" +
+                "when\n" +
+                "  $a : ICA( someB#ICB.onlyConcrete() == \"Hello\" )\n" +
+                "then\n" +
+                "end\n";
+        PackageDescr packageDescr = parser.parse(text);
+        ExprConstraintDescr constraintDescr = 
getFirstExprConstraintDescr(packageDescr);
+        
assertThat(constraintDescr.toString()).isEqualToIgnoringWhitespace("someB#ICB.onlyConcrete()
 == \"Hello\"");
+    }
+
+    @Test
+    void inlineCastMultiple() {
+        final String text = "package org.drools\n" +
+                "rule R1\n" +
+                "when\n" +
+                "  $a : ICA( someB#ICB.someC#ICC.onlyConcrete() == \"Hello\" 
)\n" +
+                "then\n" +
+                "end\n";
+        PackageDescr packageDescr = parser.parse(text);
+        ExprConstraintDescr constraintDescr = 
getFirstExprConstraintDescr(packageDescr);
+        
assertThat(constraintDescr.toString()).isEqualToIgnoringWhitespace("someB#ICB.someC#ICC.onlyConcrete()
 == \"Hello\"");
+    }
+
+    @Test
+    void inlineCastThis() {
+        final String text = "package org.drools\n" +
+                "rule R1\n" +
+                "when\n" +
+                "  $o : Object( this#Person.name == \"Mark\" )\n" +
+                "then\n" +
+                "end\n";
+        PackageDescr packageDescr = parser.parse(text);
+        ExprConstraintDescr constraintDescr = 
getFirstExprConstraintDescr(packageDescr);
+        
assertThat(constraintDescr.toString()).isEqualToIgnoringWhitespace("this#Person.name
 == \"Mark\"");
+    }
 }
diff --git 
a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL6Expressions.g4
 
b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL6Expressions.g4
index d85859d3bd..ee5ce23259 100644
--- 
a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL6Expressions.g4
+++ 
b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL6Expressions.g4
@@ -230,6 +230,7 @@ drlIdentifier returns [Token token]
     | PERMITS
     | RECORD
     | VAR
+    | THIS
     ;
 
 // --------------------------------------------------------
@@ -671,7 +672,6 @@ primary returns [BaseDescr result]
     :  expr=parExpression {  if( buildDescr  ) { $result = $expr.result; }  }
     |   nonWildcardTypeArguments (explicitGenericInvocationSuffix | this_key 
arguments)
     |   literal { if( buildDescr  ) { $result = new AtomicExprDescr( 
$literal.text, true ); }  }
-    |   this_key (DOT drlIdentifier)* identifierSuffix?
     |   super_key superSuffix
     |   new_key creator
     |   primitiveType (LBRACK RBRACK)* DOT class_key
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 5891d6eaa9..7eb20980cd 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
@@ -197,6 +197,7 @@ drlIdentifier
     | PERMITS
     | RECORD
     | VAR
+    | THIS
     ;
 
 drlKeywords
@@ -258,6 +259,7 @@ drlExpression
        | NEW nonWildcardTypeArguments? innerCreator
        | SUPER superSuffix
        | explicitGenericInvocation
+       | inlineCast
       )
     | drlExpression NULL_SAFE_DOT ( drlIdentifier | drlMethodCall )
     | drlExpression LBRACK drlExpression RBRACK
@@ -321,8 +323,11 @@ drlPrimary
     | nonWildcardTypeArguments (explicitGenericInvocationSuffix | THIS 
arguments)
     | inlineListExpression
     | inlineMapExpression
+    | inlineCast
     ;
 
+inlineCast : drlIdentifier HASH drlIdentifier ;
+
 /* extending JavaParser literal */
 drlLiteral
     : integerLiteral


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

Reply via email to