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]
