// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System.Collections.Generic; using System.Linq; using Microsoft.CodeAnalysis.CSharp.Syntax; namespace Microsoft.CodeAnalysis.CSharp.Extensions; internal static class BaseNamespaceDeclarationSyntaxExtensions { public static TNamespaceDeclarationSyntax AddUsingDirectives<TNamespaceDeclarationSyntax>( this TNamespaceDeclarationSyntax namespaceDeclaration, IList<UsingDirectiveSyntax> usingDirectives, bool placeSystemNamespaceFirst, params SyntaxAnnotation[] annotations) where TNamespaceDeclarationSyntax : BaseNamespaceDeclarationSyntax { if (usingDirectives.Count == 0) return namespaceDeclaration; var newUsings = new List<UsingDirectiveSyntax>(); newUsings.AddRange(namespaceDeclaration.Usings); newUsings.AddRange(usingDirectives); newUsings.SortUsingDirectives(namespaceDeclaration.Usings, placeSystemNamespaceFirst); newUsings = [.. newUsings.Select(u => u.WithAdditionalAnnotations(annotations))]; var newNamespace = namespaceDeclaration.WithUsings([.. newUsings]); return (TNamespaceDeclarationSyntax)newNamespace; } } |