/// <summary> /// Calls the original method that was Overrideed /// </summary> /// <param name="method">The original method</param> /// <param name="instance">The instance for the method(null if static)</param> /// <param name="args">The arguments for the method</param> /// <returns>The value that the original function returns</returns> public static object CallOriginalFunc(MethodInfo method, object instance = null, params object[] args) { // Do the checks if (OverrideManager.Overrides.All(o => o.Value.Original != method)) { throw new Exception("The Override specified was not found!"); } // Set the variables OverrideWrapper wrapper = OverrideManager.Overrides.First(a => a.Value.Original == method).Value; return(wrapper.CallOriginal(args, instance)); }
/// <summary> /// Calls the original method that was Overrideed /// </summary> /// <param name="instance">The instance for the method(null if static)</param> /// <param name="args">The arguments for the method</param> /// <returns>The value tahat the original function returns</returns> public static object CallOriginal(object instance = null, params object[] args) { System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(false); if (trace.FrameCount < 1) { throw new Exception("Invalid trace back to the original method! Please provide the methodinfo instead!"); } MethodBase modded = trace.GetFrame(1).GetMethod(); MethodInfo original = null; if (!Attribute.IsDefined(modded, typeof(OverrideAttribute))) { modded = trace.GetFrame(2).GetMethod(); } OverrideAttribute att = (OverrideAttribute)Attribute.GetCustomAttribute(modded, typeof(OverrideAttribute)); if (att == null) { throw new Exception("This method can only be called from an overwritten method!"); } if (!att.MethodFound) { throw new Exception("The original method was never found!"); } original = att.Method; if (OverrideManager.Overrides.All(o => o.Value.Original != original)) { throw new Exception("The Override specified was not found!"); } OverrideWrapper wrapper = OverrideManager.Overrides.First(a => a.Value.Original == original).Value; return(wrapper.CallOriginal(args, instance)); }