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]