using System;
|
using System.Linq.Expressions;
|
using System.Reflection;
|
using DynamicExpresso.Exceptions;
|
|
namespace DynamicExpresso.Visitors
|
{
|
public class DisableReflectionVisitor : ExpressionVisitor
|
{
|
protected override Expression VisitMethodCall(MethodCallExpression node)
|
{
|
if (node.Object != null
|
&& (typeof(Type).IsAssignableFrom(node.Object.Type)
|
|| typeof(MemberInfo).IsAssignableFrom(node.Object.Type)))
|
{
|
throw new ReflectionNotAllowedException();
|
}
|
|
return base.VisitMethodCall(node);
|
}
|
|
protected override Expression VisitMember(MemberExpression node)
|
{
|
if ((typeof(Type).IsAssignableFrom(node.Member.DeclaringType)
|
|| typeof(MemberInfo).IsAssignableFrom(node.Member.DeclaringType))
|
&& node.Member.Name != "Name")
|
{
|
throw new ReflectionNotAllowedException();
|
}
|
|
return base.VisitMember(node);
|
}
|
}
|
}
|