45 lines
2.3 KiB
C#
45 lines
2.3 KiB
C#
using System;
|
|
using System.Linq.Expressions;
|
|
using System.Reflection;
|
|
|
|
namespace Google.Protobuf.Reflection
|
|
{
|
|
// Token: 0x02000069 RID: 105
|
|
internal static class ReflectionUtil
|
|
{
|
|
// Token: 0x060005F0 RID: 1520 RVA: 0x00014D2C File Offset: 0x00012F2C
|
|
internal static Func<IMessage, object> CreateFuncIMessageObject(MethodInfo method)
|
|
{
|
|
ParameterExpression parameterExpression;
|
|
return Expression.Lambda<Func<IMessage, object>>(Expression.Convert(Expression.Call(Expression.Convert(parameterExpression, method.DeclaringType), method), typeof(object)), new ParameterExpression[] { parameterExpression }).Compile();
|
|
}
|
|
|
|
// Token: 0x060005F1 RID: 1521 RVA: 0x00014D84 File Offset: 0x00012F84
|
|
internal static Func<IMessage, T> CreateFuncIMessageT<T>(MethodInfo method)
|
|
{
|
|
ParameterExpression parameterExpression;
|
|
return Expression.Lambda<Func<IMessage, T>>(Expression.Convert(Expression.Call(Expression.Convert(parameterExpression, method.DeclaringType), method), typeof(T)), new ParameterExpression[] { parameterExpression }).Compile();
|
|
}
|
|
|
|
// Token: 0x060005F2 RID: 1522 RVA: 0x00014DDC File Offset: 0x00012FDC
|
|
internal static Action<IMessage, object> CreateActionIMessageObject(MethodInfo method)
|
|
{
|
|
ParameterExpression parameterExpression = Expression.Parameter(typeof(IMessage), "target");
|
|
ParameterExpression parameterExpression2 = Expression.Parameter(typeof(object), "arg");
|
|
Expression expression = Expression.Convert(parameterExpression, method.DeclaringType);
|
|
Expression expression2 = Expression.Convert(parameterExpression2, method.GetParameters()[0].ParameterType);
|
|
return Expression.Lambda<Action<IMessage, object>>(Expression.Call(expression, method, new Expression[] { expression2 }), new ParameterExpression[] { parameterExpression, parameterExpression2 }).Compile();
|
|
}
|
|
|
|
// Token: 0x060005F3 RID: 1523 RVA: 0x00014E5C File Offset: 0x0001305C
|
|
internal static Action<IMessage> CreateActionIMessage(MethodInfo method)
|
|
{
|
|
ParameterExpression parameterExpression;
|
|
return Expression.Lambda<Action<IMessage>>(Expression.Call(Expression.Convert(parameterExpression, method.DeclaringType), method), new ParameterExpression[] { parameterExpression }).Compile();
|
|
}
|
|
|
|
// Token: 0x0400025F RID: 607
|
|
internal static readonly Type[] EmptyTypes = new Type[0];
|
|
}
|
|
}
|