public static int TransformOn <T>(this IEnumerable <T> nodes, Func <T, bool> nodeFilter, Func <T, BaseNode> transform, BaseNode tree) where T : BaseNode { var selector = new DynamicVisitor(); var result = 0; selector.OnVisit((node, visitor) => { visitor.VisitChildren(node); if (node is T && nodeFilter((T)node)) { var transformed = transform((T)node); if (transformed != node) { var parent = node.Parent; parent.Replace(node, transformed); } result++; } }); tree.Visit(selector); return(result); }
public static IEnumerable <BaseNode> From <T>(this IEnumerable <T> nodes, Func <T, bool> nodeFilter, BaseNode tree) where T : BaseNode { var selector = new DynamicVisitor(); var result = new List <BaseNode>(); selector.OnVisit((node, visitor) => { if (node is T && nodeFilter((T)node)) { result.Add(node); } visitor.VisitChildren(node); }); tree.Visit(selector); return(result); }
public List <BaseNode> From(BaseNode tree) { var result = new List <BaseNode>(); var nodeSelector = new DynamicVisitor(); nodeSelector.OnVisit((node, visitor) => { if (FilterFunction == null || node is T && FilterFunction((T)node)) { result.Add(node); } visitor.VisitChildren(node); }); tree.Visit(nodeSelector); return(result); }
public int On(BaseNode tree) { var result = 0; var nodeSelector = new DynamicVisitor(); nodeSelector.OnVisit((node, visitor) => { visitor.VisitChildren(node); if (FilterFunction == null || node is T && FilterFunction((T)node)) { var transformedNode = TransformFunction((T)node); if (transformedNode != node) { node.Parent.Replace(node, transformedNode); } ++result; } }); tree.Visit(nodeSelector); return(result); }
public void Visit(ScopeNode node) { visitor.OnVisit((n, v) => Result = IsSameChildren(n, node)); reference.Visit(visitor); }