Example #1
0
        public SyntaxList <TNode> VisitList <TNode>(SyntaxList <TNode> list) where TNode : CSharpSyntaxNode
        {
            SyntaxListBuilder alternate = null;

            for (int i = 0, n = list.Count; i < n; i++)
            {
                var item    = list[i];
                var visited = (TNode)this.Visit(item);
                if (item != visited && alternate == null)
                {
                    alternate = new SyntaxListBuilder(n);
                    alternate.AddRange(list, 0, i);
                }

                if (alternate != null)
                {
                    Debug.Assert(visited != null && visited.Kind != SyntaxKind.None, "Cannot remove node using Syntax.InternalSyntax.SyntaxRewriter.");
                    alternate.Add(visited);
                }
            }

            if (alternate != null)
            {
                return(alternate.ToList());
            }

            return(list);
        }
Example #2
0
        private void AddSkippedNamespaceText(
            ref CompilationUnitBodyBuilder body,
            ref SyntaxListBuilder initialBadNodes,
            CSharpSyntaxNode skippedSyntax)
        {
            if (body.Members.Count > 0)
            {
                body.Members[body.Members.Count - 1] = AddTrailingSkippedSyntax(body.Members[body.Members.Count - 1], skippedSyntax);
            }
            else if (body.Imports.Count > 0)
            {
                body.Imports[body.Imports.Count - 1] = AddTrailingSkippedSyntax(body.Imports[body.Imports.Count - 1], skippedSyntax);
            }
            else if (body.Package != null)
            {
                body.Package = AddTrailingSkippedSyntax(body.Package, skippedSyntax);
            }
            else if (body.Annotations.Count > 0)
            {
                body.Annotations[body.Annotations.Count - 1] = AddTrailingSkippedSyntax(body.Annotations[body.Annotations.Count - 1], skippedSyntax);
            }
            else
            {
                if (initialBadNodes == null)
                {
                    initialBadNodes = this._pool.Allocate();
                }

                initialBadNodes.AddRange(skippedSyntax);
            }
        }
Example #3
0
 public void AddRange(TNode[] items, int offset, int length)
 {
     _builder.AddRange(items, offset, length);
 }