summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/SMAPI.Mods.ErrorHandler/ModEntry.cs1
-rw-r--r--src/SMAPI.Mods.ErrorHandler/Patches/DictionaryPatcher.cs98
2 files changed, 0 insertions, 99 deletions
diff --git a/src/SMAPI.Mods.ErrorHandler/ModEntry.cs b/src/SMAPI.Mods.ErrorHandler/ModEntry.cs
index 067f6a8d..7286e316 100644
--- a/src/SMAPI.Mods.ErrorHandler/ModEntry.cs
+++ b/src/SMAPI.Mods.ErrorHandler/ModEntry.cs
@@ -30,7 +30,6 @@ namespace StardewModdingAPI.Mods.ErrorHandler
// apply patches
HarmonyPatcher.Apply(this.ModManifest.UniqueID, this.Monitor,
new DialoguePatcher(monitorForGame, this.Helper.Reflection),
- new DictionaryPatcher(this.Helper.Reflection),
new EventPatcher(monitorForGame),
new GameLocationPatcher(monitorForGame),
new IClickableMenuPatcher(),
diff --git a/src/SMAPI.Mods.ErrorHandler/Patches/DictionaryPatcher.cs b/src/SMAPI.Mods.ErrorHandler/Patches/DictionaryPatcher.cs
deleted file mode 100644
index 8ceafcc5..00000000
--- a/src/SMAPI.Mods.ErrorHandler/Patches/DictionaryPatcher.cs
+++ /dev/null
@@ -1,98 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics.CodeAnalysis;
-using HarmonyLib;
-using StardewModdingAPI.Internal.Patching;
-using StardewValley.GameData;
-using StardewValley.GameData.HomeRenovations;
-using StardewValley.GameData.Movies;
-
-namespace StardewModdingAPI.Mods.ErrorHandler.Patches
-{
- /// <summary>Harmony patches for <see cref="Dictionary{TKey,TValue}"/> which add the accessed key to <see cref="KeyNotFoundException"/> exceptions.</summary>
- /// <remarks>Patch methods must be static for Harmony to work correctly. See the Harmony documentation before renaming patch arguments.</remarks>
- [SuppressMessage("ReSharper", "InconsistentNaming", Justification = "Argument names are defined by Harmony and methods are named for clarity.")]
- [SuppressMessage("ReSharper", "IdentifierTypo", Justification = "Argument names are defined by Harmony and methods are named for clarity.")]
- internal class DictionaryPatcher : BasePatcher
- {
- /*********
- ** Fields
- *********/
- /// <summary>Simplifies access to private code.</summary>
- private static IReflectionHelper Reflection;
-
-
- /*********
- ** Public methods
- *********/
- /// <summary>Construct an instance.</summary>
- /// <param name="reflector">Simplifies access to private code.</param>
- public DictionaryPatcher(IReflectionHelper reflector)
- {
- DictionaryPatcher.Reflection = reflector;
- }
-
- /// <inheritdoc />
- public override void Apply(Harmony harmony, IMonitor monitor)
- {
- Type[] keyTypes = { typeof(int), typeof(string) };
- Type[] valueTypes = { typeof(int), typeof(string), typeof(HomeRenovation), typeof(MovieData), typeof(SpecialOrderData) };
-
- foreach (Type keyType in keyTypes)
- {
- foreach (Type valueType in valueTypes)
- {
- Type dictionaryType = typeof(Dictionary<,>).MakeGenericType(keyType, valueType);
-
- harmony.Patch(
- original: AccessTools.Method(dictionaryType, "get_Item") ?? throw new InvalidOperationException($"Can't find method {PatchHelper.GetMethodString(dictionaryType, "get_Item")} to patch."),
- finalizer: this.GetHarmonyMethod(nameof(DictionaryPatcher.Finalize_GetItem))
- );
-
- harmony.Patch(
- original: AccessTools.Method(dictionaryType, "Add") ?? throw new InvalidOperationException($"Can't find method {PatchHelper.GetMethodString(dictionaryType, "Add")} to patch."),
- finalizer: this.GetHarmonyMethod(nameof(DictionaryPatcher.Finalize_Add))
- );
- }
- }
- }
-
-
- /*********
- ** Private methods
- *********/
- /// <summary>The method to call after the dictionary indexer throws an exception.</summary>
- /// <param name="key">The dictionary key being fetched.</param>
- /// <param name="__exception">The exception thrown by the wrapped method, if any.</param>
- /// <returns>Returns the exception to throw, if any.</returns>
- private static Exception Finalize_GetItem(object key, Exception __exception)
- {
- if (__exception is KeyNotFoundException)
- DictionaryPatcher.AddKey(__exception, key);
-
- return __exception;
- }
-
- /// <summary>The method to call after a dictionary insert throws an exception.</summary>
- /// <param name="key">The dictionary key being inserted.</param>
- /// <param name="__exception">The exception thrown by the wrapped method, if any.</param>
- /// <returns>Returns the exception to throw, if any.</returns>
- private static Exception Finalize_Add(object key, Exception __exception)
- {
- if (__exception is ArgumentException)
- DictionaryPatcher.AddKey(__exception, key);
-
- return __exception;
- }
-
- /// <summary>Add the dictionary key to an exception message.</summary>
- /// <param name="exception">The exception whose message to edit.</param>
- /// <param name="key">The dictionary key.</param>
- private static void AddKey(Exception exception, object key)
- {
- DictionaryPatcher.Reflection
- .GetField<string>(exception, "_message")
- .SetValue($"{exception.Message}\nkey: '{key}'");
- }
- }
-}