private static <To, From> void visitChildren( IEntityDefn parent, IEntityDefnFoldVisitor<From, To> visitor, IAggregator<From, To> aggregator) { for (IEntityDefn child : parent.getChildren()) { aggregator.add(visitor.acceptChild(parent, child)); visitChildren(child, visitor, aggregator); } }
private static <To, From> To visitChildren( IEntityDefn parent, To initial, IEntityDefnFoldVisitor<From, To> visitor, IFoldFunction<From, To> foldFunction) { To accumulator = initial; for (IEntityDefn child : parent.getChildren()) { accumulator = foldFunction.apply(visitor.acceptChild(parent, child), accumulator); accumulator = visitChildren(parent, accumulator, visitor, foldFunction); } return accumulator; }