当前位置: 首页>>代码示例>>C#>>正文


C# SemanticModel.LookupName方法代码示例

本文整理汇总了C#中Microsoft.CodeAnalysis.SemanticModel.LookupName方法的典型用法代码示例。如果您正苦于以下问题:C# SemanticModel.LookupName方法的具体用法?C# SemanticModel.LookupName怎么用?C# SemanticModel.LookupName使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Microsoft.CodeAnalysis.SemanticModel的用法示例。


在下文中一共展示了SemanticModel.LookupName方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: IsPotentialTypeName

		public static bool IsPotentialTypeName(this TypeSyntax typeSyntax, SemanticModel semanticModelOpt, CancellationToken cancellationToken)
		{
			if (typeSyntax == null)
			{
				return false;
			}

			if (typeSyntax is PredefinedTypeSyntax ||
				typeSyntax is ArrayTypeSyntax ||
				typeSyntax is GenericNameSyntax ||
				typeSyntax is PointerTypeSyntax ||
				typeSyntax is NullableTypeSyntax)
			{
				return true;
			}

			if (semanticModelOpt == null)
			{
				return false;
			}

			var nameSyntax = typeSyntax as NameSyntax;
			if (nameSyntax == null)
			{
				return false;
			}

			var nameToken = nameSyntax.GetNameToken();

			var symbols = semanticModelOpt.LookupName(nameToken, namespacesAndTypesOnly: true, cancellationToken: cancellationToken);
			var firstSymbol = symbols.FirstOrDefault();

			var typeSymbol = firstSymbol != null && firstSymbol.Kind == SymbolKind.Alias
				? (firstSymbol as IAliasSymbol).Target
				: firstSymbol as ITypeSymbol;

			return typeSymbol != null
				&& !typeSymbol.IsErrorType();
		}
开发者ID:FreeBSD-DotNet,项目名称:monodevelop,代码行数:39,代码来源:TypeSyntaxExtensions.cs

示例2: IsGenericTypeArgumentContext

        public static bool IsGenericTypeArgumentContext(
            this SyntaxTree syntaxTree,
            int position,
            SyntaxToken tokenOnLeftOfPosition,
            CancellationToken cancellationToken,
            SemanticModel semanticModelOpt = null)
        {
            // cases:
            //    Foo<|
            //    Foo<Bar,|
            //    Foo<Bar<Baz<int[],|
            var token = tokenOnLeftOfPosition;
            token = token.GetPreviousTokenIfTouchingWord(position);

            if (token.Kind() != SyntaxKind.LessThanToken && token.Kind() != SyntaxKind.CommaToken)
            {
                return false;
            }

            if (token.Parent is TypeArgumentListSyntax)
            {
                // Easy case, it was known to be a generic name, so this is a type argument context.
                return true;
            }

            SyntaxToken nameToken;
            if (!syntaxTree.IsInPartiallyWrittenGeneric(position, cancellationToken, out nameToken))
            {
                return false;
            }

            var name = nameToken.Parent as NameSyntax;
            if (name == null)
            {
                return false;
            }

            // Looks viable!  If they provided a binding, then check if it binds properly to
            // an actual generic entity.
            if (semanticModelOpt == null)
            {
                // No binding.  Just make the decision based on the syntax tree.
                return true;
            }

            // '?' is syntactically ambiguous in incomplete top-level statements:
            //
            // T ? foo<|
            //
            // Might be an incomplete conditional expression or an incomplete declaration of a method returning a nullable type.
            // Bind T to see if it is a type. If it is we don't show signature help.
            if (name.IsParentKind(SyntaxKind.LessThanExpression) &&
                name.Parent.IsParentKind(SyntaxKind.ConditionalExpression) &&
                name.Parent.Parent.IsParentKind(SyntaxKind.ExpressionStatement) &&
                name.Parent.Parent.Parent.IsParentKind(SyntaxKind.GlobalStatement))
            {
                var conditionOrType = semanticModelOpt.GetSymbolInfo(
                    ((ConditionalExpressionSyntax)name.Parent.Parent).Condition, cancellationToken);
                if (conditionOrType.GetBestOrAllSymbols().FirstOrDefault() != null &&
                    conditionOrType.GetBestOrAllSymbols().FirstOrDefault().Kind == SymbolKind.NamedType)
                {
                    return false;
                }
            }

            var symbols = semanticModelOpt.LookupName(nameToken, namespacesAndTypesOnly: SyntaxFacts.IsInNamespaceOrTypeContext(name), cancellationToken: cancellationToken);
            return symbols.Any(s =>
                s.TypeSwitch(
                    (INamedTypeSymbol nt) => nt.Arity > 0,
                    (IMethodSymbol m) => m.Arity > 0));
        }
开发者ID:robbert229,项目名称:omnisharp-roslyn,代码行数:71,代码来源:SyntaxTreeExtensions.cs


注:本文中的Microsoft.CodeAnalysis.SemanticModel.LookupName方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。