IKVM11  11
Java SE 11 Virtual Machine for .NET
Loading...
Searching...
No Matches
AccessorCache.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Concurrent;
3using System.Reflection;
4
6{
7
8#if FIRST_PASS == false && EXPORTER == false && IMPORTER == false
9
14 {
15
22 public static AccessorCache Get(ref AccessorCache cache, Assembly assembly)
23 {
24 return AccessorUtil.LazyGet(ref cache, () => new AccessorCache(assembly));
25 }
26
27 readonly Assembly assembly;
28 readonly ConcurrentDictionary<Type, Accessor> cache = new ConcurrentDictionary<Type, Accessor>();
29
35 public AccessorCache(Assembly assembly)
36 {
37 this.assembly = assembly ?? throw new ArgumentNullException(nameof(assembly));
38 }
39
46 public TAccessor Get<TAccessor>(ref TAccessor accessor)
47 where TAccessor : Accessor
48 {
49 return AccessorUtil.LazyGet(ref accessor, () => (TAccessor)cache.GetOrAdd(typeof(TAccessor), Make));
50 }
51
57 Accessor Make(Type accessorType)
58 {
59 return (Accessor)Activator.CreateInstance(accessorType, (AccessorTypeResolver)(t => assembly.GetType(t)));
60 }
61
62 }
63
64#endif
65
66}
IKVM.Reflection.Type Type
IKVM.Reflection.Assembly Assembly
Provides runtime access to type accessors.
AccessorCache(Assembly assembly)
Initializes a new instance.
static AccessorCache Get(ref AccessorCache cache, Assembly assembly)
Gets the set of accessors for a given assembly.
TAccessor Get< TAccessor >(ref TAccessor accessor)
Gets the instance of the specified accessor if not already resolved.