using System; using System.Linq.Expressions; using System.Reflection; namespace Unity.VisualScripting { public abstract class StaticInvokerBase : InvokerBase { protected StaticInvokerBase(MethodInfo methodInfo) : base(methodInfo) { if (OptimizedReflection.safeMode) { if (!methodInfo.IsStatic) { throw new ArgumentException("The method isn't static.", nameof(methodInfo)); } } } protected sealed override void CompileExpression() { var parameterExpressions = GetParameterExpressions(); var callExpression = Expression.Call(methodInfo, parameterExpressions); CompileExpression(callExpression, parameterExpressions); } protected abstract void CompileExpression(MethodCallExpression callExpression, ParameterExpression[] parameterExpressions); protected override void VerifyTarget(object target) { OptimizedReflection.VerifyStaticTarget(targetType, target); } } }