/// <summary> /// Removes given list of elements form IProjectTree /// </summary> /// <param name="tree"></param> /// <param name="itemsToRemove"></param> /// <param name="itemFilter"></param> /// <returns></returns> public static IProjectTree RemoveElementsFromTree(this IProjectTree tree, IEnumerable <string> itemsToRemove, Func <string, bool> itemFilter) { foreach (string file in itemsToRemove) { if (itemFilter(file)) { // See if we already have this one - we shouldn't var existingNode = tree.FindImmediateChildByPath(file); System.Diagnostics.Debug.Assert(existingNode != null); if (existingNode != null) { tree = existingNode.Remove(); } } } return(tree); }
/// <summary> /// Adds a givel list of elements to IProjectTree /// </summary> /// <param name="tree"></param> /// <param name="itemsToAdd"></param> /// <param name="itemFilter"></param> /// <param name="nodeCreator"></param> /// <returns></returns> public static IProjectTree AddElementsToTree(this IProjectTree tree, IEnumerable <string> itemsToAdd, Func <string, bool> itemFilter, Func <string, IProjectTree> nodeCreator) { foreach (string item in itemsToAdd) { if (itemFilter(item)) { // Double check we don't already have this one - we shouldn't var existingNode = tree.FindImmediateChildByPath(item); System.Diagnostics.Debug.Assert(existingNode == null); if (existingNode == null) { tree = tree.Add(nodeCreator(item)).Parent; } } } return(tree); }