protected override Expression VisitMethodCall(MethodCallExpression node) { if (object.ReferenceEquals(node, _expression)) { FriendlyMessage = _pattern.TryGetFriendlyMessage(_expression, _stack); return(node); } if (node.Object != null) { this.Visit(node.Object); } object instance = null; if (_stack.Count > 0) { instance = _stack.Pop(); } var args = new List <object>(); foreach (var arg in node.Arguments) { this.Visit(arg); args.Add(_stack.Pop()); } var returnValue = node.Method.Invoke(instance, args.Count > 0 ? args.ToArray() : null); _stack.Push(returnValue); return(node); }
private FriendlyMessage?EvaluatePattern(IFriendlyMessagePattern pattern) { try { if (pattern.IsMatch(_part)) { foreach (var subPattern in pattern.SubPatterns) { var message = EvaluatePattern(subPattern); if (message != null) { return(message); } } var formattedMessage = FriendlyMessageFormatter.GetString(pattern.TryGetFriendlyMessage(_part), _context.EvaluatedExpressions); return(new FriendlyMessage(formattedMessage, pattern)); } } catch { return(null); } return(null); }