当前位置: 首页>>代码示例>>C#>>正文


C# IAstNode.RemoveChildren方法代码示例

本文整理汇总了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;
        }
开发者ID:AlexanderSher,项目名称:RTVS-Old,代码行数:70,代码来源:EditorTree.cs


注:本文中的IAstNode.RemoveChildren方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。