summaryrefslogtreecommitdiff
path: root/src/SMAPI/Framework/ModLoading/Symbols/SymbolReaderProvider.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/SMAPI/Framework/ModLoading/Symbols/SymbolReaderProvider.cs')
-rw-r--r--src/SMAPI/Framework/ModLoading/Symbols/SymbolReaderProvider.cs35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/SMAPI/Framework/ModLoading/Symbols/SymbolReaderProvider.cs b/src/SMAPI/Framework/ModLoading/Symbols/SymbolReaderProvider.cs
new file mode 100644
index 00000000..e2a6d21e
--- /dev/null
+++ b/src/SMAPI/Framework/ModLoading/Symbols/SymbolReaderProvider.cs
@@ -0,0 +1,35 @@
+using System.Collections.Generic;
+using System.IO;
+using Mono.Cecil;
+using Mono.Cecil.Cil;
+
+namespace StardewModdingAPI.Framework.ModLoading.Symbols
+{
+ internal class SymbolReaderProvider : ISymbolReaderProvider
+ {
+ private readonly ISymbolReaderProvider BaseProvider = new DefaultSymbolReaderProvider();
+
+ private readonly Dictionary<string, Stream> SymbolMapping = new Dictionary<string, Stream>();
+
+ public void AddSymbolMapping( string dllName, Stream symbolStream )
+ {
+ this.SymbolMapping.Add( dllName, symbolStream );
+ }
+
+ public ISymbolReader GetSymbolReader( ModuleDefinition module, string fileName )
+ {
+ if ( this.SymbolMapping.ContainsKey( module.Name ) )
+ return new SymbolReader( module, this.SymbolMapping[ module.Name ] );
+
+ return this.BaseProvider.GetSymbolReader( module, fileName );
+ }
+
+ public ISymbolReader GetSymbolReader( ModuleDefinition module, Stream symbolStream )
+ {
+ if ( this.SymbolMapping.ContainsKey( module.Name ) )
+ return new SymbolReader( module, this.SymbolMapping[ module.Name ] );
+
+ return this.BaseProvider.GetSymbolReader( module, symbolStream );
+ }
+ }
+}