Skip to content

Commit 98f7f0e

Browse files
authored
Merge pull request #250 from TNG/perf/assembly-loading
perf(loader): improve assembly loading
2 parents df1a6bb + 84e8020 commit 98f7f0e

File tree

2 files changed

+12
-7
lines changed

2 files changed

+12
-7
lines changed

ArchUnitNET/Loader/ArchBuilder.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ internal class ArchBuilder
1919
{
2020
private readonly ArchitectureCache _architectureCache;
2121
private readonly ArchitectureCacheKey _architectureCacheKey;
22-
private readonly List<IType> _architectureTypes = new List<IType>();
22+
private readonly IDictionary<string, IType> _architectureTypes =
23+
new Dictionary<string, IType>();
2324
private readonly AssemblyRegistry _assemblyRegistry;
2425
private readonly LoadTaskRegistry _loadTaskRegistry;
2526
private readonly NamespaceRegistry _namespaceRegistry;
@@ -43,7 +44,7 @@ public ArchBuilder()
4344
_architectureCache = ArchitectureCache.Instance;
4445
}
4546

46-
public IEnumerable<IType> Types => _architectureTypes;
47+
public IEnumerable<IType> Types => _architectureTypes.Values;
4748
public IEnumerable<Assembly> Assemblies => _assemblyRegistry.Assemblies;
4849
public IEnumerable<Namespace> Namespaces => _namespaceRegistry.Namespaces;
4950

@@ -83,6 +84,7 @@ public void LoadTypesForModule(ModuleDefinition module, string namespaceFilter)
8384
t.FullName != "Microsoft.CodeAnalysis.EmbeddedAttribute"
8485
&& t.FullName != "System.Runtime.CompilerServices.NullableAttribute"
8586
&& t.FullName != "System.Runtime.CompilerServices.NullableContextAttribute"
87+
&& !t.FullName.StartsWith("Coverlet")
8688
)
8789
.ToList();
8890

@@ -109,10 +111,10 @@ public void LoadTypesForModule(ModuleDefinition module, string namespaceFilter)
109111
.ForEach(typeDefinition =>
110112
{
111113
var type = _typeFactory.GetOrCreateTypeFromTypeReference(typeDefinition);
112-
if (!_architectureTypes.Contains(type) && !type.IsCompilerGenerated)
114+
if (!_architectureTypes.ContainsKey(type.FullName) && !type.IsCompilerGenerated)
113115
{
114116
currentTypes.Add(type);
115-
_architectureTypes.Add(type);
117+
_architectureTypes.Add(type.FullName, type);
116118
}
117119
});
118120

ArchUnitNET/Loader/MonoCecilMemberExtensions.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -312,15 +312,18 @@ TypeFactory typeFactory
312312

313313
internal static bool IsCompilerGenerated(this MemberReference memberReference)
314314
{
315+
if (memberReference.Name.HasCompilerGeneratedName())
316+
{
317+
return true;
318+
}
315319
var declaringType =
316320
memberReference.Resolve()?.DeclaringType ?? memberReference.DeclaringType;
317-
return declaringType != null && declaringType.Name.HasCompilerGeneratedName()
318-
|| memberReference.Name.HasCompilerGeneratedName();
321+
return declaringType != null && declaringType.Name.HasCompilerGeneratedName();
319322
}
320323

321324
internal static bool HasCompilerGeneratedName(this string name)
322325
{
323-
return name.StartsWith("<") || name.StartsWith("!");
326+
return name[0] == '<' || name[0] == '!';
324327
}
325328

326329
internal static MethodForm GetMethodForm(this MethodDefinition methodDefinition)

0 commit comments

Comments
 (0)