Skip to content

Commit 7fea6aa

Browse files
refactor: inline AssemblyRegistry, NamespaceRegistry, and RegistryUtils into DomainResolver
Signed-off-by: Alexander Linne <alexander.linne@tngtech.com>
1 parent 39c4ebf commit 7fea6aa

5 files changed

Lines changed: 71 additions & 114 deletions

File tree

ArchUnitNET/Loader/ArchBuilder.cs

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,38 +15,32 @@ internal class ArchBuilder
1515
private readonly ArchitectureCacheKey _architectureCacheKey;
1616
private readonly IDictionary<string, IType> _architectureTypes =
1717
new Dictionary<string, IType>();
18-
private readonly AssemblyRegistry _assemblyRegistry;
1918
private readonly LoadTaskRegistry _loadTaskRegistry;
20-
private readonly NamespaceRegistry _namespaceRegistry;
2119
private readonly DomainResolver _domainResolver;
2220

2321
public ArchBuilder()
2422
{
25-
_assemblyRegistry = new AssemblyRegistry();
26-
_namespaceRegistry = new NamespaceRegistry();
2723
_loadTaskRegistry = new LoadTaskRegistry();
2824
_domainResolver = new DomainResolver(
29-
_loadTaskRegistry,
30-
_assemblyRegistry,
31-
_namespaceRegistry
25+
_loadTaskRegistry
3226
);
3327
_architectureCacheKey = new ArchitectureCacheKey();
3428
_architectureCache = ArchitectureCache.Instance;
3529
}
3630

3731
public IEnumerable<IType> Types => _architectureTypes.Values;
38-
public IEnumerable<Assembly> Assemblies => _assemblyRegistry.Assemblies;
39-
public IEnumerable<Namespace> Namespaces => _namespaceRegistry.Namespaces;
32+
public IEnumerable<Assembly> Assemblies => _domainResolver.Assemblies;
33+
public IEnumerable<Namespace> Namespaces => _domainResolver.Namespaces;
4034

4135
public void AddAssembly([NotNull] AssemblyDefinition moduleAssembly, bool isOnlyReferenced)
4236
{
4337
var references = moduleAssembly
4438
.MainModule.AssemblyReferences.Select(reference => reference.Name)
4539
.ToList();
4640

47-
if (!_assemblyRegistry.ContainsAssembly(moduleAssembly.FullName))
41+
if (!_domainResolver.ContainsAssembly(moduleAssembly.FullName))
4842
{
49-
var assembly = _assemblyRegistry.GetOrCreateAssembly(
43+
var assembly = _domainResolver.GetOrCreateAssembly(
5044
moduleAssembly.Name.Name,
5145
moduleAssembly.FullName,
5246
isOnlyReferenced,

ArchUnitNET/Loader/AssemblyRegistry.cs

Lines changed: 0 additions & 37 deletions
This file was deleted.

ArchUnitNET/Loader/DomainResolver.cs

Lines changed: 66 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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))

ArchUnitNET/Loader/NamespaceRegistry.cs

Lines changed: 0 additions & 22 deletions
This file was deleted.

ArchUnitNET/Loader/RegistryUtils.cs

Lines changed: 0 additions & 25 deletions
This file was deleted.

0 commit comments

Comments
 (0)