예제 #1
0
        protected override bool IsViableExtensionMethod(
            IMethodSymbol method,
            SyntaxNode expression,
            SemanticModel semanticModel,
            ISyntaxFacts syntaxFacts,
            CancellationToken cancellationToken
            )
        {
            var leftExpression =
                syntaxFacts.GetExpressionOfMemberAccessExpression(expression)
                ?? syntaxFacts.GetTargetOfMemberBinding(expression);

            if (leftExpression == null)
            {
                if (expression.IsKind(SyntaxKind.CollectionInitializerExpression))
                {
                    leftExpression = expression.GetAncestor <ObjectCreationExpressionSyntax>();
                }
                else
                {
                    return(false);
                }
            }

            var semanticInfo       = semanticModel.GetTypeInfo(leftExpression, cancellationToken);
            var leftExpressionType = semanticInfo.Type;

            return(IsViableExtensionMethod(method, leftExpressionType));
        }