@@ -15,9 +15,13 @@ namespace ArchUnitNET.Loader
1515{
1616 internal class DomainResolver
1717 {
18- private readonly AssemblyRegistry _assemblyRegistry ;
1918 private readonly LoadTaskRegistry _loadTaskRegistry ;
20- private readonly NamespaceRegistry _namespaceRegistry ;
19+
20+ private readonly Dictionary < string , Assembly > _assemblies =
21+ new Dictionary < string , Assembly > ( ) ;
22+
23+ private readonly Dictionary < string , Namespace > _namespaces =
24+ new Dictionary < string , Namespace > ( ) ;
2125
2226 private readonly Dictionary < string , ITypeInstance < IType > > _allTypes =
2327 new Dictionary < string , ITypeInstance < IType > > ( ) ;
@@ -26,14 +30,55 @@ internal class DomainResolver
2630 new Dictionary < string , MethodMemberInstance > ( ) ;
2731
2832 public DomainResolver (
29- LoadTaskRegistry loadTaskRegistry ,
30- AssemblyRegistry assemblyRegistry ,
31- NamespaceRegistry namespaceRegistry
33+ LoadTaskRegistry loadTaskRegistry
3234 )
3335 {
3436 _loadTaskRegistry = loadTaskRegistry ;
35- _assemblyRegistry = assemblyRegistry ;
36- _namespaceRegistry = namespaceRegistry ;
37+ }
38+
39+ public IEnumerable < Assembly > Assemblies => _assemblies . Values ;
40+
41+ public IEnumerable < Namespace > Namespaces => _namespaces . Values ;
42+
43+ public IEnumerable < ITypeInstance < IType > > Types => _allTypes . Values ;
44+
45+ internal Assembly GetOrCreateAssembly (
46+ string assemblyName ,
47+ string assemblyFullName ,
48+ bool isOnlyReferenced ,
49+ List < string > assemblyReferences
50+ )
51+ {
52+ if ( _assemblies . TryGetValue ( assemblyFullName , out var existing ) )
53+ {
54+ return existing ;
55+ }
56+
57+ var assembly = new Assembly (
58+ assemblyName ,
59+ assemblyFullName ,
60+ isOnlyReferenced ,
61+ assemblyReferences
62+ ) ;
63+ _assemblies . Add ( assemblyFullName , assembly ) ;
64+ return assembly ;
65+ }
66+
67+ internal bool ContainsAssembly ( string assemblyFullName )
68+ {
69+ return _assemblies . ContainsKey ( assemblyFullName ) ;
70+ }
71+
72+ internal Namespace GetOrCreateNamespace ( string namespaceName )
73+ {
74+ if ( _namespaces . TryGetValue ( namespaceName , out var existing ) )
75+ {
76+ return existing ;
77+ }
78+
79+ var ns = new Namespace ( namespaceName , new List < IType > ( ) ) ;
80+ _namespaces . Add ( namespaceName , ns ) ;
81+ return ns ;
3782 }
3883
3984 public IEnumerable < IType > GetAllNonCompilerGeneratedTypes ( )
@@ -263,10 +308,10 @@ bool isStub
263308 {
264309 declaringTypeReference = declaringTypeReference . DeclaringType ;
265310 }
266- var currentNamespace = _namespaceRegistry . GetOrCreateNamespace (
311+ var currentNamespace = GetOrCreateNamespace (
267312 declaringTypeReference . Namespace
268313 ) ;
269- var currentAssembly = _assemblyRegistry . GetOrCreateAssembly (
314+ var currentAssembly = GetOrCreateAssembly (
270315 assemblyFullName ,
271316 assemblyFullName ,
272317 true ,
@@ -360,13 +405,13 @@ TypeReference typeReference
360405 new Type (
361406 typeReference . BuildFullName ( ) ,
362407 typeReference . Name ,
363- _assemblyRegistry . GetOrCreateAssembly (
408+ GetOrCreateAssembly (
364409 typeReference . Scope . Name ,
365410 typeReference . Scope . ToString ( ) ,
366411 true ,
367412 null
368413 ) ,
369- _namespaceRegistry . GetOrCreateNamespace ( typeReference . Namespace ) ,
414+ GetOrCreateNamespace ( typeReference . Namespace ) ,
370415 NotAccessible ,
371416 typeReference . IsNested ,
372417 typeReference . HasGenericParameters ,
@@ -459,15 +504,17 @@ [NotNull] MethodReference methodReference
459504 var methodReferenceFullName = methodReference . BuildFullName ( ) ;
460505 if ( methodReference . IsGenericInstance )
461506 {
462- return RegistryUtils . GetFromDictOrCreateAndAdd (
463- methodReferenceFullName ,
464- _allMethods ,
465- _ =>
466- CreateGenericInstanceMethodMemberFromMethodReference (
467- typeInstance ,
468- methodReference
469- )
507+ if ( _allMethods . TryGetValue ( methodReferenceFullName , out var existingGenericInstance ) )
508+ {
509+ return existingGenericInstance ;
510+ }
511+
512+ var genericInstance = CreateGenericInstanceMethodMemberFromMethodReference (
513+ typeInstance ,
514+ methodReference
470515 ) ;
516+ _allMethods . Add ( methodReferenceFullName , genericInstance ) ;
517+ return genericInstance ;
471518 }
472519
473520 if ( _allMethods . TryGetValue ( methodReferenceFullName , out var existingMethodInstance ) )
0 commit comments