public virtual SyntaxTriviaList VisitList(SyntaxTriviaList list) { var count = list.Count; if (count != 0) { SyntaxTriviaListBuilder alternate = null; var index = -1; foreach (var item in list) { index++; var visited = VisitListElement(item); //skip the null check since SyntaxTrivia is a value type if (visited != item && alternate == null) { alternate = new SyntaxTriviaListBuilder(count); alternate.Add(list, 0, index); } if (alternate != null && visited != null) { alternate.Add(visited); } } if (alternate != null) { return(alternate.ToList()); } } return(list); }
private static SyntaxNode CreateNode(SyntaxTrivia[] trivias) { if (trivias == null) { return(null); } var builder = new SyntaxTriviaListBuilder(trivias.Length); builder.Add(trivias); return(builder.ToList().Node); }
private static void ClearAndFreeBuilder(SyntaxTriviaListBuilder builder) { // It's possible someone might create a list with a huge amount of trivia // in it. We don't want to hold onto such items forever. So only cache // reasonably sized lists. In IDE testing, around 99% of all trivia lists // were 16 or less elements. const int MaxBuilderCount = 16; if (builder.Count <= MaxBuilderCount) { builder.Clear(); s_builderPool.Free(builder); } }
/// <summary> /// Creates a list of trivia. /// </summary> /// <param name="trivias">A sequence of trivia.</param> public SyntaxTriviaList(IEnumerable <SyntaxTrivia> trivias) : this(SyntaxTriviaListBuilder.Create(trivias).Node, 0, 0) { }