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

commit 9cc3266aea9a95a631c9a34aaa6c9e2da8fa29fa
Author: Toshiya Kobayashi <[email protected]>
AuthorDate: Tue Oct 3 18:42:46 2023 +0900

    [DROOLS-7300] Implement positional constraint (#36)
---
 .../java/org/drools/parser/DRLVisitorImpl.java     | 37 +++++++++++++++++-----
 .../java/org/drools/parser/MiscDRLParserTest.java  |  3 --
 2 files changed, 29 insertions(+), 11 deletions(-)

diff --git 
a/drools-drl/drools-drl10-parser/src/main/java/org/drools/parser/DRLVisitorImpl.java
 
b/drools-drl/drools-drl10-parser/src/main/java/org/drools/parser/DRLVisitorImpl.java
index 4a82522af1..078ec4a869 100644
--- 
a/drools-drl/drools-drl10-parser/src/main/java/org/drools/parser/DRLVisitorImpl.java
+++ 
b/drools-drl/drools-drl10-parser/src/main/java/org/drools/parser/DRLVisitorImpl.java
@@ -3,7 +3,6 @@ package org.drools.parser;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
-import java.util.stream.Collectors;
 
 import org.antlr.v4.runtime.ParserRuleContext;
 import org.antlr.v4.runtime.TokenStream;
@@ -258,11 +257,16 @@ public class DRLVisitorImpl extends 
DRLParserBaseVisitor<Object> {
             patternSourceDescr.setResource(patternDescr.getResource());
             patternDescr.setSource(patternSourceDescr);
         }
-        List<ExprConstraintDescr> constraintDescrList = 
visitConstraints(ctx.constraints());
-        constraintDescrList.forEach(patternDescr::addConstraint);
+        List<ExprConstraintDescr> constraintDescrList = 
visitConstraints(ctx.positionalConstraints(), ctx.constraints());
+        constraintDescrList.forEach(descr -> addToPatternDescr(patternDescr, 
descr));
         return patternDescr;
     }
 
+    private void addToPatternDescr(PatternDescr patternDescr, 
ExprConstraintDescr exprConstraintDescr) {
+        exprConstraintDescr.setResource(patternDescr.getResource());
+        patternDescr.addConstraint(exprConstraintDescr);
+    }
+
     @Override
     public ForallDescr visitLhsForall(DRLParser.LhsForallContext ctx) {
         ForallDescr forallDescr = new ForallDescr();
@@ -328,14 +332,31 @@ public class DRLVisitorImpl extends 
DRLParserBaseVisitor<Object> {
 
     @Override
     public List<ExprConstraintDescr> 
visitConstraints(DRLParser.ConstraintsContext ctx) {
+        List<ExprConstraintDescr> exprConstraintDescrList = new ArrayList<>();
+        populateExprConstraintDescrList(ctx, exprConstraintDescrList);
+        return exprConstraintDescrList;
+    }
+
+    private List<ExprConstraintDescr> 
visitConstraints(DRLParser.PositionalConstraintsContext positionalCtx, 
DRLParser.ConstraintsContext ctx) {
+        List<ExprConstraintDescr> exprConstraintDescrList = new ArrayList<>();
+        populateExprConstraintDescrList(positionalCtx, 
exprConstraintDescrList);
+        populateExprConstraintDescrList(ctx, exprConstraintDescrList);
+        return exprConstraintDescrList;
+    }
+
+    private void populateExprConstraintDescrList(ParserRuleContext ctx, 
List<ExprConstraintDescr> exprConstraintDescrList) {
         if (ctx == null) {
-            return new ArrayList<>();
+            return;
         }
         List<BaseDescr> descrList = visitDescrChildren(ctx);
-        return descrList.stream()
-                .filter(ExprConstraintDescr.class::isInstance)
-                .map(ExprConstraintDescr.class::cast)
-                .collect(Collectors.toList());
+        for (BaseDescr descr : descrList) {
+            if (descr instanceof ExprConstraintDescr) {
+                ExprConstraintDescr exprConstraintDescr = 
(ExprConstraintDescr) descr;
+                exprConstraintDescr.setType(ctx instanceof 
DRLParser.PositionalConstraintsContext ? ExprConstraintDescr.Type.POSITIONAL : 
ExprConstraintDescr.Type.NAMED);
+                
exprConstraintDescr.setPosition(exprConstraintDescrList.size());
+                exprConstraintDescrList.add(exprConstraintDescr);
+            }
+        }
     }
 
     @Override
diff --git 
a/drools-drl/drools-drl10-parser/src/test/java/org/drools/parser/MiscDRLParserTest.java
 
b/drools-drl/drools-drl10-parser/src/test/java/org/drools/parser/MiscDRLParserTest.java
index 9a92386c5a..d38ed5bf77 100644
--- 
a/drools-drl/drools-drl10-parser/src/test/java/org/drools/parser/MiscDRLParserTest.java
+++ 
b/drools-drl/drools-drl10-parser/src/test/java/org/drools/parser/MiscDRLParserTest.java
@@ -3015,7 +3015,6 @@ class MiscDRLParserTest {
         assertThat(declarations.size()).isEqualTo(3);
     }
 
-    @Disabled("Priority : Mid | Implement Descr position")
     @Test
     public void parse_NullConstraints() throws Exception {
         final String text = "rule X when Person( name == null ) then end";
@@ -3029,7 +3028,6 @@ class MiscDRLParserTest {
         assertThat(fcd.getType()).isEqualTo(ExprConstraintDescr.Type.NAMED);
     }
 
-    @Disabled("Priority : High | Implement positional constraint")
     @Test
     public void parse_PositionalConstraintsOnly() throws Exception {
         final String text = "rule X when Person( \"Mark\", 42; ) then end";
@@ -3126,7 +3124,6 @@ class MiscDRLParserTest {
         assertThat(ann.getValue()).isEqualTo("\"val1\", \"val2\"");
     }
 
-    @Disabled("Priority : High | Implement positional constraint")
     @Test
     public void parse_PositionalsAndNamedConstraints() throws Exception {
         final String text = "rule X when Person( \"Mark\", 42; location == 
\"atlanta\" ) then end";


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

Reply via email to