/// <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); }