Example #1
0
        public static ExtensionMethodInfo GetExtensionMethodInfo(
            this SemanticModel semanticModel,
            ExpressionSyntax expression,
            ExtensionMethodKind allowedKinds,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            ISymbol symbol = GetSymbol(semanticModel, expression, cancellationToken);

            if (symbol?.IsMethod() == true)
            {
                return(ExtensionMethodInfo.Create((IMethodSymbol)symbol, semanticModel, allowedKinds));
            }
            else
            {
                return(default(ExtensionMethodInfo));
            }
        }
Example #2
0
        public static bool TryGetExtensionMethodInfo(
            this SemanticModel semanticModel,
            ExpressionSyntax expression,
            out MethodInfo methodInfo,
            ExtensionMethodKind kind            = ExtensionMethodKind.None,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            ISymbol symbol = semanticModel.GetSymbol(expression, cancellationToken);

            if (symbol?.IsMethod() == true &&
                ExtensionMethodInfo.TryCreate((IMethodSymbol)symbol, semanticModel, out ExtensionMethodInfo extensionMethodInfo, kind))
            {
                methodInfo = extensionMethodInfo.MethodInfo;
                return(true);
            }

            methodInfo = default(MethodInfo);
            return(false);
        }
        internal static ExtensionMethodInfo Create(IMethodSymbol methodSymbol, SemanticModel semanticModel, ExtensionMethodKind allowedKinds)
        {
            if (methodSymbol == null)
            {
                throw new ArgumentNullException(nameof(methodSymbol));
            }

            if (semanticModel == null)
            {
                throw new ArgumentNullException(nameof(semanticModel));
            }

            if (methodSymbol.IsExtensionMethod)
            {
                IMethodSymbol reducedFrom = methodSymbol.ReducedFrom;

                if (reducedFrom != null)
                {
                    if ((allowedKinds & ExtensionMethodKind.Reduced) != 0)
                    {
                        return(new ExtensionMethodInfo(methodSymbol, reducedFrom, semanticModel));
                    }
                }
                else if ((allowedKinds & ExtensionMethodKind.Ordinary) != 0)
                {
                    return(new ExtensionMethodInfo(methodSymbol, methodSymbol, semanticModel));
                }
            }

            return(default(ExtensionMethodInfo));
        }
        public static bool TryCreate(IMethodSymbol methodSymbol, SemanticModel semanticModel, out ExtensionMethodInfo extensionMethodInfo, ExtensionMethodKind kind = ExtensionMethodKind.None)
        {
            if (methodSymbol?.IsExtensionMethod == true)
            {
                IMethodSymbol reducedFrom = methodSymbol.ReducedFrom;

                if (reducedFrom != null)
                {
                    if (kind != ExtensionMethodKind.NonReduced)
                    {
                        extensionMethodInfo = new ExtensionMethodInfo(reducedFrom, methodSymbol, semanticModel);
                        return(true);
                    }
                }
                else if (kind != ExtensionMethodKind.Reduced)
                {
                    extensionMethodInfo = new ExtensionMethodInfo(methodSymbol, null, semanticModel);
                    return(true);
                }
            }

            extensionMethodInfo = default(ExtensionMethodInfo);
            return(false);
        }