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]

Reply via email to