/// <summary> /// Same as <see cref="TryCallCreateLoadInstance(string, object)"/> except it won't /// take care of IronPython objects /// </summary> /// <param name="type"></param> /// <param name="parent"></param> /// <returns></returns> public static object TryCallCreateLoadInstance(Type type, object parent) { MethodInfo method = TimelineSaver.SearchMethodWithAttr <CreateLoadInstanceAttribute>(type, BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); return(method?.Invoke(null, new object[] { parent, type })); }
/// <summary> /// call the method marked with on done loading on the given object /// we use ref that way is objInstance is a struct it's still good /// </summary> /// <param name="objInstance"></param> public static void CallOnDoneLoading(ref object objInstance) { if (provider?.IsCustomCreated(objInstance) == true) { provider.CallOnDoneLoading(objInstance); } else { MethodInfo method = TimelineSaver.SearchMethodWithAttr <OnDoneLoadingAttribute>(objInstance.GetType(), BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); if (method != null) { method.Invoke(objInstance, null); } } }
private static void CallOnAllLoaded(ref object objInstance, JObject jobj) { if (provider?.IsCustomCreated(objInstance) == true) { provider.CallOnAllLoaded(objInstance, jobj); } else { MethodInfo method = TimelineSaver.SearchMethodWithAttr <OnAllLoadedAttribute>(objInstance.GetType(), BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); if (method != null) { method.Invoke(objInstance, new object[] { jobj }); } } }
/// <summary> /// call the method marked with CustomLoader on the object, if there is one /// otherwise return false /// </summary> /// <param name="objInstance"></param> /// <param name="jobj"></param> /// <returns></returns> private static bool TryCallCustomLoader(ref object objInstance, JObject jobj) { if (provider?.IsCustomCreated(objInstance) == true) { bool hasLoader = provider.HasCustomLoader(objInstance); if (hasLoader) { provider.CallCustomLoader(objInstance, jobj); } return(hasLoader); } else { MethodInfo method = TimelineSaver.SearchMethodWithAttr <CustomLoaderAttribute>(objInstance.GetType(), BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method != null) { method.Invoke(objInstance, new object[] { jobj }); } return(method != null); } }