Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 17 additions & 2 deletions ArchUnit.sln
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AttributeAssembly", "TestAs
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisibilityAssembly", "TestAssemblies\VisibilityAssembly\VisibilityAssembly.csproj", "{FBCD91F2-4DB9-44AC-8214-6F2FFF9178D5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LoaderTestAssembly", "TestAssemblies\LoaderTestAssembly\LoaderTestAssembly.csproj", "{0243F2D4-AC89-4561-A936-D647B6BB821F}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DuplicateFullNameAssembly", "TestAssemblies\DuplicateFullNameAssembly\DuplicateFullNameAssembly.csproj", "{0243F2D4-AC89-4561-A936-D647B6BB821F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OtherLoaderTestAssembly", "TestAssemblies\OtherLoaderTestAssembly\OtherLoaderTestAssembly.csproj", "{5A24529B-1794-4080-ADCC-77440BA0A0B3}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OtherDuplicateFullNameAssembly", "TestAssemblies\OtherDuplicateFullNameAssembly\OtherDuplicateFullNameAssembly.csproj", "{5A24529B-1794-4080-ADCC-77440BA0A0B3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FilteredDirectoryLoaderTestAssembly", "TestAssemblies\FilteredDirectoryLoaderTestAssembly\FilteredDirectoryLoaderTestAssembly.csproj", "{E6CB8C69-25F5-4C94-8EA3-D56E444EB46B}"
EndProject
Expand All @@ -57,6 +57,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArchUnitNET.MSTestV4", "Arc
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TypeAssembly", "TestAssemblies\TypeAssembly\TypeAssembly.csproj", "{ABCA0EC3-E47E-453E-B4CC-3446ED4F7643}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MethodMemberAssembly", "TestAssemblies\MethodMemberAssembly\MethodMemberAssembly.csproj", "{05F40E4D-94EC-4DF7-B0FA-1BCBFDF56088}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -379,6 +381,18 @@ Global
{ABCA0EC3-E47E-453E-B4CC-3446ED4F7643}.Release|x64.Build.0 = Release|Any CPU
{ABCA0EC3-E47E-453E-B4CC-3446ED4F7643}.Release|x86.ActiveCfg = Release|Any CPU
{ABCA0EC3-E47E-453E-B4CC-3446ED4F7643}.Release|x86.Build.0 = Release|Any CPU
{05F40E4D-94EC-4DF7-B0FA-1BCBFDF56088}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{05F40E4D-94EC-4DF7-B0FA-1BCBFDF56088}.Debug|Any CPU.Build.0 = Debug|Any CPU
{05F40E4D-94EC-4DF7-B0FA-1BCBFDF56088}.Debug|x64.ActiveCfg = Debug|Any CPU
{05F40E4D-94EC-4DF7-B0FA-1BCBFDF56088}.Debug|x64.Build.0 = Debug|Any CPU
{05F40E4D-94EC-4DF7-B0FA-1BCBFDF56088}.Debug|x86.ActiveCfg = Debug|Any CPU
{05F40E4D-94EC-4DF7-B0FA-1BCBFDF56088}.Debug|x86.Build.0 = Debug|Any CPU
{05F40E4D-94EC-4DF7-B0FA-1BCBFDF56088}.Release|Any CPU.ActiveCfg = Release|Any CPU
{05F40E4D-94EC-4DF7-B0FA-1BCBFDF56088}.Release|Any CPU.Build.0 = Release|Any CPU
{05F40E4D-94EC-4DF7-B0FA-1BCBFDF56088}.Release|x64.ActiveCfg = Release|Any CPU
{05F40E4D-94EC-4DF7-B0FA-1BCBFDF56088}.Release|x64.Build.0 = Release|Any CPU
{05F40E4D-94EC-4DF7-B0FA-1BCBFDF56088}.Release|x86.ActiveCfg = Release|Any CPU
{05F40E4D-94EC-4DF7-B0FA-1BCBFDF56088}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -393,5 +407,6 @@ Global
{E6CB8C69-25F5-4C94-8EA3-D56E444EB46B} = {B1191F18-91CB-4387-B775-A5EB64D3AC30}
{AA695589-8CCC-4474-9A7F-01A6376C375A} = {B1191F18-91CB-4387-B775-A5EB64D3AC30}
{ABCA0EC3-E47E-453E-B4CC-3446ED4F7643} = {B1191F18-91CB-4387-B775-A5EB64D3AC30}
{05F40E4D-94EC-4DF7-B0FA-1BCBFDF56088} = {B1191F18-91CB-4387-B775-A5EB64D3AC30}
EndGlobalSection
EndGlobal
47 changes: 47 additions & 0 deletions ArchUnitNET/Domain/Extensions/TypeExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,53 @@ public static IEnumerable<InheritsBaseClassDependency> GetInheritsBaseClassDepen
: type.Dependencies.OfType<InheritsBaseClassDependency>();
}

public static bool HasAmbiguousFullName(this IType type, Architecture architecture)
{
return architecture.Types.Count(t => t.FullName == type.FullName) > 1;
}

public static string GetFullNameForErrorMessage(this IType type, Architecture architecture)
{
return type.HasAmbiguousFullName(architecture)
? type.FullName + ", " + type.Assembly.FullName
: type.FullName;
}

public static string GetFullNameForErrorMessage(
this ITypeInstance<IType> typeInstance,
Architecture architecture
)
{
var fullName = typeInstance.Type.GetFullNameForErrorMessage(architecture);
var genericArguments = typeInstance.GenericArguments.ToList();
return genericArguments.Count == 0
? fullName
: fullName
+ "<"
+ string.Join(
",",
genericArguments.Select(argument =>
argument.GetFullNameForErrorMessage(architecture)
)
)
+ ">";
}

public static string GetFullNameForDescription(this Type type)
{
var fullName = type.Namespace + "." + type.Name;
if (!type.IsConstructedGenericType)
{
return fullName;
}

var argumentsDescription = string.Join(
",",
type.GetGenericArguments().Select(GetFullNameForDescription)
);
return fullName + "<" + argumentsDescription + ">";
}

public static bool MatchesType(this ITypeInstance<IType> typeInstance, Type targetType)
{
var targetTypeFullNameWithoutAssembly = targetType.Namespace + "." + targetType.Name;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using ArchUnitNET.Domain;
using ArchUnitNET.Domain.Extensions;
using ArchUnitNET.Fluent.Conditions;

namespace ArchUnitNET.Fluent.Syntax.Elements.Members.MethodMembers
Expand All @@ -17,22 +18,25 @@ internal AddMethodMemberCondition(IArchRuleCreator<MethodMember> ruleCreator)

public TNextElement BeVirtual() => CreateNextElement(MethodMemberConditionsDefinition.BeVirtual());

public TNextElement BeCalledBy(IType firstType, params IType[] moreTypes) => CreateNextElement(MethodMemberConditionsDefinition.BeCalledBy(firstType, moreTypes));
public TNextElement BeCalledBy(Type type, params Type[] moreTypes) => CreateNextElement(MethodMemberConditionsDefinition.BeCalledBy(type, moreTypes));
public TNextElement BeCalledBy() => BeCalledBy(new ObjectProvider<IType>());
public TNextElement BeCalledBy(params IType[] types) => BeCalledBy(new ObjectProvider<IType>(types));
public TNextElement BeCalledBy(params Type[] types) => BeCalledBy(new SystemTypeObjectProvider<IType>(types));
public TNextElement BeCalledBy(IObjectProvider<IType> types) => CreateNextElement(MethodMemberConditionsDefinition.BeCalledBy(types));
public TNextElement BeCalledBy(IEnumerable<IType> types) => CreateNextElement(MethodMemberConditionsDefinition.BeCalledBy(types));
public TNextElement BeCalledBy(IEnumerable<Type> types) => CreateNextElement(MethodMemberConditionsDefinition.BeCalledBy(types));
public TNextElement BeCalledBy(IEnumerable<IType> types) => BeCalledBy(new ObjectProvider<IType>(types));
public TNextElement BeCalledBy(IEnumerable<Type> types) => BeCalledBy(new SystemTypeObjectProvider<IType>(types));

public TNextElement HaveDependencyInMethodBodyTo(IType firstType, params IType[] moreTypes) => CreateNextElement(MethodMemberConditionsDefinition.HaveDependencyInMethodBodyTo(firstType, moreTypes));
public TNextElement HaveDependencyInMethodBodyTo(Type type, params Type[] moreTypes) => CreateNextElement(MethodMemberConditionsDefinition.HaveDependencyInMethodBodyTo(type, moreTypes));
public TNextElement HaveDependencyInMethodBodyTo() => HaveDependencyInMethodBodyTo(new ObjectProvider<IType>());
public TNextElement HaveDependencyInMethodBodyTo(params IType[] types) => HaveDependencyInMethodBodyTo(new ObjectProvider<IType>(types));
public TNextElement HaveDependencyInMethodBodyTo(params Type[] types) => HaveDependencyInMethodBodyTo(new SystemTypeObjectProvider<IType>(types));
public TNextElement HaveDependencyInMethodBodyTo(IObjectProvider<IType> types) => CreateNextElement(MethodMemberConditionsDefinition.HaveDependencyInMethodBodyTo(types));
public TNextElement HaveDependencyInMethodBodyTo(IEnumerable<IType> types) => CreateNextElement(MethodMemberConditionsDefinition.HaveDependencyInMethodBodyTo(types));
public TNextElement HaveDependencyInMethodBodyTo(IEnumerable<Type> types) => CreateNextElement(MethodMemberConditionsDefinition.HaveDependencyInMethodBodyTo(types));
public TNextElement HaveDependencyInMethodBodyTo(IEnumerable<IType> types) => HaveDependencyInMethodBodyTo(new ObjectProvider<IType>(types));
public TNextElement HaveDependencyInMethodBodyTo(IEnumerable<Type> types) => HaveDependencyInMethodBodyTo(new SystemTypeObjectProvider<IType>(types));

public TNextElement HaveReturnType(IType firstType, params IType[] moreTypes) => CreateNextElement(MethodMemberConditionsDefinition.HaveReturnType(firstType, moreTypes));
public TNextElement HaveReturnType(IEnumerable<IType> types) => CreateNextElement(MethodMemberConditionsDefinition.HaveReturnType(types));
public TNextElement HaveReturnType() => HaveReturnType(new ObjectProvider<IType>());
public TNextElement HaveReturnType(params IType[] types) => HaveReturnType(new ObjectProvider<IType>(types));
public TNextElement HaveReturnType(params Type[] types) => HaveReturnType((IEnumerable<Type>)types);
public TNextElement HaveReturnType(IObjectProvider<IType> types) => CreateNextElement(MethodMemberConditionsDefinition.HaveReturnType(types));
public TNextElement HaveReturnType(Type type, params Type[] moreTypes) => CreateNextElement(MethodMemberConditionsDefinition.HaveReturnType(type, moreTypes));
public TNextElement HaveReturnType(IEnumerable<IType> types) => HaveReturnType(new ObjectProvider<IType>(types));
public TNextElement HaveReturnType(IEnumerable<Type> types) => CreateNextElement(MethodMemberConditionsDefinition.HaveReturnType(types));
Comment thread
alexanderlinne marked this conversation as resolved.

public ShouldRelateToMethodMembersThat<TNextElement, MethodMember> BeMethodMembersThat() => BeginComplexMethodMemberCondition(MethodMemberConditionsDefinition.BeMethodMembersThat());
Expand All @@ -43,22 +47,25 @@ internal AddMethodMemberCondition(IArchRuleCreator<MethodMember> ruleCreator)

public TNextElement NotBeVirtual() => CreateNextElement(MethodMemberConditionsDefinition.NotBeVirtual());

public TNextElement NotBeCalledBy(IType firstType, params IType[] moreTypes) => CreateNextElement(MethodMemberConditionsDefinition.NotBeCalledBy(firstType, moreTypes));
public TNextElement NotBeCalledBy(Type type, params Type[] moreTypes) => CreateNextElement(MethodMemberConditionsDefinition.NotBeCalledBy(type, moreTypes));
public TNextElement NotBeCalledBy() => NotBeCalledBy(new ObjectProvider<IType>());
public TNextElement NotBeCalledBy(params IType[] types) => NotBeCalledBy(new ObjectProvider<IType>(types));
public TNextElement NotBeCalledBy(params Type[] types) => NotBeCalledBy(new SystemTypeObjectProvider<IType>(types));
public TNextElement NotBeCalledBy(IObjectProvider<IType> types) => CreateNextElement(MethodMemberConditionsDefinition.NotBeCalledBy(types));
public TNextElement NotBeCalledBy(IEnumerable<IType> types) => CreateNextElement(MethodMemberConditionsDefinition.NotBeCalledBy(types));
public TNextElement NotBeCalledBy(IEnumerable<Type> types) => CreateNextElement(MethodMemberConditionsDefinition.NotBeCalledBy(types));
public TNextElement NotBeCalledBy(IEnumerable<IType> types) => NotBeCalledBy(new ObjectProvider<IType>(types));
public TNextElement NotBeCalledBy(IEnumerable<Type> types) => NotBeCalledBy(new SystemTypeObjectProvider<IType>(types));

public TNextElement NotHaveDependencyInMethodBodyTo(IType firstType, params IType[] moreTypes) => CreateNextElement(MethodMemberConditionsDefinition.NotHaveDependencyInMethodBodyTo(firstType, moreTypes));
public TNextElement NotHaveDependencyInMethodBodyTo(Type type, params Type[] moreTypes) => CreateNextElement(MethodMemberConditionsDefinition.NotHaveDependencyInMethodBodyTo(type, moreTypes));
public TNextElement NotHaveDependencyInMethodBodyTo() => NotHaveDependencyInMethodBodyTo(new ObjectProvider<IType>());
public TNextElement NotHaveDependencyInMethodBodyTo(params IType[] types) => NotHaveDependencyInMethodBodyTo(new ObjectProvider<IType>(types));
public TNextElement NotHaveDependencyInMethodBodyTo(params Type[] types) => NotHaveDependencyInMethodBodyTo(new SystemTypeObjectProvider<IType>(types));
public TNextElement NotHaveDependencyInMethodBodyTo(IObjectProvider<IType> types) => CreateNextElement(MethodMemberConditionsDefinition.NotHaveDependencyInMethodBodyTo(types));
public TNextElement NotHaveDependencyInMethodBodyTo(IEnumerable<IType> types) => CreateNextElement(MethodMemberConditionsDefinition.NotHaveDependencyInMethodBodyTo(types));
public TNextElement NotHaveDependencyInMethodBodyTo(IEnumerable<Type> types) => CreateNextElement(MethodMemberConditionsDefinition.NotHaveDependencyInMethodBodyTo(types));
public TNextElement NotHaveDependencyInMethodBodyTo(IEnumerable<IType> types) => NotHaveDependencyInMethodBodyTo(new ObjectProvider<IType>(types));
public TNextElement NotHaveDependencyInMethodBodyTo(IEnumerable<Type> types) => NotHaveDependencyInMethodBodyTo(new SystemTypeObjectProvider<IType>(types));

public TNextElement NotHaveReturnType(IType firstType, params IType[] moreTypes) => CreateNextElement(MethodMemberConditionsDefinition.NotHaveReturnType(firstType, moreTypes));
public TNextElement NotHaveReturnType(IEnumerable<IType> types) => CreateNextElement(MethodMemberConditionsDefinition.NotHaveReturnType(types));
public TNextElement NotHaveReturnType() => NotHaveReturnType(new ObjectProvider<IType>());
public TNextElement NotHaveReturnType(params IType[] types) => NotHaveReturnType(new ObjectProvider<IType>(types));
public TNextElement NotHaveReturnType(params Type[] types) => NotHaveReturnType((IEnumerable<Type>)types);
public TNextElement NotHaveReturnType(IObjectProvider<IType> types) => CreateNextElement(MethodMemberConditionsDefinition.NotHaveReturnType(types));
public TNextElement NotHaveReturnType(Type type, params Type[] moreTypes) => CreateNextElement(MethodMemberConditionsDefinition.NotHaveReturnType(type, moreTypes));
public TNextElement NotHaveReturnType(IEnumerable<IType> types) => NotHaveReturnType(new ObjectProvider<IType>(types));
public TNextElement NotHaveReturnType(IEnumerable<Type> types) => CreateNextElement(MethodMemberConditionsDefinition.NotHaveReturnType(types));
// csharpier-ignore-end
}
Expand Down
Loading
Loading