Skip to content

Commit

Permalink
Merge pull request #204 from andredered/Assemblies_Show_References
Browse files Browse the repository at this point in the history
Assemblies show list of names for referenced Assemblies
  • Loading branch information
fgather authored Jan 24, 2023
2 parents 4a9708c + c145c9e commit b6f9473
Show file tree
Hide file tree
Showing 7 changed files with 17 additions and 11 deletions.
6 changes: 5 additions & 1 deletion ArchUnitNET/Domain/Assembly.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,25 @@

using System.Collections.Generic;
using System.Linq;
using JetBrains.Annotations;

namespace ArchUnitNET.Domain
{
public class Assembly : IHasName, IHasAttributes
{
public Assembly(string name, string fullName, bool isOnlyReferenced)
public Assembly(string name, string fullName, bool isOnlyReferenced , [CanBeNull] List<string> referencedAssemblyNames)
{
Name = name;
FullName = fullName;
IsOnlyReferenced = isOnlyReferenced;
ReferencedAssemblyNames = referencedAssemblyNames;
}

public bool IsOnlyReferenced { get; }

public string Name { get; }

[CanBeNull] public List<string> ReferencedAssemblyNames { get; }
public string FullName { get; }

public IEnumerable<Attribute> Attributes => AttributeInstances.Select(instance => instance.Type);
Expand Down
6 changes: 4 additions & 2 deletions ArchUnitNET/Loader/ArchBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,14 @@ public ArchBuilder()
public IEnumerable<Assembly> Assemblies => _assemblyRegistry.Assemblies;
public IEnumerable<Namespace> Namespaces => _namespaceRegistry.Namespaces;

public void AddAssembly([NotNull] AssemblyDefinition moduleAssembly, bool isOnlyReferenced)
public void AddAssembly([NotNull] AssemblyDefinition moduleAssembly, bool isOnlyReferenced, [CanBeNull] IEnumerable<AssemblyNameReference> moduleReferences)
{
var references = moduleReferences?.Select(reference => reference.Name).ToList();

if (!_assemblyRegistry.ContainsAssembly(moduleAssembly.Name.FullName))
{
var assembly = _assemblyRegistry.GetOrCreateAssembly(moduleAssembly.Name.FullName,
moduleAssembly.FullName, isOnlyReferenced);
moduleAssembly.FullName, isOnlyReferenced, references);
_loadTaskRegistry.Add(typeof(CollectAssemblyAttributes),
new CollectAssemblyAttributes(assembly, moduleAssembly, _typeFactory));
}
Expand Down
6 changes: 3 additions & 3 deletions ArchUnitNET/Loader/ArchLoader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ private void LoadModule(string fileName, string nameSpace, bool includeDependenc
var processedAssemblies = new List<AssemblyNameReference> { module.Assembly.Name };
var resolvedModules = new List<ModuleDefinition>();
_assemblyResolver.AddLib(module.Assembly);
_archBuilder.AddAssembly(module.Assembly, false);
_archBuilder.AddAssembly(module.Assembly, false, module.AssemblyReferences);
foreach (var assemblyReference in module.AssemblyReferences)
{
if (includeDependencies && recursive)
Expand All @@ -124,7 +124,7 @@ private void LoadModule(string fileName, string nameSpace, bool includeDependenc
{
var assemblyDefinition = _assemblyResolver.Resolve(assemblyReference) ??
throw new AssemblyResolutionException(assemblyReference);
_archBuilder.AddAssembly(assemblyDefinition, false);
_archBuilder.AddAssembly(assemblyDefinition, false, null);
resolvedModules.AddRange(assemblyDefinition.Modules);
}
}
Expand Down Expand Up @@ -166,7 +166,7 @@ private void AddReferencedAssembliesRecursively(AssemblyNameReference currentAss
var filterResult = filterFunc?.Invoke(assemblyDefinition);
if (filterResult?.LoadThisAssembly != false)
{
_archBuilder.AddAssembly(assemblyDefinition, false);
_archBuilder.AddAssembly(assemblyDefinition, false, null);
resolvedModules.AddRange(assemblyDefinition.Modules);
}

Expand Down
4 changes: 2 additions & 2 deletions ArchUnitNET/Loader/AssemblyRegistry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ internal class AssemblyRegistry

public IEnumerable<Assembly> Assemblies => _assemblies.Values;

public Assembly GetOrCreateAssembly(string assemblyName, string assemblyFullName, bool isOnlyReferenced)
public Assembly GetOrCreateAssembly(string assemblyName, string assemblyFullName, bool isOnlyReferenced, List<string> assemblyReferences)
{
return RegistryUtils.GetFromDictOrCreateAndAdd(assemblyName, _assemblies,
s => new Assembly(assemblyName, assemblyFullName, isOnlyReferenced));
s => new Assembly(assemblyName, assemblyFullName, isOnlyReferenced, assemblyReferences));
}

public bool ContainsAssembly(string assemblyName)
Expand Down
3 changes: 1 addition & 2 deletions ArchUnitNET/Loader/TypeFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,6 @@ private ITypeInstance<IType> CreateTypeFromTypeReference(TypeReference typeRefer
}
}


TypeDefinition typeDefinition;
try
{
Expand All @@ -162,7 +161,7 @@ private ITypeInstance<IType> CreateTypeFromTypeReference(TypeReference typeRefer

var currentNamespace = _namespaceRegistry.GetOrCreateNamespace(declaringTypeReference.Namespace);
var currentAssembly = _assemblyRegistry.GetOrCreateAssembly(typeReference.Module.Assembly.Name.FullName,
typeReference.Module.Assembly.FullName, true);
typeReference.Module.Assembly.FullName, true, null);

Type type;
bool isCompilerGenerated, isNested, isGeneric;
Expand Down
1 change: 1 addition & 0 deletions ArchUnitNETTests/Fluent/ArchRuleEqualityTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
// SPDX-License-Identifier: Apache-2.0

using ArchUnitNET.Fluent;
using ArchUnitNETTests.Fluent.Syntax;
using Xunit;
using static ArchUnitNET.Fluent.ArchRuleDefinition;

Expand Down
2 changes: 1 addition & 1 deletion ArchUnitNETTests/Fluent/Extensions/BuildMocksExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ public static Type CreateShallowStubType(this Class clazz)

private static Assembly CreateStubAssembly(this System.Reflection.Assembly assembly)
{
return new Assembly(assembly.FullName, assembly.FullName, false);
return new Assembly(assembly.FullName, assembly.FullName, false, null);
}

private static Namespace CreateStubNamespace(this string namespc)
Expand Down

0 comments on commit b6f9473

Please sign in to comment.