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(); } }