code: private IntermediateQueryBuilder copyChildrenNodesToBuilder(final IntermediateQuery originalQuery,
                                                                  IntermediateQueryBuilder queryBuilder,
                                                                  final QueryNode originalParentNode,
                                                                  final QueryNode newParentNode,
                                                                  HomogeneousQueryNodeTransformer nodeTransformer) {
  
          for (QueryNode originalChildNode : originalQuery.getChildren(originalParentNode)) {
  
              QueryNode newChildNode;
              newChildNode = originalChildNode.acceptNodeTransformer(nodeTransformer);
              Optional<BinaryOrderedOperatorNode.ArgumentPosition> optionalPosition = originalQuery.getOptionalPosition(originalParentNode, originalChildNode);
              queryBuilder.addChild(newParentNode, newChildNode, optionalPosition);
  
              // Recursive call
              queryBuilder = copyChildrenNodesToBuilder(originalQuery, queryBuilder, originalChildNode, newChildNode, nodeTransformer);
          }
          return queryBuilder;
      }
docs: TODO: replace this implementation by a non-recursive one.