// Parse: // namespace-qualified-type-name --> NAMESPACE-NAME namespace-qualifier-tail . TYPE-NAME // --> NAMESPACE-NAME . TYPE-NAME // --> TYPE-NAME // // namespace-qualifier-tail --> . NAMESPACE-NAME namespace-qualifier-tail internal CodeExpression ParseRootNamespaceIdentifier(ParserContext parserContext, NamespaceSymbol nsSym, bool assignIsEquality) { // Loop through all the namespace qualifiers until we find something that's not a namespace. Symbol nestedSym = null; while (nsSym != null) { Token token = parserContext.NextToken(); if (token.TokenID != TokenID.Dot) throw new RuleSyntaxException(ErrorNumbers.Error_MissingDotAfterNamespace, Messages.Parser_MissingDotAfterNamespace, token.StartPosition); token = parserContext.NextToken(); if (token.TokenID != TokenID.Identifier) { if (parserContext.provideIntellisense && token.TokenID == TokenID.EndOfInput) { parserContext.SetNamespaceCompletions(nsSym); return null; } else { throw new RuleSyntaxException(ErrorNumbers.Error_MissingIdentifierAfterDot, Messages.Parser_MissingIdentifierAfterDot, token.StartPosition); } } string name = (string)token.Value; nestedSym = nsSym.FindMember(name); if (nestedSym == null) { string message = string.Format(CultureInfo.CurrentCulture, Messages.Parser_UnknownNamespaceMember, name, nsSym.GetQualifiedName()); throw new RuleSyntaxException(ErrorNumbers.Error_UnknownNamespaceMember, message, token.StartPosition); } nsSym = nestedSym as NamespaceSymbol; } // We are sitting at a type (or overloaded type). return nestedSym.ParseRootIdentifier(this, parserContext, assignIsEquality); }
internal CodeExpression ParseRootNamespaceIdentifier(ParserContext parserContext, NamespaceSymbol nsSym, bool assignIsEquality) { Symbol symbol = null; while (nsSym != null) { Token token = parserContext.NextToken(); if (token.TokenID != TokenID.Dot) { throw new RuleSyntaxException(0x189, Messages.Parser_MissingDotAfterNamespace, token.StartPosition); } token = parserContext.NextToken(); if (token.TokenID != TokenID.Identifier) { if (!parserContext.provideIntellisense || (token.TokenID != TokenID.EndOfInput)) { throw new RuleSyntaxException(0x185, Messages.Parser_MissingIdentifierAfterDot, token.StartPosition); } parserContext.SetNamespaceCompletions(nsSym); return null; } string memberName = (string) token.Value; symbol = nsSym.FindMember(memberName); if (symbol == null) { string message = string.Format(CultureInfo.CurrentCulture, Messages.Parser_UnknownNamespaceMember, new object[] { memberName, nsSym.GetQualifiedName() }); throw new RuleSyntaxException(0x18a, message, token.StartPosition); } nsSym = symbol as NamespaceSymbol; } return symbol.ParseRootIdentifier(this, parserContext, assignIsEquality); }