diff options
author | Jesse Plamondon-Willard <Pathoschild@users.noreply.github.com> | 2022-05-31 21:23:44 -0400 |
---|---|---|
committer | Jesse Plamondon-Willard <Pathoschild@users.noreply.github.com> | 2022-05-31 21:23:44 -0400 |
commit | bf960ce283d794a11885a5fde6f123a4e6827853 (patch) | |
tree | 00986f30b162bc511f3e010c54a0057dffdddc81 /src/SMAPI/Framework/ModLoading/Finders | |
parent | 9992915f565578949cad8d9bb8ceb360e0db5c85 (diff) | |
download | SMAPI-bf960ce283d794a11885a5fde6f123a4e6827853.tar.gz SMAPI-bf960ce283d794a11885a5fde6f123a4e6827853.tar.bz2 SMAPI-bf960ce283d794a11885a5fde6f123a4e6827853.zip |
add backwards compatibility for mods using now-unused dependencies
Diffstat (limited to 'src/SMAPI/Framework/ModLoading/Finders')
-rw-r--r-- | src/SMAPI/Framework/ModLoading/Finders/LegacyAssemblyFinder.cs | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/SMAPI/Framework/ModLoading/Finders/LegacyAssemblyFinder.cs b/src/SMAPI/Framework/ModLoading/Finders/LegacyAssemblyFinder.cs new file mode 100644 index 00000000..d3437b05 --- /dev/null +++ b/src/SMAPI/Framework/ModLoading/Finders/LegacyAssemblyFinder.cs @@ -0,0 +1,49 @@ +using Mono.Cecil; +using StardewModdingAPI.Framework.ModLoading.Framework; + +namespace StardewModdingAPI.Framework.ModLoading.Finders +{ + /// <summary>Detects assembly references which will break in SMAPI 4.0.0.</summary> + internal class LegacyAssemblyFinder : BaseInstructionHandler + { + /********* + ** Public methods + *********/ + /// <summary>Construct an instance.</summary> + public LegacyAssemblyFinder() + : base(defaultPhrase: "legacy assembly references") { } + + + /// <inheritdoc /> + public override bool Handle(ModuleDefinition module) + { + foreach (AssemblyNameReference assembly in module.AssemblyReferences) + { + InstructionHandleResult flag = this.GetFlag(assembly); + if (flag is InstructionHandleResult.None) + continue; + + this.MarkFlag(flag); + } + + return false; + } + + + /********* + ** Private methods + *********/ + /// <summary>Get the instruction handle flag for the given assembly reference, if any.</summary> + /// <param name="assemblyRef">The assembly reference.</param> + private InstructionHandleResult GetFlag(AssemblyNameReference assemblyRef) + { + return assemblyRef.Name switch + { + "System.Configuration.ConfigurationManager" => InstructionHandleResult.DetectedLegacyConfigurationDll, + "System.Runtime.Caching" => InstructionHandleResult.DetectedLegacyCachingDll, + "System.Security.Permission" => InstructionHandleResult.DetectedLegacyPermissionsDll, + _ => InstructionHandleResult.None + }; + } + } +} |