Exemplo n.º 1
0
            public override bool GetValue(EvalContext ctx)
            {           //common code not refactored to parent class for speed (less virt calls)
                var lv = LeftOperand.GetValue(ctx);

                if (ctx.Aborted)
                {
                    return(false);
                }
                var rv = RightOperand.GetValue(ctx);

                if (ctx.Aborted)
                {
                    return(false);
                }
                return(lv ^ rv);
            }
Exemplo n.º 2
0
        public override ITypedValue GetValueInternal(ExpressionState state)
        {
            var leftOp  = LeftOperand;
            var rightOp = RightOperand;
            var left    = leftOp.GetValue <string>(state);
            var right   = RightOperand.GetValue(state);

            if (left == null)
            {
                throw new SpelEvaluationException(leftOp.StartPosition, SpelMessage.INVALID_FIRST_OPERAND_FOR_MATCHES_OPERATOR, (object)null);
            }

            if (!(right is string))
            {
                throw new SpelEvaluationException(rightOp.StartPosition, SpelMessage.INVALID_SECOND_OPERAND_FOR_MATCHES_OPERATOR, right);
            }

            try
            {
                var rightString = (string)right;
                _patternCache.TryGetValue(rightString, out var pattern);
                if (pattern == null)
                {
                    pattern = new Regex(rightString, RegexOptions.Compiled, TimeSpan.FromSeconds(1));
                    _patternCache.TryAdd(rightString, pattern);
                }

                return(BooleanTypedValue.ForValue(pattern.IsMatch(left)));
            }
            catch (ArgumentException ex)
            {
                throw new SpelEvaluationException(rightOp.StartPosition, ex, SpelMessage.INVALID_PATTERN, right);
            }
            catch (RegexMatchTimeoutException ex)
            {
                throw new SpelEvaluationException(rightOp.StartPosition, ex, SpelMessage.FLAWED_PATTERN, right);
            }
        }