|
2 | 2 |
|
3 | 3 | import static io.github.perplexhub.rsql.RSQLOperators.*;
|
4 | 4 |
|
| 5 | +import cz.jirutka.rsql.parser.ast.LogicalNode; |
5 | 6 | import java.util.*;
|
| 7 | +import java.util.function.BiFunction; |
6 | 8 | import java.util.function.Function;
|
7 | 9 | import java.util.stream.Collectors;
|
8 | 10 |
|
@@ -429,14 +431,24 @@ private Predicate equalPredicate(Expression expr, Class type, Object argument) {
|
429 | 431 | @Override
|
430 | 432 | public Predicate visit(AndNode node, From root) {
|
431 | 433 | log.debug("visit(node:{},root:{})", node, root);
|
432 |
| - |
433 |
| - return node.getChildren().stream().map(n -> n.accept(this, root)).collect(Collectors.reducing(builder::and)).get(); |
| 434 | + return visitChildren(node, root, builder::and); |
434 | 435 | }
|
435 | 436 |
|
436 | 437 | @Override
|
437 | 438 | public Predicate visit(OrNode node, From root) {
|
438 | 439 | log.debug("visit(node:{},root:{})", node, root);
|
| 440 | + return visitChildren(node, root, builder::or); |
| 441 | + } |
| 442 | + |
| 443 | + private Predicate visitChildren(LogicalNode node, From root, BiFunction<Predicate, Predicate, Predicate> reducer) { |
| 444 | + Predicate result = null; |
| 445 | + |
| 446 | + for (var child : node) { |
| 447 | + result = result != null |
| 448 | + ? reducer.apply(result, child.accept(this, root)) |
| 449 | + : child.accept(this, root); |
| 450 | + } |
439 | 451 |
|
440 |
| - return node.getChildren().stream().map(n -> n.accept(this, root)).collect(Collectors.reducing(builder::or)).get(); |
| 452 | + return result; |
441 | 453 | }
|
442 | 454 | }
|
0 commit comments