本文整理汇总了C#中IAstNode.RemoveChildren方法的典型用法代码示例。如果您正苦于以下问题:C# IAstNode.RemoveChildren方法的具体用法?C# IAstNode.RemoveChildren怎么用?C# IAstNode.RemoveChildren使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IAstNode
的用法示例。
在下文中一共展示了IAstNode.RemoveChildren方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: InvalidateInRange
/// <summary>
/// Removes nodes from the tree collection if node range is
/// // partially or entirely within the deleted region.
/// This is needed since parsing is asynchronous and without
/// removing damaged nodes so intellisense will still be able
/// to find them in the tree which actually they are gone.
/// Returns true if full parse required.
/// </summary>
/// <param name="node">Node to start from</param>
/// <param name="range">Range to invalidate elements in</param>
internal bool InvalidateInRange(IAstNode node, ITextRange range, out bool nodesChanged) {
var removedElements = new List<IAstNode>();
bool fullParseRequired = false;
int firstToRemove = -1;
int lastToRemove = -1;
nodesChanged = false;
for (int i = 0; i < node.Children.Count; i++) {
var child = node.Children[i];
bool removeChild = false;
if (range.Start == child.Start && range.Length == 0) {
// Change is right before the node
break;
}
if (!removeChild && TextRange.Intersect(range, child)) {
bool childElementsChanged;
if (child is TokenNode) {
childElementsChanged = true;
fullParseRequired = true;
nodesChanged = true;
} else {
fullParseRequired |= InvalidateInRange(child, range, out childElementsChanged);
if (childElementsChanged) {
nodesChanged = true;
}
}
removeChild = true;
}
if (removeChild) {
if (firstToRemove < 0)
firstToRemove = i;
lastToRemove = i;
}
}
if (firstToRemove >= 0) {
for (int i = firstToRemove; i <= lastToRemove; i++) {
IAstNode child = node.Children[i];
removedElements.Add(child);
_astRoot.Errors.RemoveInRange(child);
}
node.RemoveChildren(firstToRemove, lastToRemove - firstToRemove + 1);
}
if (removedElements.Count > 0) {
nodesChanged = true;
FireOnNodesRemoved(removedElements);
}
return fullParseRequired;
}