File: Structure\CSharpBlockStructureProvider.cs
Web Access
Project: src\src\Features\CSharp\Portable\Microsoft.CodeAnalysis.CSharp.Features.csproj (Microsoft.CodeAnalysis.CSharp.Features)
// 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.
 
#nullable disable
 
using System;
using System.Collections.Immutable;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Structure;
 
namespace Microsoft.CodeAnalysis.CSharp.Structure;
 
internal sealed class CSharpBlockStructureProvider : AbstractBlockStructureProvider
{
    private static ImmutableDictionary<Type, ImmutableArray<AbstractSyntaxStructureProvider>> CreateDefaultNodeProviderMap()
    {
        var builder = ImmutableDictionary.CreateBuilder<Type, ImmutableArray<AbstractSyntaxStructureProvider>>();
 
        builder.Add<AccessorDeclarationSyntax, AccessorDeclarationStructureProvider>();
        builder.Add<AnonymousMethodExpressionSyntax, AnonymousMethodExpressionStructureProvider>();
        builder.Add<ArrowExpressionClauseSyntax, ArrowExpressionClauseStructureProvider>();
        builder.Add<BlockSyntax, BlockSyntaxStructureProvider>();
        builder.Add<ClassDeclarationSyntax, TypeDeclarationStructureProvider>();
        builder.Add<CompilationUnitSyntax, CompilationUnitStructureProvider>();
        builder.Add<ConstructorDeclarationSyntax, ConstructorDeclarationStructureProvider>();
        builder.Add<ConversionOperatorDeclarationSyntax, ConversionOperatorDeclarationStructureProvider>();
        builder.Add<DelegateDeclarationSyntax, DelegateDeclarationStructureProvider>();
        builder.Add<DestructorDeclarationSyntax, DestructorDeclarationStructureProvider>();
        builder.Add<DocumentationCommentTriviaSyntax, DocumentationCommentStructureProvider>();
        builder.Add<EnumDeclarationSyntax, EnumDeclarationStructureProvider>();
        builder.Add<EnumMemberDeclarationSyntax, EnumMemberDeclarationStructureProvider>();
        builder.Add<EventDeclarationSyntax, EventDeclarationStructureProvider>();
        builder.Add<EventFieldDeclarationSyntax, EventFieldDeclarationStructureProvider>();
        builder.Add<FieldDeclarationSyntax, FieldDeclarationStructureProvider>();
        builder.Add<FileScopedNamespaceDeclarationSyntax, FileScopedNamespaceDeclarationStructureProvider>();
        builder.Add<IndexerDeclarationSyntax, IndexerDeclarationStructureProvider>();
        builder.Add<InitializerExpressionSyntax, InitializerExpressionStructureProvider>();
        builder.Add<AnonymousObjectCreationExpressionSyntax, AnonymousObjectCreationExpressionStructureProvider>();
        builder.Add<InterfaceDeclarationSyntax, TypeDeclarationStructureProvider>();
        builder.Add<MethodDeclarationSyntax, MethodDeclarationStructureProvider>();
        builder.Add<NamespaceDeclarationSyntax, NamespaceDeclarationStructureProvider>();
        builder.Add<OperatorDeclarationSyntax, OperatorDeclarationStructureProvider>();
        builder.Add<ParenthesizedLambdaExpressionSyntax, ParenthesizedLambdaExpressionStructureProvider>();
        builder.Add<PropertyDeclarationSyntax, PropertyDeclarationStructureProvider>();
        builder.Add<RecordDeclarationSyntax, TypeDeclarationStructureProvider>();
        builder.Add<RegionDirectiveTriviaSyntax, RegionDirectiveStructureProvider>();
        builder.Add<SimpleLambdaExpressionSyntax, SimpleLambdaExpressionStructureProvider>();
        builder.Add<StructDeclarationSyntax, TypeDeclarationStructureProvider>();
        builder.Add<SwitchStatementSyntax, SwitchStatementStructureProvider>();
        builder.Add<LiteralExpressionSyntax, StringLiteralExpressionStructureProvider>();
        builder.Add<InterpolatedStringExpressionSyntax, InterpolatedStringExpressionStructureProvider>();
        builder.Add<IfDirectiveTriviaSyntax, IfDirectiveTriviaStructureProvider>();
        builder.Add<CollectionExpressionSyntax, CollectionExpressionStructureProvider>();
        builder.Add<ArgumentListSyntax, ArgumentListStructureProvider>();
 
        return builder.ToImmutable();
    }
 
    private static ImmutableDictionary<int, ImmutableArray<AbstractSyntaxStructureProvider>> CreateDefaultTriviaProviderMap()
    {
        var builder = ImmutableDictionary.CreateBuilder<int, ImmutableArray<AbstractSyntaxStructureProvider>>();
 
        builder.Add((int)SyntaxKind.DisabledTextTrivia, [new DisabledTextTriviaStructureProvider()]);
        builder.Add((int)SyntaxKind.MultiLineCommentTrivia, [new MultilineCommentBlockStructureProvider()]);
 
        return builder.ToImmutable();
    }
 
    internal CSharpBlockStructureProvider()
        : base(CreateDefaultNodeProviderMap(), CreateDefaultTriviaProviderMap())
    {
    }
}