public FileSymbol()

in src/Bicep.Core/Semantics/FileSymbol.cs [20:141]


        public FileSymbol(
            ISymbolContext context,
            BicepSourceFile sourceFile,
            NamespaceResolver namespaceResolver,
            LocalScope fileScope)
            : base(sourceFile.FileHandle.Uri)
        {
            this.Context = context;
            this.Syntax = sourceFile.ProgramSyntax;
            this.NamespaceResolver = namespaceResolver;
            this.FileKind = sourceFile.FileKind;
            this.LocalScopes = fileScope.ChildScopes;

            var declarationsBySyntax = ImmutableDictionary.CreateBuilder<SyntaxBase, DeclaredSymbol>();
            var extensionDeclarations = ImmutableArray.CreateBuilder<ExtensionNamespaceSymbol>();
            var extensionConfigAssignments = ImmutableArray.CreateBuilder<ExtensionConfigAssignmentSymbol>();
            var metadataDeclarations = ImmutableArray.CreateBuilder<MetadataSymbol>();
            var parameterDeclarations = ImmutableArray.CreateBuilder<ParameterSymbol>();
            var typeDeclarations = ImmutableArray.CreateBuilder<TypeAliasSymbol>();
            var variableDeclarations = ImmutableArray.CreateBuilder<VariableSymbol>();
            var functionDeclarations = ImmutableArray.CreateBuilder<DeclaredFunctionSymbol>();
            var resourceDeclarations = ImmutableArray.CreateBuilder<ResourceSymbol>();
            var moduleDeclarations = ImmutableArray.CreateBuilder<ModuleSymbol>();
            var outputDeclarations = ImmutableArray.CreateBuilder<OutputSymbol>();
            var assertDeclarations = ImmutableArray.CreateBuilder<AssertSymbol>();
            var parameterAssignments = ImmutableArray.CreateBuilder<ParameterAssignmentSymbol>();
            var testDeclarations = ImmutableArray.CreateBuilder<TestSymbol>();
            var importedTypes = ImmutableArray.CreateBuilder<ImportedTypeSymbol>();
            var importedVariables = ImmutableArray.CreateBuilder<ImportedVariableSymbol>();
            var importedFunctions = ImmutableArray.CreateBuilder<ImportedFunctionSymbol>();
            var erroredImports = ImmutableArray.CreateBuilder<ErroredImportSymbol>();
            var wildcardImports = ImmutableArray.CreateBuilder<WildcardImportSymbol>();

            foreach (var declaration in fileScope.Declarations)
            {
                declarationsBySyntax.Add(declaration.DeclaringSyntax, declaration);

                switch (declaration)
                {
                    case ExtensionNamespaceSymbol extensionNamespace:
                        extensionDeclarations.Add(extensionNamespace);

                        break;
                    case ExtensionConfigAssignmentSymbol extensionConfigAssignment:
                        extensionConfigAssignments.Add(extensionConfigAssignment);

                        break;
                    case MetadataSymbol metadata:
                        metadataDeclarations.Add(metadata);
                        break;
                    case ParameterSymbol parameter:
                        parameterDeclarations.Add(parameter);
                        break;
                    case TypeAliasSymbol typeAlias:
                        typeDeclarations.Add(typeAlias);
                        break;
                    case VariableSymbol variable:
                        variableDeclarations.Add(variable);
                        break;
                    case DeclaredFunctionSymbol declaredFunction:
                        functionDeclarations.Add(declaredFunction);
                        break;
                    case ResourceSymbol resource:
                        resourceDeclarations.Add(resource);
                        break;
                    case ModuleSymbol module:
                        moduleDeclarations.Add(module);
                        break;
                    case OutputSymbol output:
                        outputDeclarations.Add(output);
                        break;
                    case AssertSymbol assertion:
                        assertDeclarations.Add(assertion);
                        break;
                    case ParameterAssignmentSymbol parameterAssignment:
                        parameterAssignments.Add(parameterAssignment);
                        break;
                    case TestSymbol test:
                        testDeclarations.Add(test);
                        break;
                    case ImportedTypeSymbol importedType:
                        importedTypes.Add(importedType);
                        break;
                    case ImportedVariableSymbol importedVariable:
                        importedVariables.Add(importedVariable);
                        break;
                    case ImportedFunctionSymbol importedFunction:
                        importedFunctions.Add(importedFunction);
                        break;
                    case ErroredImportSymbol erroredImport:
                        erroredImports.Add(erroredImport);
                        break;
                    case WildcardImportSymbol wildcardImport:
                        wildcardImports.Add(wildcardImport);
                        break;
                }
            }

            DeclarationsBySyntax = declarationsBySyntax.ToImmutable();
            ExtensionDeclarations = extensionDeclarations.ToImmutable();
            ExtensionConfigAssignments = extensionConfigAssignments.ToImmutable();
            MetadataDeclarations = metadataDeclarations.ToImmutable();
            ParameterDeclarations = parameterDeclarations.ToImmutable();
            TypeDeclarations = typeDeclarations.ToImmutable();
            VariableDeclarations = variableDeclarations.ToImmutable();
            FunctionDeclarations = functionDeclarations.ToImmutable();
            ResourceDeclarations = resourceDeclarations.ToImmutable();
            ModuleDeclarations = moduleDeclarations.ToImmutable();
            OutputDeclarations = outputDeclarations.ToImmutable();
            AssertDeclarations = assertDeclarations.ToImmutable();
            ParameterAssignments = parameterAssignments.ToImmutable();
            TestDeclarations = testDeclarations.ToImmutable();
            ImportedTypes = importedTypes.ToImmutable();
            ImportedVariables = importedVariables.ToImmutable();
            ImportedFunctions = importedFunctions.ToImmutable();
            ErroredImports = erroredImports.ToImmutable();
            WildcardImports = wildcardImports.ToImmutable();

            this.declarationsByName = this.Declarations.ToLookup(decl => decl.Name, LanguageConstants.IdentifierComparer);

            this.usingDeclarationLazy = new Lazy<UsingDeclarationSyntax?>(() => this.Syntax.Children.OfType<UsingDeclarationSyntax>().FirstOrDefault());
        }