Skip to content

Commit 55574fb

Browse files
committed
fix(MonoCecilResolver): loosen resolve check from FullName to Name
1 parent f855987 commit 55574fb

1 file changed

Lines changed: 38 additions & 1 deletion

File tree

TypeTreeGeneratorAPI/TypeTreeGenerator/MonoCecilResolver.cs

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33

44
namespace TypeTreeGeneratorAPI.TypeTreeGenerator
55
{
6-
public class MonoCecilResolver : DefaultAssemblyResolver
6+
public class MonoCecilResolver : BaseAssemblyResolver
77
{
8+
readonly Dictionary<string, AssemblyDefinition> cache;
89
public ReaderParameters readerParameters;
910
public MonoCecilResolver()
1011
{
12+
cache = new();
1113
readerParameters = new ReaderParameters
1214
{
1315
InMemory = true,
@@ -20,5 +22,40 @@ public void Register(AssemblyDefinition assembly)
2022
{
2123
RegisterAssembly(assembly);
2224
}
25+
26+
// DefaultAssemblyResolver - fullname -> name
27+
public override AssemblyDefinition Resolve(AssemblyNameReference name)
28+
{
29+
AssemblyDefinition? assembly; // Use nullable type to handle potential null values
30+
if (cache.TryGetValue(name.Name, out assembly) && assembly != null) // Ensure assembly is not null
31+
return assembly;
32+
33+
assembly = base.Resolve(name);
34+
cache[name.FullName] = assembly;
35+
36+
return assembly;
37+
}
38+
39+
protected void RegisterAssembly(AssemblyDefinition assembly)
40+
{
41+
if (assembly == null)
42+
throw new ArgumentNullException(nameof(assembly)); // Use nameof for better readability
43+
44+
var name = assembly.Name.Name;
45+
if (cache.ContainsKey(name))
46+
return;
47+
48+
cache[name] = assembly;
49+
}
50+
51+
protected override void Dispose(bool disposing)
52+
{
53+
foreach (var assembly in cache.Values)
54+
assembly.Dispose();
55+
56+
cache.Clear();
57+
58+
base.Dispose(disposing);
59+
}
2360
}
2461
}

0 commit comments

Comments
 (0)