This is an automated email from the ASF dual-hosted git repository.

mariofusco 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 e66febe572 Fix the rest of the keywords (#5759)
e66febe572 is described below

commit e66febe572ffbb705fed667ccdbde5407311e2ce
Author: Jiří Locker <[email protected]>
AuthorDate: Tue Mar 5 08:23:33 2024 +0100

    Fix the rest of the keywords (#5759)
---
 drools-drl/drools-drl-parser-tests/pom.xml         |  5 +++
 .../drl/parser/antlr4/DRLExprParserTest.java       | 49 +++++++++++++++-------
 .../drools/drl/parser/antlr4/DRL6Expressions.g4    | 36 ++++++++--------
 3 files changed, 57 insertions(+), 33 deletions(-)

diff --git a/drools-drl/drools-drl-parser-tests/pom.xml 
b/drools-drl/drools-drl-parser-tests/pom.xml
index 7e0c4d5f88..4f3a19c812 100644
--- a/drools-drl/drools-drl-parser-tests/pom.xml
+++ b/drools-drl/drools-drl-parser-tests/pom.xml
@@ -55,6 +55,11 @@
             <artifactId>junit-jupiter-engine</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-params</artifactId>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>ch.qos.logback</groupId>
             <artifactId>logback-classic</artifactId>
diff --git 
a/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/DRLExprParserTest.java
 
b/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/DRLExprParserTest.java
index 6343529110..f740b369ea 100644
--- 
a/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/DRLExprParserTest.java
+++ 
b/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/DRLExprParserTest.java
@@ -30,6 +30,8 @@ import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Timeout;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 import org.kie.internal.builder.conf.LanguageLevelOption;
 
 /**
@@ -269,41 +271,58 @@ public class DRLExprParserTest {
         assertThat(right.getExpression()).isEqualTo("b");
     }
 
-    @Test
-    public void selector_dot_super() {
-        String source = "SomeClass.super.getData() != null";
+    /**
+     * Each test input is a simple expression covering one of the existing 
keywords. The test is successful if the parser has
+     * no errors and the descriptor's expression string is equal to the input.
+     *
+     * @param source expression using a keyword
+     */
+    @ParameterizedTest
+    @ValueSource(strings = {
+            "(X<? extends Number>) x",
+            "SomeClass.super.getData()",
+            "(boolean) b",
+            "(char) c",
+            "(byte) b",
+            "(short) s",
+            "(int) i",
+            "(long) l",
+            "(float) f",
+            "(double) d",
+            "<Type>this()",
+            "Object[][].class.getName()",
+            "new<Integer>ArrayList<Integer>()"
+    })
+    void testKeywords(String source) {
         ConstraintConnectiveDescr result = parser.parse( source );
         
assertThat(parser.hasErrors()).as(parser.getErrors().toString()).isFalse();
 
         assertThat(result.getConnective()).isEqualTo(ConnectiveType.AND);
         assertThat(result.getDescrs().size()).isEqualTo(1);
 
-        RelationalExprDescr expr = (RelationalExprDescr) 
result.getDescrs().get( 0 );
-        assertThat(expr.getOperator()).isEqualTo("!=");
-
-        AtomicExprDescr left = (AtomicExprDescr) expr.getLeft();
-        AtomicExprDescr right = (AtomicExprDescr) expr.getRight();
+        AtomicExprDescr expr = (AtomicExprDescr) result.getDescrs().get( 0 );
 
-        
assertThat(left.getExpression()).isEqualTo("SomeClass.super.getData()");
-        assertThat(right.getExpression()).isEqualTo("null");
+        assertThat(expr.getExpression()).isEqualTo(source);
     }
 
     @Test
-    public void selector_dot_identifier() {
-        String source = "getAddress().getCity().length() == 5";
+    public void testKeyword_instanceof() {
+        String source = "a instanceof A";
         ConstraintConnectiveDescr result = parser.parse( source );
         
assertThat(parser.hasErrors()).as(parser.getErrors().toString()).isFalse();
 
         assertThat(result.getConnective()).isEqualTo(ConnectiveType.AND);
         assertThat(result.getDescrs().size()).isEqualTo(1);
 
+        // Unlike the other keywords, instanceof can only be used in a 
relational expression,
+        // so it needs to be tested differently.
         RelationalExprDescr expr = (RelationalExprDescr) 
result.getDescrs().get( 0 );
-        assertThat(expr.getOperator()).isEqualTo("==");
+        assertThat(expr.getOperator()).isEqualTo("instanceof");
 
         AtomicExprDescr left = (AtomicExprDescr) expr.getLeft();
         AtomicExprDescr right = (AtomicExprDescr) expr.getRight();
 
-        
assertThat(left.getExpression()).isEqualTo("getAddress().getCity().length()");
-        assertThat(right.getExpression()).isEqualTo("5");
+        assertThat(left.getExpression()).isEqualTo("a");
+        assertThat(right.getExpression()).isEqualTo("A");
     }
 }
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 a981b20867..2b4a62e913 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
@@ -770,72 +770,72 @@ assignmentOperator
 //                      KEYWORDS
 // --------------------------------------------------------
 extends_key
-    :      {(helper.validateIdentifierKey(DroolsSoftKeywords.EXTENDS))}? 
id=IDENTIFIER { helper.emit($id, DroolsEditorType.KEYWORD); }
+    : id=EXTENDS { helper.emit($id, DroolsEditorType.KEYWORD); }
     ;
 
 super_key
-    :      {(helper.validateIdentifierKey(DroolsSoftKeywords.SUPER))}? 
id=SUPER { helper.emit($id, DroolsEditorType.KEYWORD); }
+    : id=SUPER { helper.emit($id, DroolsEditorType.KEYWORD); }
     ;
 
 instanceof_key
-    :      {(helper.validateIdentifierKey(DroolsSoftKeywords.INSTANCEOF))}? 
id=IDENTIFIER { helper.emit($id, DroolsEditorType.KEYWORD); }
+    : id=INSTANCEOF { helper.emit($id, DroolsEditorType.KEYWORD); }
     ;
 
 boolean_key
-    :      {(helper.validateIdentifierKey(DroolsSoftKeywords.BOOLEAN))}? 
id=IDENTIFIER { helper.emit($id, DroolsEditorType.KEYWORD); }
+    : id=BOOLEAN { helper.emit($id, DroolsEditorType.KEYWORD); }
     ;
 
 char_key
-    :      {(helper.validateIdentifierKey(DroolsSoftKeywords.CHAR))}? 
id=IDENTIFIER { helper.emit($id, DroolsEditorType.KEYWORD); }
+    : id=CHAR { helper.emit($id, DroolsEditorType.KEYWORD); }
     ;
 
 byte_key
-    :      {(helper.validateIdentifierKey(DroolsSoftKeywords.BYTE))}? 
id=IDENTIFIER { helper.emit($id, DroolsEditorType.KEYWORD); }
+    : id=BYTE { helper.emit($id, DroolsEditorType.KEYWORD); }
     ;
 
 short_key
-    :      {(helper.validateIdentifierKey(DroolsSoftKeywords.SHORT))}? 
id=IDENTIFIER { helper.emit($id, DroolsEditorType.KEYWORD); }
+    : id=SHORT { helper.emit($id, DroolsEditorType.KEYWORD); }
     ;
 
 int_key
-    :      {(helper.validateIdentifierKey(DroolsSoftKeywords.INT))}? 
id=IDENTIFIER { helper.emit($id, DroolsEditorType.KEYWORD); }
+    : id=INT { helper.emit($id, DroolsEditorType.KEYWORD); }
     ;
 
 float_key
-    :      {(helper.validateIdentifierKey(DroolsSoftKeywords.FLOAT))}? 
id=IDENTIFIER { helper.emit($id, DroolsEditorType.KEYWORD); }
+    : id=FLOAT { helper.emit($id, DroolsEditorType.KEYWORD); }
     ;
 
 long_key
-    :      {(helper.validateIdentifierKey(DroolsSoftKeywords.LONG))}? 
id=IDENTIFIER { helper.emit($id, DroolsEditorType.KEYWORD); }
+    : id=LONG { helper.emit($id, DroolsEditorType.KEYWORD); }
     ;
 
 double_key
-    :      {(helper.validateIdentifierKey(DroolsSoftKeywords.DOUBLE))}? 
id=IDENTIFIER { helper.emit($id, DroolsEditorType.KEYWORD); }
+    : id=DOUBLE { helper.emit($id, DroolsEditorType.KEYWORD); }
     ;
 
 void_key
-    :      {(helper.validateIdentifierKey(DroolsSoftKeywords.VOID))}? 
id=IDENTIFIER { helper.emit($id, DroolsEditorType.KEYWORD); }
+    : id=VOID { helper.emit($id, DroolsEditorType.KEYWORD); }
     ;
 
 this_key
-    :      {(helper.validateIdentifierKey(DroolsSoftKeywords.THIS))}? 
id=IDENTIFIER { helper.emit($id, DroolsEditorType.KEYWORD); }
+    : id=THIS { helper.emit($id, DroolsEditorType.KEYWORD); }
     ;
 
 class_key
-    :      {(helper.validateIdentifierKey(DroolsSoftKeywords.CLASS))}? 
id=IDENTIFIER  { helper.emit($id, DroolsEditorType.KEYWORD); }
+    : id=CLASS  { helper.emit($id, DroolsEditorType.KEYWORD); }
     ;
 
 new_key
-    :      {(helper.validateIdentifierKey(DroolsSoftKeywords.NEW))}? 
id=IDENTIFIER { helper.emit($id, DroolsEditorType.KEYWORD); }
+    : id=NEW { helper.emit($id, DroolsEditorType.KEYWORD); }
     ;
 
 not_key
-    :      {(helper.validateIdentifierKey(DroolsSoftKeywords.NOT))}? 
id=DRL_NOT { helper.emit($id, DroolsEditorType.KEYWORD); }
+    : id=DRL_NOT { helper.emit($id, DroolsEditorType.KEYWORD); }
     ;
 
 in_key
-  :      {(helper.validateIdentifierKey(DroolsSoftKeywords.IN))}? id=DRL_IN { 
helper.emit($id, DroolsEditorType.KEYWORD); }
-  ;
+    : id=DRL_IN { helper.emit($id, DroolsEditorType.KEYWORD); }
+    ;
 
 operator_key
   // TODO get rid of the DRL_MATCHES token or introduce DRL_CONTAINS etc. for 
consistency.


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

Reply via email to