Пример #1
0
            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);
        }