Пример #1
0
        private NamespaceOrTypeSymbol BuildSymbol(MergedNamespaceOrTypeDeclaration declaration, DiagnosticBag diagnostics)
        {
            switch (declaration.Kind)
            {
            case DeclarationKind.Namespace:
                return(new SourceNamespaceSymbol(_module, this, (MergedNamespaceDeclaration)declaration, diagnostics));

                #region Package Template - BuildSymbol
            case DeclarationKind.Template:
                return(new TemplateSymbol(this, (MergedTemplateDeclaration)declaration));

                #endregion

            case DeclarationKind.Struct:
            case DeclarationKind.Interface:
            case DeclarationKind.Enum:
            case DeclarationKind.Delegate:
            case DeclarationKind.Class:
                return(new SourceNamedTypeSymbol(this, (MergedTypeDeclaration)declaration, diagnostics));

            case DeclarationKind.Script:
            case DeclarationKind.Submission:
            case DeclarationKind.ImplicitClass:
                return(new ImplicitNamedTypeSymbol(this, (MergedTypeDeclaration)declaration, diagnostics));

            default:
                throw ExceptionUtilities.UnexpectedValue(declaration.Kind);
            }
        }
Пример #2
0
        private NamespaceOrTypeSymbol BuildSymbol(MergedNamespaceOrTypeDeclaration declaration, DiagnosticBag diagnostics)
        {
            switch (declaration.Kind)
            {
            case DeclarationKind.Template:
                return(new TemplateSymbol(this, (MergedTemplateDeclaration)declaration));

            case DeclarationKind.Class:
                return(new SourceNamedTypeSymbol(this, (MergedTypeDeclaration)declaration, diagnostics));

            default:
                throw ExceptionUtilities.UnexpectedValue(declaration.Kind);
            }
        }
Пример #3
0
 internal static NamespaceOrTypeSymbol BuildSymbol(
     this MergedNamespaceOrTypeDeclaration declaration,
     NamespaceOrTypeSymbol parent,
     DiagnosticBag diagnostics)
 {
     if (declaration is MergedNamespaceDeclaration)
     {
         return(BuildSymbol((MergedNamespaceDeclaration)declaration, parent, diagnostics));
     }
     else if (declaration is MergedTypeDeclaration)
     {
         return(BuildSymbol((MergedTypeDeclaration)declaration, parent, diagnostics));
     }
     else
     {
         throw new InvalidOperationException();
     }
 }
Пример #4
0
        private Dictionary <string, ImmutableArray <NamespaceOrTypeSymbol> > MakeNameToMembersMap(DiagnosticBag diagnostics)
        {
            var builder = new NameToSymbolMapBuilder(_declaration.Children.Length);

            foreach (var declaration in _declaration.Children)
            {
                MergedNamespaceOrTypeDeclaration mergedDeclaration = null;
                if (declaration is SingleTypeDeclaration typeDeclaration)
                {
                    mergedDeclaration = new MergedTypeDeclaration(ImmutableArray.Create((SingleTypeDeclaration)declaration));
                }

                if (mergedDeclaration != null)
                {
                    builder.Add(BuildSymbol(mergedDeclaration, diagnostics));
                }
                else
                {
                    throw ExceptionUtilities.UnexpectedValue(declaration.Kind);
                }
            }

            return(builder.CreateMap());
        }
Пример #5
0
        private NamespaceOrTypeSymbol BuildSymbol(MergedNamespaceOrTypeDeclaration declaration, DiagnosticBag diagnostics)
        {
            switch (declaration.Kind)
            {
                case DeclarationKind.Namespace:
                    return new SourceNamespaceSymbol(_module, this, (MergedNamespaceDeclaration)declaration);

                case DeclarationKind.Struct:
                case DeclarationKind.Interface:
                case DeclarationKind.Enum:
                case DeclarationKind.Delegate:
                case DeclarationKind.Class:
                    return new SourceNamedTypeSymbol(this, (MergedTypeDeclaration)declaration, diagnostics);

                case DeclarationKind.Script:
                case DeclarationKind.Submission:
                case DeclarationKind.ImplicitClass:
                    return new ImplicitNamedTypeSymbol(this, (MergedTypeDeclaration)declaration, diagnostics);

                default:
                    throw ExceptionUtilities.UnexpectedValue(declaration.Kind);
            }
        }