コード例 #1
0
        /// <summary>
        /// Returns the action from the given expression.
        /// </summary>
        private MethodDeclarationSyntax GetActionFromExpression(ExpressionSyntax expr)
        {
            MethodDeclarationSyntax action = null;

            string actionName = string.Empty;

            if (expr is InvocationExpressionSyntax)
            {
                var invocation = expr as InvocationExpressionSyntax;
                if (!(invocation.Expression is IdentifierNameSyntax) ||
                    !(invocation.Expression as IdentifierNameSyntax).Identifier.ValueText.Equals("nameof") ||
                    invocation.ArgumentList.Arguments.Count != 1)
                {
                    return(action);
                }

                var param      = invocation.ArgumentList.Arguments[0];
                var identifier = AnalysisContext.GetIdentifier(param.Expression);
                actionName = identifier.Identifier.ValueText;
            }
            else if (expr is LiteralExpressionSyntax)
            {
                var literal = expr as LiteralExpressionSyntax;
                actionName = literal.ToString();
            }

            action = this.Machine.Declaration.DescendantNodes().OfType <MethodDeclarationSyntax>().
                     Where(m => m.Identifier.ValueText.Equals(actionName)).FirstOrDefault();

            return(action);
        }