From 42c1653d0fe37cd35ef00da943417a62f049f722 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Wed, 21 Sep 2022 12:26:38 +0200 Subject: Use ArithmeticNode.resolve instead of creating a new one explicit. --- .../BooleanExpressionTransformer.java | 34 +++++++++++++++- .../BooleanExpressionTransformerTestCase.java | 45 +++++++++++++++++----- 2 files changed, 68 insertions(+), 11 deletions(-) (limited to 'config-model') diff --git a/config-model/src/main/java/com/yahoo/schema/expressiontransforms/BooleanExpressionTransformer.java b/config-model/src/main/java/com/yahoo/schema/expressiontransforms/BooleanExpressionTransformer.java index 0d3f289b824..8fa4b469590 100644 --- a/config-model/src/main/java/com/yahoo/schema/expressiontransforms/BooleanExpressionTransformer.java +++ b/config-model/src/main/java/com/yahoo/schema/expressiontransforms/BooleanExpressionTransformer.java @@ -15,6 +15,7 @@ import java.util.ArrayDeque; import java.util.Deque; import java.util.Iterator; import java.util.List; +import java.util.ArrayList; /** * Transforms @@ -69,11 +70,39 @@ public class BooleanExpressionTransformer extends ExpressionTransformer joinedOps = new ArrayList<>(); + joinOps(left, joinedOps); + joinedOps.add(right.op); + joinOps(right, joinedOps); + List joinedChildren = new ArrayList<>(); + joinChildren(left, joinedChildren); + joinChildren(right, joinedChildren); + return new ArithmeticNode(joinedChildren, joinedOps); + } + + private static void joinOps(ChildNode node, List joinedOps) { + if (node.artificial && node.child instanceof ArithmeticNode arithmeticNode) + joinedOps.addAll(arithmeticNode.operators()); + } + private static void joinChildren(ChildNode node, List joinedChildren) { + if (node.artificial && node.child instanceof ArithmeticNode arithmeticNode) + joinedChildren.addAll(arithmeticNode.children()); + else + joinedChildren.add(node.child); + } + private IfNode andByIfNode(ExpressionNode a, ExpressionNode b) { return new IfNode(a, b, new ConstantNode(new BooleanValue(false))); @@ -88,6 +117,7 @@ public class BooleanExpressionTransformer extends ExpressionTransformer