namespace Caliburn.Micro.Core {
    using System.Linq.Expressions;
    using System.Reflection;
    /// 
    /// Extension for .
    /// 
    public static class ExpressionExtensions {
        /// 
        /// Converts an expression into a .
        /// 
        /// The expression to convert.
        /// The member info.
        public static MemberInfo GetMemberInfo(this Expression expression) {
            var lambda = (LambdaExpression) expression;
            MemberExpression memberExpression;
            if (lambda.Body is UnaryExpression) {
                var unaryExpression = (UnaryExpression) lambda.Body;
                memberExpression = (MemberExpression) unaryExpression.Operand;
            }
            else {
                memberExpression = (MemberExpression) lambda.Body;
            }
            return memberExpression.Member;
        }
    }
}