/// <summary> /// Returns this list as a <see cref="Microsoft.CodeAnalysis.SeparatedSyntaxList<TNode>"/>. /// </summary> /// <typeparam name="TOther">The type of the list elements in the separated list.</typeparam> /// <returns></returns> internal static SeparatedSyntaxList <TOther> AsSeparatedList <TOther>(this SyntaxNodeOrTokenList list) where TOther : SyntaxNode { var builder = SeparatedSyntaxListBuilder <TOther> .Create(); foreach (var i in list) { var node = i.AsNode(); if (node != null) { builder.Add((TOther)node); } else { builder.AddSeparator(i.AsToken()); } } return(builder.ToList()); }
/// <summary> /// Creates a separated list of nodes from a sequence of nodes and a sequence of separator tokens. /// </summary> /// <typeparam name="TNode">The specific type of the element nodes.</typeparam> /// <param name="nodes">A sequence of syntax nodes.</param> /// <param name="separators">A sequence of token to be interleaved between the nodes. The number of tokens must /// be one less than the number of nodes.</param> public virtual SeparatedSyntaxList <TNode> SeparatedList <TNode>(IEnumerable <TNode> nodes, IEnumerable <SyntaxToken> separators) where TNode : SyntaxNode { // Interleave the nodes and the separators. The number of separators must be equal to or 1 less than the number of nodes or // an argument exception is thrown. if (nodes != null) { IEnumerator <TNode> enumerator = nodes.GetEnumerator(); SeparatedSyntaxListBuilder <TNode> builder = SeparatedSyntaxListBuilder <TNode> .Create(); if (separators != null) { foreach (SyntaxToken token in separators) { if (!enumerator.MoveNext()) { throw new ArgumentException($"{nameof(nodes)} must not be empty.", nameof(nodes)); } builder.Add(enumerator.Current); builder.AddSeparator(token); } } if (enumerator.MoveNext()) { builder.Add(enumerator.Current); if (enumerator.MoveNext()) { throw new ArgumentException($"{nameof(separators)} must have 1 fewer element than {nameof(nodes)}", nameof(separators)); } } return(builder.ToList()); } if (separators != null) { throw new ArgumentException($"When {nameof(nodes)} is null, {nameof(separators)} must also be null.", nameof(separators)); } return(default(SeparatedSyntaxList <TNode>)); }