IKVM11  11
Java SE 11 Virtual Machine for .NET
Loading...
Searching...
No Matches
IKVM.CoreLib.Modules.ComposableModuleFinder Class Reference

IModuleFinder implementation that combines multiple IModuleFinders in order. More...

Public Member Functions

 ComposableModuleFinder (ImmutableArray< IModuleFinder > finders)
 Initializes a new instance.
 
override? ModuleReference Find (string name)
 
override ImmutableHashSet< ModuleReference > FindAll ()
 

Detailed Description

IModuleFinder implementation that combines multiple IModuleFinders in order.

Definition at line 11 of file ComposableModuleFinder.cs.

Constructor & Destructor Documentation

◆ ComposableModuleFinder()

IKVM.CoreLib.Modules.ComposableModuleFinder.ComposableModuleFinder ( ImmutableArray< IModuleFinder > finders)

Initializes a new instance.

Parameters
finders

Definition at line 23 of file ComposableModuleFinder.cs.

24 {
25 _finders = finders;
26 }

Member Function Documentation

◆ Find()

override? ModuleReference IKVM.CoreLib.Modules.ComposableModuleFinder.Find ( string name)

Definition at line 29 of file ComposableModuleFinder.cs.

30 {
31 // already cached
32 if (_nameToModule.TryGetValue(name, out var mref))
33 return mref;
34
35 // scan finders
36 foreach (var finder in _finders)
37 if (finder.Find(name) is { } mref2)
38 return _nameToModule[name] = mref2;
39
40 return null;
41 }

◆ FindAll()

override ImmutableHashSet< ModuleReference > IKVM.CoreLib.Modules.ComposableModuleFinder.FindAll ( )

Definition at line 44 of file ComposableModuleFinder.cs.

45 {
46 if (_all == null)
47 {
48 // start with existing cache
49 var all = ImmutableHashSet.CreateBuilder<ModuleReference>();
50 foreach (var mref in _nameToModule.Values)
51 all.Add(mref);
52
53 // add any missing items
54 foreach (var finder in _finders)
55 foreach (var mref in finder.FindAll())
56 if (_nameToModule.TryAdd(mref.Descriptor.Name, mref))
57 all.Add(mref);
58
59 // set result
60 Interlocked.CompareExchange(ref _all, all.ToImmutable(), null);
61 }
62
63 return _all;
64 }
System.Threading.Interlocked Interlocked

The documentation for this class was generated from the following file: