1using System.Collections.Generic;
2using System.Collections.Immutable;
14 readonly ImmutableArray<IModuleFinder> _finders;
15 readonly Dictionary<string, ModuleReference> _nameToModule =
new();
17 ImmutableHashSet<ModuleReference>? _all;
29 public override ModuleReference?
Find(
string name)
32 if (_nameToModule.TryGetValue(name, out var mref))
36 foreach (var finder
in _finders)
37 if (finder.Find(name) is { } mref2)
38 return _nameToModule[name] = mref2;
44 public override ImmutableHashSet<ModuleReference>
FindAll()
49 var all = ImmutableHashSet.CreateBuilder<ModuleReference>();
50 foreach (var mref
in _nameToModule.Values)
54 foreach (var finder
in _finders)
55 foreach (var mref
in finder.FindAll())
56 if (_nameToModule.TryAdd(mref.Descriptor.Name, mref))
System.Threading.Interlocked Interlocked
IModuleFinder implementation that combines multiple IModuleFinders in order.
override ImmutableHashSet< ModuleReference > FindAll()
override? ModuleReference Find(string name)
ComposableModuleFinder(ImmutableArray< IModuleFinder > finders)
Initializes a new instance.