CLre/CLre_server/API/Tools/AccessToolsWarnings.cs

71 lines
No EOL
2.3 KiB
C#

using System;
using System.Diagnostics;
using System.Reflection;
using HarmonyLib;
#if DEBUG
namespace CLre_server.API.Tools
{
public static class AccessToolsWarnings
{
internal static bool isEnabled = false;
public static void Enable()
{
isEnabled = true;
}
public static void Disable()
{
isEnabled = false;
}
}
[HarmonyPatch(typeof(AccessTools), "TypeByName")]
class AccessTools_TypeByName_Patch
{
[HarmonyPostfix]
public static void AfterMethodCall(Type __result, string name)
{
if (!AccessToolsWarnings.isEnabled) return;
if (__result == null)
{
var method = (new StackTrace()).GetFrame(2).GetMethod();
Utility.Logging.LogWarning($"[{method.DeclaringType.FullName}.{method.Name}] AccessTools.TypeByName(\"{name}\") returned null result");
}
}
}
[HarmonyPatch(typeof(AccessTools), "Method",
new Type[] {typeof(string), typeof(Type[]), typeof(Type[])})]
class AccessTools_Method_Patch
{
[HarmonyPostfix]
public static void AfterMethodCall(MethodInfo __result, string typeColonMethodname)
{
if (!AccessToolsWarnings.isEnabled) return;
if (__result == null)
{
var method = (new StackTrace()).GetFrame(2).GetMethod();
Utility.Logging.LogWarning($"[{method.DeclaringType.FullName}.{method.Name}] AccessTools.Method(\"{typeColonMethodname}\") returned null result");
}
}
}
[HarmonyPatch(typeof(AccessTools), "Method",
new Type[] {typeof(Type), typeof(string), typeof(Type[]), typeof(Type[])})]
class AccessTools_Method2_Patch
{
[HarmonyPostfix]
public static void AfterMethodCall(MethodInfo __result, Type type, string name)
{
if (!AccessToolsWarnings.isEnabled) return;
if (__result == null)
{
var method = (new StackTrace()).GetFrame(2).GetMethod();
Utility.Logging.LogWarning($"[{method.DeclaringType.FullName}.{method.Name}] AccessTools.Method(\"{type}\", \"{name}\") returned null result");
}
}
}
}
#endif