Exemple #1
0
 public QualifiedDeclarationNameSyntax(DeclarationNameSyntax left, SyntaxToken colonColonToken, IdentifierDeclarationNameSyntax right)
     : base(SyntaxKind.QualifiedDeclarationName)
 {
     RegisterChildNode(out Left, left);
     RegisterChildNode(out ColonColonToken, colonColonToken);
     RegisterChildNode(out Right, right);
 }
        private ContainerSymbol LookupContainer(DeclarationNameSyntax name)
        {
            switch (name.Kind)
            {
            case SyntaxKind.IdentifierDeclarationName:
                var containers = LookupNamespaceOrClass(((IdentifierDeclarationNameSyntax)name).Name).ToImmutableArray();

                if (containers.Length == 0)
                {
                    Diagnostics.ReportUndeclaredType(name);
                    return(null);
                }

                if (containers.Length > 1)
                {
                    Diagnostics.ReportAmbiguousType(((IdentifierDeclarationNameSyntax)name).Name, containers);
                }

                Bind((IdentifierDeclarationNameSyntax)name, x => new BoundName(containers.First()));

                return(containers.First());

            case SyntaxKind.QualifiedDeclarationName:
                var qualifiedName = (QualifiedDeclarationNameSyntax)name;
                var leftContainer = LookupContainer(qualifiedName.Left);
                var result        = LookupContainerMember(leftContainer, qualifiedName.Right.Name);
                Bind(qualifiedName.Right, x => new BoundName(result));
                return(result);

            default:
                throw new InvalidOperationException();
            }
        }