yurloc commented on code in PR #5790:
URL:
https://github.com/apache/incubator-kie-drools/pull/5790#discussion_r1528247706
##########
drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java:
##########
@@ -3654,4 +3654,37 @@ void nullSafeDereferencingMethodCallBindVariable() {
ExprConstraintDescr constraintDescr = (ExprConstraintDescr)
patternDescr.getConstraint().getDescrs().get(0);
assertThat(constraintDescr.toString()).isEqualToIgnoringWhitespace("$containsL
: address!.city.contains(\"L\")");
}
+
Review Comment:
```suggestion
@Test
```
Missing `@Test` annotation.
##########
drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/DRLVisitorImpl.java:
##########
@@ -620,17 +622,42 @@ private void
populateExprConstraintDescrList(ParserRuleContext ctx, List<ExprCon
}
/**
- * Takes one constraint as String and create ExprConstraintDescr
+ * Takes one constraint as String and create ExprConstraintDescr.
+ * In case of nested constraint, it could be multiple ExprConstraintDescr
objects.
*/
@Override
- public ExprConstraintDescr visitConstraint(DRLParser.ConstraintContext
ctx) {
+ public List<ExprConstraintDescr>
visitConstraint(DRLParser.ConstraintContext ctx) {
+ List<ExprConstraintDescr> descrList = new ArrayList<>();
+ if (ctx.nestedConstraint() != null) {
+ // nested constraint requires special string manipulation
+ return visitNestedConstraint(ctx.nestedConstraint());
+ }
+ // get a simple constraint as String
String constraint = visitConstraintChildren(ctx);
if (!constraint.isEmpty()) {
ExprConstraintDescr constraintDescr = new
ExprConstraintDescr(constraint);
constraintDescr.setType(ExprConstraintDescr.Type.NAMED);
- return constraintDescr;
+ descrList.add(constraintDescr);
+ return descrList;
}
- return null;
+ return descrList;
+ }
+
+ /**
+ * Append a prefix to nested constraints.
+ * For example,
+ * address.(city.startsWith("I"), city.length() == 5)
+ * becomes
+ * address.city.startsWith("I"), address.city.length() == 5
+ */
+ @Override
+ public List<ExprConstraintDescr>
visitNestedConstraint(DRLParser.NestedConstraintContext ctx) {
+ Token prefixStartToken = ctx.start;
+ Token prefixEndToken =
tokenStream.get(ctx.LPAREN().getSymbol().getTokenIndex() - 1);
+ String prefix = tokenStream.getText(prefixStartToken, prefixEndToken);
+ List<ExprConstraintDescr> exprConstraintDescr =
visitConstraints(ctx.constraints());
+ exprConstraintDescr.stream().forEach(d ->
d.setText(appendPrefix(prefix, d.getText())));
Review Comment:
```suggestion
exprConstraintDescr.forEach(d -> d.setText(appendPrefix(prefix,
d.getText())));
```
Creating a stream seems unnecessary.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]