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