File: src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationNamespaceOrTypeSymbol.cs
Web Access
Project: src\roslyn\src\RoslynAnalyzers\Tools\GenerateDocumentationAndConfigFiles\GenerateDocumentationAndConfigFiles.csproj (GenerateDocumentationAndConfigFiles)
// 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.Immutable;
using Microsoft.CodeAnalysis.Editing;

namespace Microsoft.CodeAnalysis.CodeGeneration;

internal abstract class CodeGenerationNamespaceOrTypeSymbol : CodeGenerationSymbol, INamespaceOrTypeSymbol
{
    protected CodeGenerationNamespaceOrTypeSymbol(
        IAssemblySymbol containingAssembly,
        INamedTypeSymbol containingType,
        ImmutableArray<AttributeData> attributes,
        Accessibility declaredAccessibility,
        DeclarationModifiers modifiers,
        string name)
        : base(containingAssembly, containingType, attributes, declaredAccessibility, modifiers, name)
    {
    }

    public virtual ImmutableArray<ISymbol> GetMembers()
        => [];

    public ImmutableArray<ISymbol> GetMembers(string name)
        => GetMembers().WhereAsArray(s => s.Name == name);

    public virtual ImmutableArray<INamedTypeSymbol> GetTypeMembers()
        => [];

    public ImmutableArray<INamedTypeSymbol> GetTypeMembers(string name)
        => GetTypeMembers().WhereAsArray(s => s.Name == name);

    public ImmutableArray<INamedTypeSymbol> GetTypeMembers(string name, int arity)
        => GetTypeMembers(name).WhereAsArray(n => n.Arity == arity);

    public abstract bool IsNamespace { get; }

    public abstract bool IsType { get; }
}