private static bool HasNoParameterAccess()

in EsentCollections/ConstantExpressionEvaluator.cs [138:194]


        private static bool HasNoParameterAccess(Expression expression)
        {
            if (null == expression)
            {
                return true;
            }

            switch (expression.NodeType)
            {
                case ExpressionType.Constant:
                    return true;

                case ExpressionType.Parameter:
                    return false;
            }

            if (expression is UnaryExpression)
            {
                UnaryExpression unaryExpression = (UnaryExpression)expression;
                return HasNoParameterAccess(unaryExpression.Operand);
            }
            else if (expression is BinaryExpression)
            {
                BinaryExpression binaryExpression = (BinaryExpression)expression;
                return HasNoParameterAccess(binaryExpression.Left) && HasNoParameterAccess(binaryExpression.Right);
            }
            else if (expression is ConditionalExpression)
            {
                ConditionalExpression conditionalExpression = (ConditionalExpression)expression;
                return HasNoParameterAccess(conditionalExpression.Test)
                       && HasNoParameterAccess(conditionalExpression.IfFalse)
                       && HasNoParameterAccess(conditionalExpression.IfTrue);
            }
            else if (expression is MethodCallExpression)
            {
                MethodCallExpression callExpression = (MethodCallExpression)expression;
                return callExpression.Arguments.All(HasNoParameterAccess) && HasNoParameterAccess(callExpression.Object);
            }
            else if (expression is InvocationExpression)
            {
                InvocationExpression invocationExpression = (InvocationExpression)expression;
                return invocationExpression.Arguments.All(HasNoParameterAccess) &&
                       HasNoParameterAccess(invocationExpression.Expression);
            }
            else if (expression is MemberExpression)
            {
                MemberExpression memberExpression = (MemberExpression)expression;
                return HasNoParameterAccess(memberExpression.Expression);
            }
            else if (expression is NewArrayExpression)
            {
                NewArrayExpression newArrayExpression = (NewArrayExpression)expression;
                return newArrayExpression.Expressions.All(HasNoParameterAccess);
            }

            return false;
        }