UI 자동화를 위해 바인딩 기능 구현
- 유니티 에셋 인증 오류로 meta 재생성
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
#if UNITY_EDITOR
|
||||
using System;
|
||||
using System.Linq.Expressions;
|
||||
using System.Reflection;
|
||||
|
||||
namespace UnityEngine.InputSystem.Editor
|
||||
{
|
||||
internal static class ExpressionUtils
|
||||
{
|
||||
public static PropertyInfo GetProperty<TEntity, TProperty>(Expression<Func<TEntity, TProperty>> expression)
|
||||
{
|
||||
var member = GetMemberExpression(expression).Member;
|
||||
var property = member as PropertyInfo;
|
||||
if (property == null)
|
||||
throw new InvalidOperationException($"Member with Name '{member.Name}' is not a property.");
|
||||
|
||||
return property;
|
||||
}
|
||||
|
||||
private static MemberExpression GetMemberExpression<TEntity, TProperty>(Expression<Func<TEntity, TProperty>> expression)
|
||||
{
|
||||
MemberExpression memberExpression = null;
|
||||
switch (expression.Body.NodeType)
|
||||
{
|
||||
case ExpressionType.Convert:
|
||||
{
|
||||
var body = (UnaryExpression)expression.Body;
|
||||
memberExpression = body.Operand as MemberExpression;
|
||||
break;
|
||||
}
|
||||
case ExpressionType.MemberAccess:
|
||||
memberExpression = expression.Body as MemberExpression;
|
||||
break;
|
||||
}
|
||||
|
||||
if (memberExpression == null)
|
||||
throw new ArgumentException("Not a member access", nameof(expression));
|
||||
|
||||
return memberExpression;
|
||||
}
|
||||
|
||||
public static Func<TEntity, TProperty> CreateGetter<TEntity, TProperty>(Expression<Func<TEntity, TProperty>> property)
|
||||
{
|
||||
var propertyInfo = GetProperty(property);
|
||||
|
||||
var instance = Expression.Parameter(typeof(TEntity), "instance");
|
||||
|
||||
var body = Expression.Call(instance, propertyInfo.GetGetMethod());
|
||||
var parameters = new[] { instance };
|
||||
|
||||
return Expression.Lambda<Func<TEntity, TProperty>>(body, parameters).Compile();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user