using System; using System.Linq; using System.Reflection; namespace Unity.VisualScripting { public class ReflectionInvoker : IOptimizedInvoker { public ReflectionInvoker(MethodInfo methodInfo) { if (OptimizedReflection.safeMode) { Ensure.That(nameof(methodInfo)).IsNotNull(methodInfo); } this.methodInfo = methodInfo; } private readonly MethodInfo methodInfo; public void Compile() { } public object Invoke(object target, params object[] args) { return methodInfo.Invoke(target, args); } public object Invoke(object target) { return methodInfo.Invoke(target, EmptyObjects); } public object Invoke(object target, object arg0) { return methodInfo.Invoke(target, new[] { arg0 }); } public object Invoke(object target, object arg0, object arg1) { return methodInfo.Invoke(target, new[] { arg0, arg1 }); } public object Invoke(object target, object arg0, object arg1, object arg2) { return methodInfo.Invoke(target, new[] { arg0, arg1, arg2 }); } public object Invoke(object target, object arg0, object arg1, object arg2, object arg3) { return methodInfo.Invoke(target, new[] { arg0, arg1, arg2, arg3 }); } public object Invoke(object target, object arg0, object arg1, object arg2, object arg3, object arg4) { return methodInfo.Invoke(target, new[] { arg0, arg1, arg2, arg3, arg4 }); } public Type[] GetParameterTypes() { return methodInfo.GetParameters().Select(pi => pi.ParameterType).ToArray(); } private static readonly object[] EmptyObjects = new object[0]; } }