From 3c04b4917bcaf8989e5861f20d206139fe09c9e3 Mon Sep 17 00:00:00 2001 From: Alexander Linne Date: Fri, 9 Jan 2026 15:10:12 +0100 Subject: [PATCH 1/2] Refactor Fluent Syntax to have a single implementation of each method Signed-off-by: Alexander Linne --- ...ObjectsShould.cs => AddObjectCondition.cs} | 218 ++++---- ...enObjectsThat.cs => AddObjectPredicate.cs} | 166 +++--- ...ctConditions.cs => IAddObjectCondition.cs} | 10 +- ...ctPredicates.cs => IAddObjectPredicate.cs} | 2 +- .../Elements/IComplexObjectConditions.cs | 25 - .../Elements/Members/AddMemberCondition.cs | 48 ++ .../Elements/Members/AddMemberPredicate.cs | 41 ++ .../FieldMembers/AddFieldMemberCondition.cs | 12 + .../FieldMembers/AddFieldMemberPredicate.cs | 13 + .../FieldMembers/FieldMembersShould.cs | 13 +- .../FieldMembers/GivenFieldMembersThat.cs | 14 +- ...ditions.cs => IAddFieldMemberCondition.cs} | 4 +- ...dicates.cs => IAddFieldMemberPredicate.cs} | 4 +- .../IComplexFieldMemberConditions.cs | 8 - .../ShouldRelateToFieldMembersThat.cs | 16 +- .../Syntax/Elements/Members/GivenMembers.cs | 7 +- .../Members/GivenMembersConjunction.cs | 4 +- .../GivenMembersConjunctionWithDescription.cs | 6 +- .../Elements/Members/GivenMembersThat.cs | 122 +---- ...erConditions.cs => IAddMemberCondition.cs} | 9 +- ...erPredicates.cs => IAddMemberPredicate.cs} | 4 +- .../Members/IComplexMemberConditions.cs | 26 - .../Syntax/Elements/Members/MembersShould.cs | 152 +----- .../Members/MembersShouldConjunction.cs | 6 +- ...MembersShouldConjunctionWithDescription.cs | 5 +- .../MethodMembers/AddMethodMemberCondition.cs | 65 +++ .../MethodMembers/AddMethodMemberPredicate.cs | 64 +++ .../MethodMembers/GivenMethodMembersThat.cs | 282 +--------- ...itions.cs => IAddMethodMemberCondition.cs} | 4 +- ...icates.cs => IAddMethodMemberPredicate.cs} | 14 +- .../IComplexMethodMemberConditions.cs | 8 - .../MethodMembers/MethodMembersShould.cs | 290 +--------- .../ShouldRelateToMethodMembersThat.cs | 303 +---------- .../AddPropertyMemberCondition.cs | 54 ++ .../AddPropertyMemberPredicate.cs | 56 ++ .../GivenPropertyMembersThat.cs | 216 +------- ...ions.cs => IAddPropertyMemberCondition.cs} | 4 +- ...ates.cs => IAddPropertyMemberPredicate.cs} | 4 +- .../IComplexPropertyMemberConditions.cs | 8 - .../PropertyMembers/PropertyMembersShould.cs | 214 +------- .../ShouldRelateToPropertyMembersThat.cs | 255 +-------- .../Members/ShouldRelateToMembersThat.cs | 139 +---- .../Elements/ShouldRelateToObjectsThat.cs | 170 ------ .../Syntax/Elements/Types/AddTypeCondition.cs | 118 +++++ .../Syntax/Elements/Types/AddTypePredicate.cs | 102 ++++ .../Types/Attributes/AddAttributeCondition.cs | 26 + .../Types/Attributes/AddAttributePredicate.cs | 25 + .../Types/Attributes/AttributesShould.cs | 31 +- .../Types/Attributes/GivenAttributesThat.cs | 32 +- ...onditions.cs => IAddAttributeCondition.cs} | 4 +- ...redicates.cs => IAddAttributePredicate.cs} | 4 +- .../Attributes/IComplexAttributeConditions.cs | 8 - .../ShouldRelateToAttributesThat.cs | 33 +- .../Types/Classes/AddClassCondition.cs | 36 ++ .../Types/Classes/AddClassPredicate.cs | 29 + .../Elements/Types/Classes/ClassesShould.cs | 55 +- .../Types/Classes/GivenClassesThat.cs | 53 +- ...assConditions.cs => IAddClassCondition.cs} | 4 +- ...assPredicates.cs => IAddClassPredicate.cs} | 4 +- .../Types/Classes/IComplexClassConditions.cs | 8 - .../Classes/ShouldRelateToClassesThat.cs | 45 +- .../Syntax/Elements/Types/GivenTypes.cs | 7 +- .../Elements/Types/GivenTypesConjunction.cs | 4 +- .../GivenTypesConjunctionWithDescription.cs | 6 +- .../Syntax/Elements/Types/GivenTypesThat.cs | 417 +-------------- ...TypeConditions.cs => IAddTypeCondition.cs} | 15 +- ...TypePredicates.cs => IAddTypePredicate.cs} | 4 +- .../Elements/Types/IComplexTypeConditions.cs | 36 -- .../Types/Interfaces/AddInterfaceCondition.cs | 12 + .../Types/Interfaces/AddInterfacePredicate.cs | 13 + .../Types/Interfaces/GivenInterfacesThat.cs | 14 +- ...redicates.cs => IAddInterfaceCondition.cs} | 4 +- ...onditions.cs => IAddInterfacePredicate.cs} | 4 +- .../Interfaces/IComplexInterfaceConditions.cs | 8 - .../Types/Interfaces/InterfacesShould.cs | 13 +- .../ShouldRelateToInterfacesThat.cs | 13 +- .../Elements/Types/ShouldRelateToTypesThat.cs | 461 +--------------- .../Syntax/Elements/Types/TypesShould.cs | 499 +----------------- .../Elements/Types/TypesShouldConjunction.cs | 6 +- .../TypesShouldConjunctionWithDescription.cs | 2 +- 80 files changed, 1154 insertions(+), 4086 deletions(-) rename ArchUnitNET/Fluent/Syntax/Elements/{ObjectsShould.cs => AddObjectCondition.cs} (55%) rename ArchUnitNET/Fluent/Syntax/Elements/{GivenObjectsThat.cs => AddObjectPredicate.cs} (56%) rename ArchUnitNET/Fluent/Syntax/Elements/{IObjectConditions.cs => IAddObjectCondition.cs} (92%) rename ArchUnitNET/Fluent/Syntax/Elements/{IObjectPredicates.cs => IAddObjectPredicate.cs} (99%) delete mode 100644 ArchUnitNET/Fluent/Syntax/Elements/IComplexObjectConditions.cs create mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Members/AddMemberCondition.cs create mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Members/AddMemberPredicate.cs create mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/AddFieldMemberCondition.cs create mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/AddFieldMemberPredicate.cs rename ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/{IFieldMemberConditions.cs => IAddFieldMemberCondition.cs} (53%) rename ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/{IFieldMemberPredicates.cs => IAddFieldMemberPredicate.cs} (50%) delete mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IComplexFieldMemberConditions.cs rename ArchUnitNET/Fluent/Syntax/Elements/Members/{IMemberConditions.cs => IAddMemberCondition.cs} (75%) rename ArchUnitNET/Fluent/Syntax/Elements/Members/{IMemberPredicates.cs => IAddMemberPredicate.cs} (89%) delete mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Members/IComplexMemberConditions.cs create mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/AddMethodMemberCondition.cs create mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/AddMethodMemberPredicate.cs rename ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/{IMethodMemberConditions.cs => IAddMethodMemberCondition.cs} (95%) rename ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/{IMethodMemberPredicates.cs => IAddMethodMemberPredicate.cs} (86%) delete mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IComplexMethodMemberConditions.cs create mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/AddPropertyMemberCondition.cs create mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/AddPropertyMemberPredicate.cs rename ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/{IPropertyMemberConditions.cs => IAddPropertyMemberCondition.cs} (92%) rename ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/{IPropertyMemberPredicates.cs => IAddPropertyMemberPredicate.cs} (92%) delete mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IComplexPropertyMemberConditions.cs delete mode 100644 ArchUnitNET/Fluent/Syntax/Elements/ShouldRelateToObjectsThat.cs create mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Types/AddTypeCondition.cs create mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Types/AddTypePredicate.cs create mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/AddAttributeCondition.cs create mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/AddAttributePredicate.cs rename ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/{IAttributeConditions.cs => IAddAttributeCondition.cs} (71%) rename ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/{IAttributePredicates.cs => IAddAttributePredicate.cs} (71%) delete mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IComplexAttributeConditions.cs create mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/AddClassCondition.cs create mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/AddClassPredicate.cs rename ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/{IClassConditions.cs => IAddClassCondition.cs} (75%) rename ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/{IClassPredicates.cs => IAddClassPredicate.cs} (76%) delete mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IComplexClassConditions.cs rename ArchUnitNET/Fluent/Syntax/Elements/Types/{ITypeConditions.cs => IAddTypeCondition.cs} (87%) rename ArchUnitNET/Fluent/Syntax/Elements/Types/{ITypePredicates.cs => IAddTypePredicate.cs} (97%) delete mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Types/IComplexTypeConditions.cs create mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/AddInterfaceCondition.cs create mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/AddInterfacePredicate.cs rename ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/{IInterfacePredicates.cs => IAddInterfaceCondition.cs} (54%) rename ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/{IInterfaceConditions.cs => IAddInterfacePredicate.cs} (53%) delete mode 100644 ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IComplexInterfaceConditions.cs diff --git a/ArchUnitNET/Fluent/Syntax/Elements/ObjectsShould.cs b/ArchUnitNET/Fluent/Syntax/Elements/AddObjectCondition.cs similarity index 55% rename from ArchUnitNET/Fluent/Syntax/Elements/ObjectsShould.cs rename to ArchUnitNET/Fluent/Syntax/Elements/AddObjectCondition.cs index 036fa7642..1001dadf0 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/ObjectsShould.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/AddObjectCondition.cs @@ -1,115 +1,113 @@ -using System; +using System; using System.Collections.Generic; using ArchUnitNET.Domain; using ArchUnitNET.Domain.Extensions; using ArchUnitNET.Fluent.Conditions; +using ArchUnitNET.Fluent.Syntax.Elements.Members.MethodMembers; using ArchUnitNET.Fluent.Syntax.Elements.Types; using ArchUnitNET.Fluent.Syntax.Elements.Types.Attributes; -using static ArchUnitNET.Fluent.ArchRuleDefinition; -using static ArchUnitNET.Fluent.Syntax.ConjunctionFactory; +using ArchUnitNET.Fluent.Syntax.Elements.Types.Interfaces; using Attribute = ArchUnitNET.Domain.Attribute; namespace ArchUnitNET.Fluent.Syntax.Elements { - public abstract class ObjectsShould + public abstract class AddObjectCondition : SyntaxElement, - IComplexObjectConditions + IAddObjectCondition where TRuleType : ICanBeAnalyzed - where TRuleTypeShouldConjunction : SyntaxElement { - protected ObjectsShould(IArchRuleCreator ruleCreator) + internal AddObjectCondition(IArchRuleCreator ruleCreator) : base(ruleCreator) { } public TRuleTypeShouldConjunction Exist() { _ruleCreator.RequirePositiveResults = false; - _ruleCreator.AddCondition(ObjectConditionsDefinition.Exist()); - return Create(_ruleCreator); + return CreateNextElement(ObjectConditionsDefinition.Exist()); } // csharpier-ignore-start public TRuleTypeShouldConjunction Be(params ICanBeAnalyzed[] objects) => Be(new ObjectProvider(objects)); public TRuleTypeShouldConjunction Be(IEnumerable objects) => Be(new ObjectProvider(objects)); - public TRuleTypeShouldConjunction Be(IObjectProvider objects) => AddCondition(ObjectConditionsDefinition.Be(objects)); + public TRuleTypeShouldConjunction Be(IObjectProvider objects) => CreateNextElement(ObjectConditionsDefinition.Be(objects)); public TRuleTypeShouldConjunction CallAny(params MethodMember[] methods) => CallAny(new ObjectProvider(methods)); public TRuleTypeShouldConjunction CallAny(IEnumerable methods) => CallAny(new ObjectProvider(methods)); - public TRuleTypeShouldConjunction CallAny(IObjectProvider methods) => AddCondition(ObjectConditionsDefinition.CallAny(methods)); + public TRuleTypeShouldConjunction CallAny(IObjectProvider methods) => CreateNextElement(ObjectConditionsDefinition.CallAny(methods)); public TRuleTypeShouldConjunction DependOnAny() => DependOnAny(new ObjectProvider()); public TRuleTypeShouldConjunction DependOnAny(params IType[] types) => DependOnAny(new ObjectProvider(types)); public TRuleTypeShouldConjunction DependOnAny(params Type[] types) => DependOnAny(new SystemTypeObjectProvider(types)); - public TRuleTypeShouldConjunction DependOnAny(IObjectProvider types) => AddCondition(ObjectConditionsDefinition.DependOnAny(types)); + public TRuleTypeShouldConjunction DependOnAny(IObjectProvider types) => CreateNextElement(ObjectConditionsDefinition.DependOnAny(types)); public TRuleTypeShouldConjunction DependOnAny(IEnumerable types) => DependOnAny(new ObjectProvider(types)); public TRuleTypeShouldConjunction DependOnAny(IEnumerable types) => DependOnAny(new SystemTypeObjectProvider(types)); - public TRuleTypeShouldConjunction FollowCustomCondition(ICondition condition) => AddCondition(condition.AsOrderedCondition()); - public TRuleTypeShouldConjunction FollowCustomCondition(Func condition, string description) => AddCondition(ObjectConditionsDefinition.FollowCustomCondition(condition, description)); - public TRuleTypeShouldConjunction FollowCustomCondition(Func condition, string description, string failDescription) => AddCondition(ObjectConditionsDefinition.FollowCustomCondition(condition, description, failDescription)); + public TRuleTypeShouldConjunction FollowCustomCondition(ICondition condition) => CreateNextElement(condition.AsOrderedCondition()); + public TRuleTypeShouldConjunction FollowCustomCondition(Func condition, string description) => CreateNextElement(ObjectConditionsDefinition.FollowCustomCondition(condition, description)); + public TRuleTypeShouldConjunction FollowCustomCondition(Func condition, string description, string failDescription) => CreateNextElement(ObjectConditionsDefinition.FollowCustomCondition(condition, description, failDescription)); public TRuleTypeShouldConjunction OnlyDependOn() => OnlyDependOn(new ObjectProvider()); public TRuleTypeShouldConjunction OnlyDependOn(params IType[] types) => OnlyDependOn(new ObjectProvider(types)); public TRuleTypeShouldConjunction OnlyDependOn(params Type[] types) => OnlyDependOn(new SystemTypeObjectProvider(types)); - public TRuleTypeShouldConjunction OnlyDependOn(IObjectProvider types) => AddCondition(ObjectConditionsDefinition.OnlyDependOn(types)); + public TRuleTypeShouldConjunction OnlyDependOn(IObjectProvider types) => CreateNextElement(ObjectConditionsDefinition.OnlyDependOn(types)); public TRuleTypeShouldConjunction OnlyDependOn(IEnumerable types) => OnlyDependOn(new ObjectProvider(types)); public TRuleTypeShouldConjunction OnlyDependOn(IEnumerable types) => OnlyDependOn(new SystemTypeObjectProvider(types)); public TRuleTypeShouldConjunction HaveAnyAttributes() => HaveAnyAttributes(new ObjectProvider()); public TRuleTypeShouldConjunction HaveAnyAttributes(params Attribute[] attributes) => HaveAnyAttributes(new ObjectProvider(attributes)); public TRuleTypeShouldConjunction HaveAnyAttributes(params Type[] attributes) => HaveAnyAttributes(new SystemTypeObjectProvider(attributes)); - public TRuleTypeShouldConjunction HaveAnyAttributes(IObjectProvider attributes) => AddCondition(ObjectConditionsDefinition.HaveAnyAttributes(attributes)); + public TRuleTypeShouldConjunction HaveAnyAttributes(IObjectProvider attributes) => CreateNextElement(ObjectConditionsDefinition.HaveAnyAttributes(attributes)); public TRuleTypeShouldConjunction HaveAnyAttributes(IEnumerable attributes) => HaveAnyAttributes(new ObjectProvider(attributes)); public TRuleTypeShouldConjunction HaveAnyAttributes(IEnumerable attributes) => HaveAnyAttributes(new SystemTypeObjectProvider(attributes)); public TRuleTypeShouldConjunction OnlyHaveAttributes() => OnlyHaveAttributes(new ObjectProvider()); public TRuleTypeShouldConjunction OnlyHaveAttributes(params Attribute[] attributes) => OnlyHaveAttributes(new ObjectProvider(attributes)); public TRuleTypeShouldConjunction OnlyHaveAttributes(params Type[] attributes) => OnlyHaveAttributes(new SystemTypeObjectProvider(attributes)); - public TRuleTypeShouldConjunction OnlyHaveAttributes(IObjectProvider attributes) => AddCondition(ObjectConditionsDefinition.OnlyHaveAttributes(attributes)); + public TRuleTypeShouldConjunction OnlyHaveAttributes(IObjectProvider attributes) => CreateNextElement(ObjectConditionsDefinition.OnlyHaveAttributes(attributes)); public TRuleTypeShouldConjunction OnlyHaveAttributes(IEnumerable attributes) => OnlyHaveAttributes(new ObjectProvider(attributes)); public TRuleTypeShouldConjunction OnlyHaveAttributes(IEnumerable attributes) => OnlyHaveAttributes(new SystemTypeObjectProvider(attributes)); - public TRuleTypeShouldConjunction HaveAnyAttributesWithArguments(IEnumerable argumentValues) => AddCondition(ObjectConditionsDefinition.HaveAnyAttributesWithArguments(argumentValues)); + public TRuleTypeShouldConjunction HaveAnyAttributesWithArguments(IEnumerable argumentValues) => CreateNextElement(ObjectConditionsDefinition.HaveAnyAttributesWithArguments(argumentValues)); - public TRuleTypeShouldConjunction HaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues) => AddCondition(ObjectConditionsDefinition.HaveAttributeWithArguments(attribute.FullName, _ => attribute, argumentValues)); - public TRuleTypeShouldConjunction HaveAttributeWithArguments(Type attribute, IEnumerable argumentValues) => AddCondition(ObjectConditionsDefinition.HaveAttributeWithArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), argumentValues)); + public TRuleTypeShouldConjunction HaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues) => CreateNextElement(ObjectConditionsDefinition.HaveAttributeWithArguments(attribute.FullName, _ => attribute, argumentValues)); + public TRuleTypeShouldConjunction HaveAttributeWithArguments(Type attribute, IEnumerable argumentValues) => CreateNextElement(ObjectConditionsDefinition.HaveAttributeWithArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), argumentValues)); - public TRuleTypeShouldConjunction HaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments) => AddCondition(ObjectConditionsDefinition.HaveAnyAttributesWithNamedArguments(attributeArguments)); + public TRuleTypeShouldConjunction HaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectConditionsDefinition.HaveAnyAttributesWithNamedArguments(attributeArguments)); public TRuleTypeShouldConjunction HaveAnyAttributesWithNamedArguments(params (string, object)[] attributeArguments) => HaveAnyAttributesWithNamedArguments((IEnumerable<(string, object)>)attributeArguments); - public TRuleTypeShouldConjunction HaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments) => AddCondition(ObjectConditionsDefinition.HaveAttributeWithNamedArguments(attribute.FullName, _ => attribute, attributeArguments)); + public TRuleTypeShouldConjunction HaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectConditionsDefinition.HaveAttributeWithNamedArguments(attribute.FullName, _ => attribute, attributeArguments)); public TRuleTypeShouldConjunction HaveAttributeWithNamedArguments(Attribute attribute, params (string, object)[] attributeArguments) => HaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); - public TRuleTypeShouldConjunction HaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments) => AddCondition(ObjectConditionsDefinition.HaveAttributeWithNamedArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), attributeArguments)); + public TRuleTypeShouldConjunction HaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectConditionsDefinition.HaveAttributeWithNamedArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), attributeArguments)); public TRuleTypeShouldConjunction HaveAttributeWithNamedArguments(Type attribute, params (string, object)[] attributeArguments) => HaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); - public TRuleTypeShouldConjunction HaveName(string name) => AddCondition(ObjectConditionsDefinition.HaveName(name)); - public TRuleTypeShouldConjunction HaveNameMatching(string pattern) => AddCondition(ObjectConditionsDefinition.HaveNameMatching(pattern)); - public TRuleTypeShouldConjunction HaveNameStartingWith(string pattern) => AddCondition(ObjectConditionsDefinition.HaveNameStartingWith(pattern)); - public TRuleTypeShouldConjunction HaveNameEndingWith(string pattern) => AddCondition(ObjectConditionsDefinition.HaveNameEndingWith(pattern)); - public TRuleTypeShouldConjunction HaveNameContaining(string pattern) => AddCondition(ObjectConditionsDefinition.HaveNameContaining(pattern)); - - public TRuleTypeShouldConjunction HaveFullName(string fullName) => AddCondition(ObjectConditionsDefinition.HaveFullName(fullName)); - public TRuleTypeShouldConjunction HaveFullNameMatching(string pattern) => AddCondition(ObjectConditionsDefinition.HaveFullNameMatching(pattern)); - public TRuleTypeShouldConjunction HaveFullNameStartingWith(string pattern) => AddCondition(ObjectConditionsDefinition.HaveFullNameStartingWith(pattern)); - public TRuleTypeShouldConjunction HaveFullNameEndingWith(string pattern) => AddCondition(ObjectConditionsDefinition.HaveFullNameEndingWith(pattern)); - public TRuleTypeShouldConjunction HaveFullNameContaining(string pattern) => AddCondition(ObjectConditionsDefinition.HaveFullNameContaining(pattern)); - - public TRuleTypeShouldConjunction HaveAssemblyQualifiedName(string assemblyQualifiedName) => AddCondition(ObjectConditionsDefinition.HaveAssemblyQualifiedName(assemblyQualifiedName)); - public TRuleTypeShouldConjunction HaveAssemblyQualifiedNameMatching(string pattern) => AddCondition(ObjectConditionsDefinition.HaveAssemblyQualifiedNameMatching(pattern)); - public TRuleTypeShouldConjunction HaveAssemblyQualifiedNameStartingWith(string pattern) => AddCondition(ObjectConditionsDefinition.HaveAssemblyQualifiedNameStartingWith(pattern)); - public TRuleTypeShouldConjunction HaveAssemblyQualifiedNameEndingWith(string pattern) => AddCondition(ObjectConditionsDefinition.HaveAssemblyQualifiedNameEndingWith(pattern)); - public TRuleTypeShouldConjunction HaveAssemblyQualifiedNameContaining(string pattern) => AddCondition(ObjectConditionsDefinition.HaveAssemblyQualifiedNameContaining(pattern)); - - public TRuleTypeShouldConjunction BePrivate() => AddCondition(ObjectConditionsDefinition.BePrivate()); - public TRuleTypeShouldConjunction BePublic() => AddCondition(ObjectConditionsDefinition.BePublic()); - public TRuleTypeShouldConjunction BeProtected() => AddCondition(ObjectConditionsDefinition.BeProtected()); - public TRuleTypeShouldConjunction BeInternal() => AddCondition(ObjectConditionsDefinition.BeInternal()); - public TRuleTypeShouldConjunction BeProtectedInternal() => AddCondition(ObjectConditionsDefinition.BeProtectedInternal()); - public TRuleTypeShouldConjunction BePrivateProtected() => AddCondition(ObjectConditionsDefinition.BePrivateProtected()); + public TRuleTypeShouldConjunction HaveName(string name) => CreateNextElement(ObjectConditionsDefinition.HaveName(name)); + public TRuleTypeShouldConjunction HaveNameMatching(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveNameMatching(pattern)); + public TRuleTypeShouldConjunction HaveNameStartingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveNameStartingWith(pattern)); + public TRuleTypeShouldConjunction HaveNameEndingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveNameEndingWith(pattern)); + public TRuleTypeShouldConjunction HaveNameContaining(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveNameContaining(pattern)); + + public TRuleTypeShouldConjunction HaveFullName(string fullName) => CreateNextElement(ObjectConditionsDefinition.HaveFullName(fullName)); + public TRuleTypeShouldConjunction HaveFullNameMatching(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveFullNameMatching(pattern)); + public TRuleTypeShouldConjunction HaveFullNameStartingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveFullNameStartingWith(pattern)); + public TRuleTypeShouldConjunction HaveFullNameEndingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveFullNameEndingWith(pattern)); + public TRuleTypeShouldConjunction HaveFullNameContaining(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveFullNameContaining(pattern)); + + public TRuleTypeShouldConjunction HaveAssemblyQualifiedName(string assemblyQualifiedName) => CreateNextElement(ObjectConditionsDefinition.HaveAssemblyQualifiedName(assemblyQualifiedName)); + public TRuleTypeShouldConjunction HaveAssemblyQualifiedNameMatching(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveAssemblyQualifiedNameMatching(pattern)); + public TRuleTypeShouldConjunction HaveAssemblyQualifiedNameStartingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveAssemblyQualifiedNameStartingWith(pattern)); + public TRuleTypeShouldConjunction HaveAssemblyQualifiedNameEndingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveAssemblyQualifiedNameEndingWith(pattern)); + public TRuleTypeShouldConjunction HaveAssemblyQualifiedNameContaining(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveAssemblyQualifiedNameContaining(pattern)); + + public TRuleTypeShouldConjunction BePrivate() => CreateNextElement(ObjectConditionsDefinition.BePrivate()); + public TRuleTypeShouldConjunction BePublic() => CreateNextElement(ObjectConditionsDefinition.BePublic()); + public TRuleTypeShouldConjunction BeProtected() => CreateNextElement(ObjectConditionsDefinition.BeProtected()); + public TRuleTypeShouldConjunction BeInternal() => CreateNextElement(ObjectConditionsDefinition.BeInternal()); + public TRuleTypeShouldConjunction BeProtectedInternal() => CreateNextElement(ObjectConditionsDefinition.BeProtectedInternal()); + public TRuleTypeShouldConjunction BePrivateProtected() => CreateNextElement(ObjectConditionsDefinition.BePrivateProtected()); // Relation Conditions - public ShouldRelateToTypesThat DependOnAnyTypesThat() => BeginComplexTypeCondition(ObjectConditionsDefinition.DependOnAnyTypesThat()); - public ShouldRelateToTypesThat OnlyDependOnTypesThat() => BeginComplexTypeCondition(ObjectConditionsDefinition.OnlyDependOnTypesThat()); + public ShouldRelateToTypesThat DependOnAnyTypesThat() => BeginComplexTypeCondition(ObjectConditionsDefinition.DependOnAnyTypesThat()); + public ShouldRelateToTypesThat OnlyDependOnTypesThat() => BeginComplexTypeCondition(ObjectConditionsDefinition.OnlyDependOnTypesThat()); public ShouldRelateToAttributesThat HaveAnyAttributesThat() => BeginComplexAttributeCondition(ObjectConditionsDefinition.HaveAnyAttributesThat()); public ShouldRelateToAttributesThat OnlyHaveAttributesThat() => BeginComplexAttributeCondition(ObjectConditionsDefinition.OnlyHaveAttributesThat()); @@ -119,103 +117,121 @@ public TRuleTypeShouldConjunction Exist() public TRuleTypeShouldConjunction NotExist() { _ruleCreator.RequirePositiveResults = false; - _ruleCreator.AddCondition(ObjectConditionsDefinition.NotExist()); - return Create(_ruleCreator); + return CreateNextElement(ObjectConditionsDefinition.NotExist()); } public TRuleTypeShouldConjunction NotBe(params ICanBeAnalyzed[] objects) => NotBe(new ObjectProvider(objects)); public TRuleTypeShouldConjunction NotBe(IEnumerable objects) => NotBe(new ObjectProvider(objects)); - public TRuleTypeShouldConjunction NotBe(IObjectProvider objects) => AddCondition(ObjectConditionsDefinition.NotBe(objects)); + public TRuleTypeShouldConjunction NotBe(IObjectProvider objects) => CreateNextElement(ObjectConditionsDefinition.NotBe(objects)); public TRuleTypeShouldConjunction NotCallAny(params MethodMember[] methods) => NotCallAny(new ObjectProvider(methods)); public TRuleTypeShouldConjunction NotCallAny(IEnumerable methods) => NotCallAny(new ObjectProvider(methods)); - public TRuleTypeShouldConjunction NotCallAny(IObjectProvider methods) => AddCondition(ObjectConditionsDefinition.NotCallAny(methods)); + public TRuleTypeShouldConjunction NotCallAny(IObjectProvider methods) => CreateNextElement(ObjectConditionsDefinition.NotCallAny(methods)); public TRuleTypeShouldConjunction NotDependOnAny() => NotDependOnAny(new ObjectProvider()); public TRuleTypeShouldConjunction NotDependOnAny(params IType[] types) => NotDependOnAny(new ObjectProvider(types)); public TRuleTypeShouldConjunction NotDependOnAny(params Type[] types) => NotDependOnAny(new SystemTypeObjectProvider(types)); - public TRuleTypeShouldConjunction NotDependOnAny(IObjectProvider types) => AddCondition(ObjectConditionsDefinition.NotDependOnAny(types)); + public TRuleTypeShouldConjunction NotDependOnAny(IObjectProvider types) => CreateNextElement(ObjectConditionsDefinition.NotDependOnAny(types)); public TRuleTypeShouldConjunction NotDependOnAny(IEnumerable types) => NotDependOnAny(new ObjectProvider(types)); public TRuleTypeShouldConjunction NotDependOnAny(IEnumerable types) => NotDependOnAny(new SystemTypeObjectProvider(types)); public TRuleTypeShouldConjunction NotHaveAnyAttributes() => NotHaveAnyAttributes(new ObjectProvider()); public TRuleTypeShouldConjunction NotHaveAnyAttributes(params Attribute[] attributes) => NotHaveAnyAttributes(new ObjectProvider(attributes)); public TRuleTypeShouldConjunction NotHaveAnyAttributes(params Type[] attributes) => NotHaveAnyAttributes(new SystemTypeObjectProvider(attributes)); - public TRuleTypeShouldConjunction NotHaveAnyAttributes(IObjectProvider attributes) => AddCondition(ObjectConditionsDefinition.NotHaveAnyAttributes(attributes)); + public TRuleTypeShouldConjunction NotHaveAnyAttributes(IObjectProvider attributes) => CreateNextElement(ObjectConditionsDefinition.NotHaveAnyAttributes(attributes)); public TRuleTypeShouldConjunction NotHaveAnyAttributes(IEnumerable attributes) => NotHaveAnyAttributes(new ObjectProvider(attributes)); public TRuleTypeShouldConjunction NotHaveAnyAttributes(IEnumerable attributes) => NotHaveAnyAttributes(new SystemTypeObjectProvider(attributes)); - public TRuleTypeShouldConjunction NotHaveAnyAttributesWithArguments(IEnumerable argumentValues) => AddCondition(ObjectConditionsDefinition.NotHaveAnyAttributesWithArguments(argumentValues)); + public TRuleTypeShouldConjunction NotHaveAnyAttributesWithArguments(IEnumerable argumentValues) => CreateNextElement(ObjectConditionsDefinition.NotHaveAnyAttributesWithArguments(argumentValues)); - public TRuleTypeShouldConjunction NotHaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues) => AddCondition(ObjectConditionsDefinition.NotHaveAttributeWithArguments(attribute.FullName, _ => attribute, argumentValues)); - public TRuleTypeShouldConjunction NotHaveAttributeWithArguments(Type attribute, IEnumerable argumentValues) => AddCondition(ObjectConditionsDefinition.NotHaveAttributeWithArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), argumentValues)); + public TRuleTypeShouldConjunction NotHaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues) => CreateNextElement(ObjectConditionsDefinition.NotHaveAttributeWithArguments(attribute.FullName, _ => attribute, argumentValues)); + public TRuleTypeShouldConjunction NotHaveAttributeWithArguments(Type attribute, IEnumerable argumentValues) => CreateNextElement(ObjectConditionsDefinition.NotHaveAttributeWithArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), argumentValues)); - public TRuleTypeShouldConjunction NotHaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments) => AddCondition(ObjectConditionsDefinition.NotHaveAnyAttributesWithNamedArguments(attributeArguments)); + public TRuleTypeShouldConjunction NotHaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectConditionsDefinition.NotHaveAnyAttributesWithNamedArguments(attributeArguments)); public TRuleTypeShouldConjunction NotHaveAnyAttributesWithNamedArguments(params (string, object)[] attributeArguments) => NotHaveAnyAttributesWithNamedArguments((IEnumerable<(string, object)>)attributeArguments); - public TRuleTypeShouldConjunction NotHaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments) => AddCondition(ObjectConditionsDefinition.NotHaveAttributeWithNamedArguments(attribute.FullName, _ => attribute, attributeArguments)); + public TRuleTypeShouldConjunction NotHaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectConditionsDefinition.NotHaveAttributeWithNamedArguments(attribute.FullName, _ => attribute, attributeArguments)); public TRuleTypeShouldConjunction NotHaveAttributeWithNamedArguments(Attribute attribute, params (string, object)[] attributeArguments) => NotHaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); - public TRuleTypeShouldConjunction NotHaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments) => AddCondition(ObjectConditionsDefinition.NotHaveAttributeWithNamedArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), attributeArguments)); + public TRuleTypeShouldConjunction NotHaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectConditionsDefinition.NotHaveAttributeWithNamedArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), attributeArguments)); public TRuleTypeShouldConjunction NotHaveAttributeWithNamedArguments(Type attribute, params (string, object)[] attributeArguments) => NotHaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); - public TRuleTypeShouldConjunction NotHaveName(string name) => AddCondition(ObjectConditionsDefinition.NotHaveName(name)); - public TRuleTypeShouldConjunction NotHaveNameMatching(string pattern) => AddCondition(ObjectConditionsDefinition.NotHaveNameMatching(pattern)); - public TRuleTypeShouldConjunction NotHaveNameStartingWith(string pattern) => AddCondition(ObjectConditionsDefinition.NotHaveNameStartingWith(pattern)); - public TRuleTypeShouldConjunction NotHaveNameEndingWith(string pattern) => AddCondition(ObjectConditionsDefinition.NotHaveNameEndingWith(pattern)); - public TRuleTypeShouldConjunction NotHaveNameContaining(string pattern) => AddCondition(ObjectConditionsDefinition.NotHaveNameContaining(pattern)); - - public TRuleTypeShouldConjunction NotHaveFullName(string fullName) => AddCondition(ObjectConditionsDefinition.NotHaveFullName(fullName)); - public TRuleTypeShouldConjunction NotHaveFullNameMatching(string pattern) => AddCondition(ObjectConditionsDefinition.NotHaveFullNameMatching(pattern)); - public TRuleTypeShouldConjunction NotHaveFullNameStartingWith(string pattern) => AddCondition(ObjectConditionsDefinition.NotHaveFullNameStartingWith(pattern)); - public TRuleTypeShouldConjunction NotHaveFullNameEndingWith(string pattern) => AddCondition(ObjectConditionsDefinition.NotHaveFullNameEndingWith(pattern)); - public TRuleTypeShouldConjunction NotHaveFullNameContaining(string pattern) => AddCondition(ObjectConditionsDefinition.NotHaveFullNameContaining(pattern)); - - public TRuleTypeShouldConjunction NotHaveAssemblyQualifiedName(string assemblyQualifiedName) => AddCondition(ObjectConditionsDefinition.NotHaveAssemblyQualifiedName(assemblyQualifiedName)); - public TRuleTypeShouldConjunction NotHaveAssemblyQualifiedNameMatching(string pattern) => AddCondition(ObjectConditionsDefinition.NotHaveAssemblyQualifiedNameMatching(pattern)); - public TRuleTypeShouldConjunction NotHaveAssemblyQualifiedNameStartingWith(string pattern) => AddCondition(ObjectConditionsDefinition.NotHaveAssemblyQualifiedNameStartingWith(pattern)); - public TRuleTypeShouldConjunction NotHaveAssemblyQualifiedNameEndingWith(string pattern) => AddCondition(ObjectConditionsDefinition.NotHaveAssemblyQualifiedNameEndingWith(pattern)); - public TRuleTypeShouldConjunction NotHaveAssemblyQualifiedNameContaining(string pattern) => AddCondition(ObjectConditionsDefinition.NotHaveAssemblyQualifiedNameContaining(pattern)); - - public TRuleTypeShouldConjunction NotBePrivate() => AddCondition(ObjectConditionsDefinition.NotBePrivate()); - public TRuleTypeShouldConjunction NotBePublic() => AddCondition(ObjectConditionsDefinition.NotBePublic()); - public TRuleTypeShouldConjunction NotBeProtected() => AddCondition(ObjectConditionsDefinition.NotBeProtected()); - public TRuleTypeShouldConjunction NotBeInternal() => AddCondition(ObjectConditionsDefinition.NotBeInternal()); - public TRuleTypeShouldConjunction NotBeProtectedInternal() => AddCondition(ObjectConditionsDefinition.NotBeProtectedInternal()); - public TRuleTypeShouldConjunction NotBePrivateProtected() => AddCondition(ObjectConditionsDefinition.NotBePrivateProtected()); + public TRuleTypeShouldConjunction NotHaveName(string name) => CreateNextElement(ObjectConditionsDefinition.NotHaveName(name)); + public TRuleTypeShouldConjunction NotHaveNameMatching(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveNameMatching(pattern)); + public TRuleTypeShouldConjunction NotHaveNameStartingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveNameStartingWith(pattern)); + public TRuleTypeShouldConjunction NotHaveNameEndingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveNameEndingWith(pattern)); + public TRuleTypeShouldConjunction NotHaveNameContaining(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveNameContaining(pattern)); + + public TRuleTypeShouldConjunction NotHaveFullName(string fullName) => CreateNextElement(ObjectConditionsDefinition.NotHaveFullName(fullName)); + public TRuleTypeShouldConjunction NotHaveFullNameMatching(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveFullNameMatching(pattern)); + public TRuleTypeShouldConjunction NotHaveFullNameStartingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveFullNameStartingWith(pattern)); + public TRuleTypeShouldConjunction NotHaveFullNameEndingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveFullNameEndingWith(pattern)); + public TRuleTypeShouldConjunction NotHaveFullNameContaining(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveFullNameContaining(pattern)); + + public TRuleTypeShouldConjunction NotHaveAssemblyQualifiedName(string assemblyQualifiedName) => CreateNextElement(ObjectConditionsDefinition.NotHaveAssemblyQualifiedName(assemblyQualifiedName)); + public TRuleTypeShouldConjunction NotHaveAssemblyQualifiedNameMatching(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveAssemblyQualifiedNameMatching(pattern)); + public TRuleTypeShouldConjunction NotHaveAssemblyQualifiedNameStartingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveAssemblyQualifiedNameStartingWith(pattern)); + public TRuleTypeShouldConjunction NotHaveAssemblyQualifiedNameEndingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveAssemblyQualifiedNameEndingWith(pattern)); + public TRuleTypeShouldConjunction NotHaveAssemblyQualifiedNameContaining(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveAssemblyQualifiedNameContaining(pattern)); + + public TRuleTypeShouldConjunction NotBePrivate() => CreateNextElement(ObjectConditionsDefinition.NotBePrivate()); + public TRuleTypeShouldConjunction NotBePublic() => CreateNextElement(ObjectConditionsDefinition.NotBePublic()); + public TRuleTypeShouldConjunction NotBeProtected() => CreateNextElement(ObjectConditionsDefinition.NotBeProtected()); + public TRuleTypeShouldConjunction NotBeInternal() => CreateNextElement(ObjectConditionsDefinition.NotBeInternal()); + public TRuleTypeShouldConjunction NotBeProtectedInternal() => CreateNextElement(ObjectConditionsDefinition.NotBeProtectedInternal()); + public TRuleTypeShouldConjunction NotBePrivateProtected() => CreateNextElement(ObjectConditionsDefinition.NotBePrivateProtected()); // Relation Condition Negations - public ShouldRelateToTypesThat NotDependOnAnyTypesThat() => BeginComplexTypeCondition(ObjectConditionsDefinition.NotDependOnAnyTypesThat()); + public ShouldRelateToTypesThat NotDependOnAnyTypesThat() => BeginComplexTypeCondition(ObjectConditionsDefinition.NotDependOnAnyTypesThat()); public ShouldRelateToAttributesThat NotHaveAnyAttributesThat() => BeginComplexAttributeCondition(ObjectConditionsDefinition.NotHaveAnyAttributesThat()); // csharpier-ignore-end - private TRuleTypeShouldConjunction AddCondition(IOrderedCondition condition) + protected abstract TRuleTypeShouldConjunction CreateNextElement(IOrderedCondition condition); + + protected ShouldRelateToTypesThat BeginComplexTypeCondition( + RelationCondition relationCondition + ) { - _ruleCreator.AddCondition(condition); - return Create(_ruleCreator); + _ruleCreator.BeginComplexCondition(ArchRuleDefinition.Types(true), relationCondition); + return new ShouldRelateToTypesThat(_ruleCreator); } - private ShouldRelateToTypesThat< + protected ShouldRelateToAttributesThat< TRuleTypeShouldConjunction, - IType, TRuleType - > BeginComplexTypeCondition(RelationCondition relationCondition) + > BeginComplexAttributeCondition(RelationCondition relationCondition) { - _ruleCreator.BeginComplexCondition(ArchRuleDefinition.Types(true), relationCondition); - return new ShouldRelateToTypesThat( - _ruleCreator + _ruleCreator.BeginComplexCondition( + ArchRuleDefinition.Attributes(true), + relationCondition ); + return new ShouldRelateToAttributesThat(_ruleCreator); } - private ShouldRelateToAttributesThat< + protected ShouldRelateToInterfacesThat< TRuleTypeShouldConjunction, TRuleType - > BeginComplexAttributeCondition(RelationCondition relationCondition) + > BeginComplexInterfaceCondition(RelationCondition relationCondition) + { + _ruleCreator.BeginComplexCondition( + ArchRuleDefinition.Interfaces(true), + relationCondition + ); + return new ShouldRelateToInterfacesThat(_ruleCreator); + } + + protected ShouldRelateToMethodMembersThat< + TRuleTypeShouldConjunction, + TRuleType + > BeginComplexMethodMemberCondition( + RelationCondition relationCondition + ) { - _ruleCreator.BeginComplexCondition(Attributes(true), relationCondition); - return new ShouldRelateToAttributesThat( - _ruleCreator + _ruleCreator.BeginComplexCondition( + ArchRuleDefinition.MethodMembers(), + relationCondition ); + return new ShouldRelateToMethodMembersThat(_ruleCreator); } } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/GivenObjectsThat.cs b/ArchUnitNET/Fluent/Syntax/Elements/AddObjectPredicate.cs similarity index 56% rename from ArchUnitNET/Fluent/Syntax/Elements/GivenObjectsThat.cs rename to ArchUnitNET/Fluent/Syntax/Elements/AddObjectPredicate.cs index 2faa4f628..92f94328c 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/GivenObjectsThat.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/AddObjectPredicate.cs @@ -1,168 +1,164 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using ArchUnitNET.Domain; using ArchUnitNET.Domain.Extensions; using ArchUnitNET.Fluent.Predicates; -using static ArchUnitNET.Fluent.Syntax.ConjunctionFactory; using Attribute = ArchUnitNET.Domain.Attribute; namespace ArchUnitNET.Fluent.Syntax.Elements { - public abstract class GivenObjectsThat - : SyntaxElement, - IObjectPredicates + public abstract class AddObjectPredicate + : SyntaxElement, + IAddObjectPredicate where TRuleType : ICanBeAnalyzed + where TRelatedType : ICanBeAnalyzed { - protected GivenObjectsThat(IArchRuleCreator ruleCreator) - : base(ruleCreator) { } + internal AddObjectPredicate(IArchRuleCreator archRuleCreator) + : base(archRuleCreator) { } // csharpier-ignore-start - public TGivenRuleTypeConjunction FollowCustomPredicate(IPredicate predicate) => AddPredicate(predicate); - public TGivenRuleTypeConjunction FollowCustomPredicate(Func predicate, string description) => AddPredicate(ObjectPredicatesDefinition.FollowCustomPredicate(predicate, description)); + public TGivenRuleTypeConjunction FollowCustomPredicate(IPredicate predicate) => CreateNextElement(predicate); + public TGivenRuleTypeConjunction FollowCustomPredicate(Func predicate, string description) => CreateNextElement(ObjectPredicatesDefinition.FollowCustomPredicate(predicate, description)); public TGivenRuleTypeConjunction Are(params ICanBeAnalyzed[] objects) => Are(new ObjectProvider(objects)); public TGivenRuleTypeConjunction Are(IEnumerable objects) => Are(new ObjectProvider(objects)); - public TGivenRuleTypeConjunction Are(IObjectProvider objects) => AddPredicate(ObjectPredicatesDefinition.Are(objects)); + public TGivenRuleTypeConjunction Are(IObjectProvider objects) => CreateNextElement(ObjectPredicatesDefinition.Are(objects)); public TGivenRuleTypeConjunction CallAny(params MethodMember[] methods) => CallAny(new ObjectProvider(methods)); public TGivenRuleTypeConjunction CallAny(IEnumerable methods) => CallAny(new ObjectProvider(methods)); - public TGivenRuleTypeConjunction CallAny(IObjectProvider methods) => AddPredicate(ObjectPredicatesDefinition.CallAny(methods)); + public TGivenRuleTypeConjunction CallAny(IObjectProvider methods) => CreateNextElement(ObjectPredicatesDefinition.CallAny(methods)); public TGivenRuleTypeConjunction DependOnAny() => DependOnAny(new ObjectProvider()); public TGivenRuleTypeConjunction DependOnAny(params IType[] types) => DependOnAny(new ObjectProvider(types)); public TGivenRuleTypeConjunction DependOnAny(params Type[] types) => DependOnAny(new SystemTypeObjectProvider(types)); - public TGivenRuleTypeConjunction DependOnAny(IObjectProvider types) => AddPredicate(ObjectPredicatesDefinition.DependOnAny(types)); + public TGivenRuleTypeConjunction DependOnAny(IObjectProvider types) => CreateNextElement(ObjectPredicatesDefinition.DependOnAny(types)); public TGivenRuleTypeConjunction DependOnAny(IEnumerable types) => DependOnAny(new ObjectProvider(types)); public TGivenRuleTypeConjunction DependOnAny(IEnumerable types) => DependOnAny(new SystemTypeObjectProvider(types)); public TGivenRuleTypeConjunction OnlyDependOn() => OnlyDependOn(new ObjectProvider()); public TGivenRuleTypeConjunction OnlyDependOn(params IType[] types) => OnlyDependOn(new ObjectProvider(types)); public TGivenRuleTypeConjunction OnlyDependOn(params Type[] types) => OnlyDependOn(new SystemTypeObjectProvider(types)); - public TGivenRuleTypeConjunction OnlyDependOn(IObjectProvider types) => AddPredicate(ObjectPredicatesDefinition.OnlyDependOn(types)); + public TGivenRuleTypeConjunction OnlyDependOn(IObjectProvider types) => CreateNextElement(ObjectPredicatesDefinition.OnlyDependOn(types)); public TGivenRuleTypeConjunction OnlyDependOn(IEnumerable types) => OnlyDependOn(new ObjectProvider(types)); public TGivenRuleTypeConjunction OnlyDependOn(IEnumerable types) => OnlyDependOn(new SystemTypeObjectProvider(types)); public TGivenRuleTypeConjunction HaveAnyAttributes() => HaveAnyAttributes(new ObjectProvider()); public TGivenRuleTypeConjunction HaveAnyAttributes(params Attribute[] attributes) => HaveAnyAttributes(new ObjectProvider(attributes)); public TGivenRuleTypeConjunction HaveAnyAttributes(params Type[] attributes) => HaveAnyAttributes(new SystemTypeObjectProvider(attributes)); - public TGivenRuleTypeConjunction HaveAnyAttributes(IObjectProvider attributes) => AddPredicate(ObjectPredicatesDefinition.HaveAnyAttributes(attributes)); + public TGivenRuleTypeConjunction HaveAnyAttributes(IObjectProvider attributes) => CreateNextElement(ObjectPredicatesDefinition.HaveAnyAttributes(attributes)); public TGivenRuleTypeConjunction HaveAnyAttributes(IEnumerable attributes) => HaveAnyAttributes(new ObjectProvider(attributes)); public TGivenRuleTypeConjunction HaveAnyAttributes(IEnumerable attributes) => HaveAnyAttributes(new SystemTypeObjectProvider(attributes)); public TGivenRuleTypeConjunction OnlyHaveAttributes() => OnlyHaveAttributes(new ObjectProvider()); public TGivenRuleTypeConjunction OnlyHaveAttributes(params Attribute[] attributes) => OnlyHaveAttributes(new ObjectProvider(attributes)); public TGivenRuleTypeConjunction OnlyHaveAttributes(params Type[] attributes) => OnlyHaveAttributes(new SystemTypeObjectProvider(attributes)); - public TGivenRuleTypeConjunction OnlyHaveAttributes(IObjectProvider attributes) => AddPredicate(ObjectPredicatesDefinition.OnlyHaveAttributes(attributes)); + public TGivenRuleTypeConjunction OnlyHaveAttributes(IObjectProvider attributes) => CreateNextElement(ObjectPredicatesDefinition.OnlyHaveAttributes(attributes)); public TGivenRuleTypeConjunction OnlyHaveAttributes(IEnumerable attributes) => OnlyHaveAttributes(new ObjectProvider(attributes)); public TGivenRuleTypeConjunction OnlyHaveAttributes(IEnumerable attributes) => OnlyHaveAttributes(new SystemTypeObjectProvider(attributes)); - public TGivenRuleTypeConjunction HaveAnyAttributesWithArguments(IEnumerable argumentValues) => AddPredicate(ObjectPredicatesDefinition.HaveAnyAttributesWithArguments(argumentValues)); - public TGivenRuleTypeConjunction HaveAnyAttributesWithArguments(object firstArgumentValue, params object[] moreArgumentValues) => AddPredicate(ObjectPredicatesDefinition.HaveAnyAttributesWithArguments(new[] { firstArgumentValue }.Concat(moreArgumentValues))); + public TGivenRuleTypeConjunction HaveAnyAttributesWithArguments(IEnumerable argumentValues) => CreateNextElement(ObjectPredicatesDefinition.HaveAnyAttributesWithArguments(argumentValues)); + public TGivenRuleTypeConjunction HaveAnyAttributesWithArguments(object firstArgumentValue, params object[] moreArgumentValues) => CreateNextElement(ObjectPredicatesDefinition.HaveAnyAttributesWithArguments(new[] { firstArgumentValue }.Concat(moreArgumentValues))); - public TGivenRuleTypeConjunction HaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues) => AddPredicate(ObjectPredicatesDefinition.HaveAttributeWithArguments(attribute.FullName, _ => attribute, argumentValues)); - public TGivenRuleTypeConjunction HaveAttributeWithArguments(Type attribute, IEnumerable argumentValues) => AddPredicate(ObjectPredicatesDefinition.HaveAttributeWithArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), argumentValues)); + public TGivenRuleTypeConjunction HaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues) => CreateNextElement(ObjectPredicatesDefinition.HaveAttributeWithArguments(attribute.FullName, _ => attribute, argumentValues)); + public TGivenRuleTypeConjunction HaveAttributeWithArguments(Type attribute, IEnumerable argumentValues) => CreateNextElement(ObjectPredicatesDefinition.HaveAttributeWithArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), argumentValues)); - public TGivenRuleTypeConjunction HaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments) => AddPredicate(ObjectPredicatesDefinition.HaveAnyAttributesWithNamedArguments(attributeArguments)); + public TGivenRuleTypeConjunction HaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectPredicatesDefinition.HaveAnyAttributesWithNamedArguments(attributeArguments)); public TGivenRuleTypeConjunction HaveAnyAttributesWithNamedArguments(params (string, object)[] attributeArguments) => HaveAnyAttributesWithNamedArguments((IEnumerable<(string, object)>)attributeArguments); - public TGivenRuleTypeConjunction HaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments) => AddPredicate(ObjectPredicatesDefinition.HaveAttributeWithNamedArguments(attribute.FullName, _ => attribute, attributeArguments)); + public TGivenRuleTypeConjunction HaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectPredicatesDefinition.HaveAttributeWithNamedArguments(attribute.FullName, _ => attribute, attributeArguments)); public TGivenRuleTypeConjunction HaveAttributeWithNamedArguments(Attribute attribute, params (string, object)[] attributeArguments) => HaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); - public TGivenRuleTypeConjunction HaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments) => AddPredicate(ObjectPredicatesDefinition.HaveAttributeWithNamedArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), attributeArguments)); + public TGivenRuleTypeConjunction HaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectPredicatesDefinition.HaveAttributeWithNamedArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), attributeArguments)); public TGivenRuleTypeConjunction HaveAttributeWithNamedArguments(Type attribute, params (string, object)[] attributeArguments) => HaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); - public TGivenRuleTypeConjunction HaveName(string name) => AddPredicate(ObjectPredicatesDefinition.HaveName(name)); - public TGivenRuleTypeConjunction HaveNameMatching(string pattern) => AddPredicate(ObjectPredicatesDefinition.HaveNameMatching(pattern)); - public TGivenRuleTypeConjunction HaveNameStartingWith(string pattern) => AddPredicate(ObjectPredicatesDefinition.HaveNameStartingWith(pattern)); - public TGivenRuleTypeConjunction HaveNameEndingWith(string pattern) => AddPredicate(ObjectPredicatesDefinition.HaveNameEndingWith(pattern)); - public TGivenRuleTypeConjunction HaveNameContaining(string pattern) => AddPredicate(ObjectPredicatesDefinition.HaveNameContaining(pattern)); - - public TGivenRuleTypeConjunction HaveFullName(string fullName) => AddPredicate(ObjectPredicatesDefinition.HaveFullName(fullName)); - public TGivenRuleTypeConjunction HaveFullNameMatching(string pattern) => AddPredicate(ObjectPredicatesDefinition.HaveFullNameMatching(pattern)); - public TGivenRuleTypeConjunction HaveFullNameStartingWith(string pattern) => AddPredicate(ObjectPredicatesDefinition.HaveFullNameStartingWith(pattern)); - public TGivenRuleTypeConjunction HaveFullNameEndingWith(string pattern) => AddPredicate(ObjectPredicatesDefinition.HaveFullNameEndingWith(pattern)); - public TGivenRuleTypeConjunction HaveFullNameContaining(string pattern) => AddPredicate(ObjectPredicatesDefinition.HaveFullNameContaining(pattern)); - - public TGivenRuleTypeConjunction HaveAssemblyQualifiedName(string assemblyQualifiedName) => AddPredicate(ObjectPredicatesDefinition.HaveAssemblyQualifiedName(assemblyQualifiedName)); - public TGivenRuleTypeConjunction HaveAssemblyQualifiedNameMatching(string pattern) => AddPredicate(ObjectPredicatesDefinition.HaveAssemblyQualifiedNameMatching(pattern)); - public TGivenRuleTypeConjunction HaveAssemblyQualifiedNameStartingWith(string pattern) => AddPredicate(ObjectPredicatesDefinition.HaveAssemblyQualifiedNameStartingWith(pattern)); - public TGivenRuleTypeConjunction HaveAssemblyQualifiedNameEndingWith(string pattern) => AddPredicate(ObjectPredicatesDefinition.HaveAssemblyQualifiedNameEndingWith(pattern)); - public TGivenRuleTypeConjunction HaveAssemblyQualifiedNameContaining(string pattern) => AddPredicate(ObjectPredicatesDefinition.HaveAssemblyQualifiedNameContaining(pattern)); - - public TGivenRuleTypeConjunction ArePrivate() => AddPredicate(ObjectPredicatesDefinition.ArePrivate()); - public TGivenRuleTypeConjunction ArePublic() => AddPredicate(ObjectPredicatesDefinition.ArePublic()); - public TGivenRuleTypeConjunction AreProtected() => AddPredicate(ObjectPredicatesDefinition.AreProtected()); - public TGivenRuleTypeConjunction AreInternal() => AddPredicate(ObjectPredicatesDefinition.AreInternal()); - public TGivenRuleTypeConjunction AreProtectedInternal() => AddPredicate(ObjectPredicatesDefinition.AreProtectedInternal()); - public TGivenRuleTypeConjunction ArePrivateProtected() => AddPredicate(ObjectPredicatesDefinition.ArePrivateProtected()); + public TGivenRuleTypeConjunction HaveName(string name) => CreateNextElement(ObjectPredicatesDefinition.HaveName(name)); + public TGivenRuleTypeConjunction HaveNameMatching(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveNameMatching(pattern)); + public TGivenRuleTypeConjunction HaveNameStartingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveNameStartingWith(pattern)); + public TGivenRuleTypeConjunction HaveNameEndingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveNameEndingWith(pattern)); + public TGivenRuleTypeConjunction HaveNameContaining(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveNameContaining(pattern)); + + public TGivenRuleTypeConjunction HaveFullName(string fullName) => CreateNextElement(ObjectPredicatesDefinition.HaveFullName(fullName)); + public TGivenRuleTypeConjunction HaveFullNameMatching(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveFullNameMatching(pattern)); + public TGivenRuleTypeConjunction HaveFullNameStartingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveFullNameStartingWith(pattern)); + public TGivenRuleTypeConjunction HaveFullNameEndingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveFullNameEndingWith(pattern)); + public TGivenRuleTypeConjunction HaveFullNameContaining(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveFullNameContaining(pattern)); + + public TGivenRuleTypeConjunction HaveAssemblyQualifiedName(string assemblyQualifiedName) => CreateNextElement(ObjectPredicatesDefinition.HaveAssemblyQualifiedName(assemblyQualifiedName)); + public TGivenRuleTypeConjunction HaveAssemblyQualifiedNameMatching(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveAssemblyQualifiedNameMatching(pattern)); + public TGivenRuleTypeConjunction HaveAssemblyQualifiedNameStartingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveAssemblyQualifiedNameStartingWith(pattern)); + public TGivenRuleTypeConjunction HaveAssemblyQualifiedNameEndingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveAssemblyQualifiedNameEndingWith(pattern)); + public TGivenRuleTypeConjunction HaveAssemblyQualifiedNameContaining(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveAssemblyQualifiedNameContaining(pattern)); + + public TGivenRuleTypeConjunction ArePrivate() => CreateNextElement(ObjectPredicatesDefinition.ArePrivate()); + public TGivenRuleTypeConjunction ArePublic() => CreateNextElement(ObjectPredicatesDefinition.ArePublic()); + public TGivenRuleTypeConjunction AreProtected() => CreateNextElement(ObjectPredicatesDefinition.AreProtected()); + public TGivenRuleTypeConjunction AreInternal() => CreateNextElement(ObjectPredicatesDefinition.AreInternal()); + public TGivenRuleTypeConjunction AreProtectedInternal() => CreateNextElement(ObjectPredicatesDefinition.AreProtectedInternal()); + public TGivenRuleTypeConjunction ArePrivateProtected() => CreateNextElement(ObjectPredicatesDefinition.ArePrivateProtected()); // Negations public TGivenRuleTypeConjunction AreNot(params ICanBeAnalyzed[] objects) => AreNot(new ObjectProvider(objects)); public TGivenRuleTypeConjunction AreNot(IEnumerable objects) => AreNot(new ObjectProvider(objects)); - public TGivenRuleTypeConjunction AreNot(IObjectProvider objects) => AddPredicate(ObjectPredicatesDefinition.AreNot(objects)); + public TGivenRuleTypeConjunction AreNot(IObjectProvider objects) => CreateNextElement(ObjectPredicatesDefinition.AreNot(objects)); public TGivenRuleTypeConjunction DoNotCallAny(params MethodMember[] methods) => DoNotCallAny(new ObjectProvider(methods)); public TGivenRuleTypeConjunction DoNotCallAny(IEnumerable methods) => DoNotCallAny(new ObjectProvider(methods)); - public TGivenRuleTypeConjunction DoNotCallAny(IObjectProvider methods) => AddPredicate(ObjectPredicatesDefinition.DoNotCallAny(methods)); + public TGivenRuleTypeConjunction DoNotCallAny(IObjectProvider methods) => CreateNextElement(ObjectPredicatesDefinition.DoNotCallAny(methods)); public TGivenRuleTypeConjunction DoNotDependOnAny() => DoNotDependOnAny(new ObjectProvider()); public TGivenRuleTypeConjunction DoNotDependOnAny(params IType[] types) => DoNotDependOnAny(new ObjectProvider(types)); public TGivenRuleTypeConjunction DoNotDependOnAny(params Type[] types) => DoNotDependOnAny(new SystemTypeObjectProvider(types)); - public TGivenRuleTypeConjunction DoNotDependOnAny(IObjectProvider types) => AddPredicate(ObjectPredicatesDefinition.DoNotDependOnAny(types)); + public TGivenRuleTypeConjunction DoNotDependOnAny(IObjectProvider types) => CreateNextElement(ObjectPredicatesDefinition.DoNotDependOnAny(types)); public TGivenRuleTypeConjunction DoNotDependOnAny(IEnumerable types) => DoNotDependOnAny(new ObjectProvider(types)); public TGivenRuleTypeConjunction DoNotDependOnAny(IEnumerable types) => DoNotDependOnAny(new SystemTypeObjectProvider(types)); public TGivenRuleTypeConjunction DoNotHaveAnyAttributes() => DoNotHaveAnyAttributes(new ObjectProvider()); public TGivenRuleTypeConjunction DoNotHaveAnyAttributes(params Attribute[] attributes) => DoNotHaveAnyAttributes(new ObjectProvider(attributes)); public TGivenRuleTypeConjunction DoNotHaveAnyAttributes(params Type[] attributes) => DoNotHaveAnyAttributes(new SystemTypeObjectProvider(attributes)); - public TGivenRuleTypeConjunction DoNotHaveAnyAttributes(IObjectProvider attributes) => AddPredicate(ObjectPredicatesDefinition.DoNotHaveAnyAttributes(attributes)); + public TGivenRuleTypeConjunction DoNotHaveAnyAttributes(IObjectProvider attributes) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAnyAttributes(attributes)); public TGivenRuleTypeConjunction DoNotHaveAnyAttributes(IEnumerable attributes) => DoNotHaveAnyAttributes(new ObjectProvider(attributes)); public TGivenRuleTypeConjunction DoNotHaveAnyAttributes(IEnumerable attributes) => DoNotHaveAnyAttributes(new SystemTypeObjectProvider(attributes)); - public TGivenRuleTypeConjunction DoNotHaveAnyAttributesWithArguments(IEnumerable argumentValues) => AddPredicate(ObjectPredicatesDefinition.DoNotHaveAnyAttributesWithArguments(argumentValues)); + public TGivenRuleTypeConjunction DoNotHaveAnyAttributesWithArguments(IEnumerable argumentValues) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAnyAttributesWithArguments(argumentValues)); - public TGivenRuleTypeConjunction DoNotHaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues) => AddPredicate(ObjectPredicatesDefinition.DoNotHaveAttributeWithArguments(attribute.FullName, _ => attribute, argumentValues)); - public TGivenRuleTypeConjunction DoNotHaveAttributeWithArguments(Type attribute, IEnumerable argumentValues) => AddPredicate(ObjectPredicatesDefinition.DoNotHaveAttributeWithArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), argumentValues)); + public TGivenRuleTypeConjunction DoNotHaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAttributeWithArguments(attribute.FullName, _ => attribute, argumentValues)); + public TGivenRuleTypeConjunction DoNotHaveAttributeWithArguments(Type attribute, IEnumerable argumentValues) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAttributeWithArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), argumentValues)); - public TGivenRuleTypeConjunction DoNotHaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments) => AddPredicate(ObjectPredicatesDefinition.DoNotHaveAnyAttributesWithNamedArguments(attributeArguments)); + public TGivenRuleTypeConjunction DoNotHaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAnyAttributesWithNamedArguments(attributeArguments)); public TGivenRuleTypeConjunction DoNotHaveAnyAttributesWithNamedArguments(params (string, object)[] attributeArguments) => DoNotHaveAnyAttributesWithNamedArguments((IEnumerable<(string, object)>)attributeArguments); - public TGivenRuleTypeConjunction DoNotHaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments) => AddPredicate(ObjectPredicatesDefinition.DoNotHaveAttributeWithNamedArguments(attribute.FullName, _ => attribute, attributeArguments)); + public TGivenRuleTypeConjunction DoNotHaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAttributeWithNamedArguments(attribute.FullName, _ => attribute, attributeArguments)); public TGivenRuleTypeConjunction DoNotHaveAttributeWithNamedArguments(Attribute attribute, params (string, object)[] attributeArguments) => DoNotHaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); - public TGivenRuleTypeConjunction DoNotHaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments) => AddPredicate(ObjectPredicatesDefinition.DoNotHaveAttributeWithNamedArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), attributeArguments)); + public TGivenRuleTypeConjunction DoNotHaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAttributeWithNamedArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), attributeArguments)); public TGivenRuleTypeConjunction DoNotHaveAttributeWithNamedArguments(Type attribute, params (string, object)[] attributeArguments) => DoNotHaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); - public TGivenRuleTypeConjunction DoNotHaveName(string name) => AddPredicate(ObjectPredicatesDefinition.DoNotHaveName(name)); - public TGivenRuleTypeConjunction DoNotHaveNameMatching(string pattern) => AddPredicate(ObjectPredicatesDefinition.DoNotHaveNameMatching(pattern)); - public TGivenRuleTypeConjunction DoNotHaveNameStartingWith(string pattern) => AddPredicate(ObjectPredicatesDefinition.DoNotHaveNameStartingWith(pattern)); - public TGivenRuleTypeConjunction DoNotHaveNameEndingWith(string pattern) => AddPredicate(ObjectPredicatesDefinition.DoNotHaveNameEndingWith(pattern)); - public TGivenRuleTypeConjunction DoNotHaveNameContaining(string pattern) => AddPredicate(ObjectPredicatesDefinition.DoNotHaveNameContaining(pattern)); - - public TGivenRuleTypeConjunction DoNotHaveFullName(string fullName) => AddPredicate(ObjectPredicatesDefinition.DoNotHaveFullName(fullName)); - public TGivenRuleTypeConjunction DoNotHaveFullNameMatching(string pattern) => AddPredicate(ObjectPredicatesDefinition.DoNotHaveFullNameMatching(pattern)); - public TGivenRuleTypeConjunction DoNotHaveFullNameStartingWith(string pattern) => AddPredicate(ObjectPredicatesDefinition.DoNotHaveFullNameStartingWith(pattern)); - public TGivenRuleTypeConjunction DoNotHaveFullNameEndingWith(string pattern) => AddPredicate(ObjectPredicatesDefinition.DoNotHaveFullNameEndingWith(pattern)); - public TGivenRuleTypeConjunction DoNotHaveFullNameContaining(string pattern) => AddPredicate(ObjectPredicatesDefinition.DoNotHaveFullNameContaining(pattern)); - - public TGivenRuleTypeConjunction DoNotHaveAssemblyQualifiedName(string assemblyQualifiedName) => AddPredicate(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedName(assemblyQualifiedName)); - public TGivenRuleTypeConjunction DoNotHaveAssemblyQualifiedNameMatching(string pattern) => AddPredicate(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedNameMatching(pattern)); - public TGivenRuleTypeConjunction DoNotHaveAssemblyQualifiedNameStartingWith(string pattern) => AddPredicate(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedNameStartingWith(pattern)); - public TGivenRuleTypeConjunction DoNotHaveAssemblyQualifiedNameEndingWith(string pattern) => AddPredicate(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedNameEndingWith(pattern)); - public TGivenRuleTypeConjunction DoNotHaveAssemblyQualifiedNameContaining(string pattern) => AddPredicate(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedNameContaining(pattern)); - - public TGivenRuleTypeConjunction AreNotPrivate() => AddPredicate(ObjectPredicatesDefinition.AreNotPrivate()); - public TGivenRuleTypeConjunction AreNotPublic() => AddPredicate(ObjectPredicatesDefinition.AreNotPublic()); - public TGivenRuleTypeConjunction AreNotProtected() => AddPredicate(ObjectPredicatesDefinition.AreNotProtected()); - public TGivenRuleTypeConjunction AreNotInternal() => AddPredicate(ObjectPredicatesDefinition.AreNotInternal()); - public TGivenRuleTypeConjunction AreNotProtectedInternal() => AddPredicate(ObjectPredicatesDefinition.AreNotProtectedInternal()); - public TGivenRuleTypeConjunction AreNotPrivateProtected() => AddPredicate(ObjectPredicatesDefinition.AreNotPrivateProtected()); + public TGivenRuleTypeConjunction DoNotHaveName(string name) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveName(name)); + public TGivenRuleTypeConjunction DoNotHaveNameMatching(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveNameMatching(pattern)); + public TGivenRuleTypeConjunction DoNotHaveNameStartingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveNameStartingWith(pattern)); + public TGivenRuleTypeConjunction DoNotHaveNameEndingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveNameEndingWith(pattern)); + public TGivenRuleTypeConjunction DoNotHaveNameContaining(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveNameContaining(pattern)); + + public TGivenRuleTypeConjunction DoNotHaveFullName(string fullName) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveFullName(fullName)); + public TGivenRuleTypeConjunction DoNotHaveFullNameMatching(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveFullNameMatching(pattern)); + public TGivenRuleTypeConjunction DoNotHaveFullNameStartingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveFullNameStartingWith(pattern)); + public TGivenRuleTypeConjunction DoNotHaveFullNameEndingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveFullNameEndingWith(pattern)); + public TGivenRuleTypeConjunction DoNotHaveFullNameContaining(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveFullNameContaining(pattern)); + + public TGivenRuleTypeConjunction DoNotHaveAssemblyQualifiedName(string assemblyQualifiedName) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedName(assemblyQualifiedName)); + public TGivenRuleTypeConjunction DoNotHaveAssemblyQualifiedNameMatching(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedNameMatching(pattern)); + public TGivenRuleTypeConjunction DoNotHaveAssemblyQualifiedNameStartingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedNameStartingWith(pattern)); + public TGivenRuleTypeConjunction DoNotHaveAssemblyQualifiedNameEndingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedNameEndingWith(pattern)); + public TGivenRuleTypeConjunction DoNotHaveAssemblyQualifiedNameContaining(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedNameContaining(pattern)); + + public TGivenRuleTypeConjunction AreNotPrivate() => CreateNextElement(ObjectPredicatesDefinition.AreNotPrivate()); + public TGivenRuleTypeConjunction AreNotPublic() => CreateNextElement(ObjectPredicatesDefinition.AreNotPublic()); + public TGivenRuleTypeConjunction AreNotProtected() => CreateNextElement(ObjectPredicatesDefinition.AreNotProtected()); + public TGivenRuleTypeConjunction AreNotInternal() => CreateNextElement(ObjectPredicatesDefinition.AreNotInternal()); + public TGivenRuleTypeConjunction AreNotProtectedInternal() => CreateNextElement(ObjectPredicatesDefinition.AreNotProtectedInternal()); + public TGivenRuleTypeConjunction AreNotPrivateProtected() => CreateNextElement(ObjectPredicatesDefinition.AreNotPrivateProtected()); // csharpier-ignore-end - private TGivenRuleTypeConjunction AddPredicate(IPredicate predicate) - { - _ruleCreator.AddPredicate(predicate); - return Create(_ruleCreator); - } + protected abstract TGivenRuleTypeConjunction CreateNextElement(IPredicate predicate); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/IObjectConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/IAddObjectCondition.cs similarity index 92% rename from ArchUnitNET/Fluent/Syntax/Elements/IObjectConditions.cs rename to ArchUnitNET/Fluent/Syntax/Elements/IAddObjectCondition.cs index a31b2f626..c1c39ac6b 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/IObjectConditions.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/IAddObjectCondition.cs @@ -2,11 +2,13 @@ using System.Collections.Generic; using ArchUnitNET.Domain; using ArchUnitNET.Fluent.Conditions; +using ArchUnitNET.Fluent.Syntax.Elements.Types; +using ArchUnitNET.Fluent.Syntax.Elements.Types.Attributes; using Attribute = ArchUnitNET.Domain.Attribute; namespace ArchUnitNET.Fluent.Syntax.Elements { - public interface IObjectConditions + public interface IAddObjectCondition where TRuleType : ICanBeAnalyzed { // csharpier-ignore-start @@ -27,6 +29,7 @@ public interface IObjectConditions TReturnType DependOnAny(IObjectProvider types); TReturnType DependOnAny(IEnumerable types); TReturnType DependOnAny(IEnumerable types); + ShouldRelateToTypesThat DependOnAnyTypesThat(); TReturnType FollowCustomCondition(ICondition condition); TReturnType FollowCustomCondition(Func condition, string description); @@ -38,6 +41,7 @@ public interface IObjectConditions TReturnType OnlyDependOn(IObjectProvider types); TReturnType OnlyDependOn(IEnumerable types); TReturnType OnlyDependOn(IEnumerable types); + ShouldRelateToTypesThat OnlyDependOnTypesThat(); TReturnType HaveAnyAttributes(); TReturnType HaveAnyAttributes(params Attribute[] attributes); @@ -45,6 +49,7 @@ public interface IObjectConditions TReturnType HaveAnyAttributes(IObjectProvider attributes); TReturnType HaveAnyAttributes(IEnumerable attributes); TReturnType HaveAnyAttributes(IEnumerable attributes); + ShouldRelateToAttributesThat HaveAnyAttributesThat(); TReturnType OnlyHaveAttributes(); TReturnType OnlyHaveAttributes(params Attribute[] attributes); @@ -52,6 +57,7 @@ public interface IObjectConditions TReturnType OnlyHaveAttributes(IObjectProvider attributes); TReturnType OnlyHaveAttributes(IEnumerable attributes); TReturnType OnlyHaveAttributes(IEnumerable attributes); + ShouldRelateToAttributesThat OnlyHaveAttributesThat(); TReturnType HaveAnyAttributesWithArguments(IEnumerable argumentValues); @@ -109,6 +115,7 @@ public interface IObjectConditions TReturnType NotDependOnAny(IObjectProvider types); TReturnType NotDependOnAny(IEnumerable types); TReturnType NotDependOnAny(IEnumerable types); + ShouldRelateToTypesThat NotDependOnAnyTypesThat(); TReturnType NotHaveAnyAttributes(); TReturnType NotHaveAnyAttributes(params Attribute[] attributes); @@ -116,6 +123,7 @@ public interface IObjectConditions TReturnType NotHaveAnyAttributes(IObjectProvider attributes); TReturnType NotHaveAnyAttributes(IEnumerable attributes); TReturnType NotHaveAnyAttributes(IEnumerable attributes); + ShouldRelateToAttributesThat NotHaveAnyAttributesThat(); TReturnType NotHaveAnyAttributesWithArguments(IEnumerable argumentValues); diff --git a/ArchUnitNET/Fluent/Syntax/Elements/IObjectPredicates.cs b/ArchUnitNET/Fluent/Syntax/Elements/IAddObjectPredicate.cs similarity index 99% rename from ArchUnitNET/Fluent/Syntax/Elements/IObjectPredicates.cs rename to ArchUnitNET/Fluent/Syntax/Elements/IAddObjectPredicate.cs index 9378c26b2..1fbbf2a11 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/IObjectPredicates.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/IAddObjectPredicate.cs @@ -6,7 +6,7 @@ namespace ArchUnitNET.Fluent.Syntax.Elements { - public interface IObjectPredicates + public interface IAddObjectPredicate where TRuleType : ICanBeAnalyzed { // csharpier-ignore-start diff --git a/ArchUnitNET/Fluent/Syntax/Elements/IComplexObjectConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/IComplexObjectConditions.cs deleted file mode 100644 index 94365eb0b..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/IComplexObjectConditions.cs +++ /dev/null @@ -1,25 +0,0 @@ -using ArchUnitNET.Domain; -using ArchUnitNET.Fluent.Syntax.Elements.Types; -using ArchUnitNET.Fluent.Syntax.Elements.Types.Attributes; - -namespace ArchUnitNET.Fluent.Syntax.Elements -{ - public interface IComplexObjectConditions - : IObjectConditions - where TRuleType : ICanBeAnalyzed - where TRuleTypeShouldConjunction : SyntaxElement - { - // csharpier-ignore-start - ShouldRelateToTypesThat DependOnAnyTypesThat(); - ShouldRelateToTypesThat OnlyDependOnTypesThat(); - - ShouldRelateToAttributesThat HaveAnyAttributesThat(); - ShouldRelateToAttributesThat OnlyHaveAttributesThat(); - - // Negations - - ShouldRelateToTypesThat NotDependOnAnyTypesThat(); - ShouldRelateToAttributesThat NotHaveAnyAttributesThat(); - // csharpier-ignore-end - } -} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/AddMemberCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/AddMemberCondition.cs new file mode 100644 index 000000000..65e9e3586 --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/AddMemberCondition.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Syntax.Elements.Types; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Members +{ + public abstract class AddMemberCondition + : AddObjectCondition, + IAddMemberCondition + where TRuleType : IMember + { + internal AddMemberCondition(IArchRuleCreator ruleCreator) + : base(ruleCreator) { } + + // csharpier-ignore-start + public TNextElement BeDeclaredIn(IType firstType, params IType[] moreTypes) => CreateNextElement(MemberConditionsDefinition.BeDeclaredIn(firstType, moreTypes)); + public TNextElement BeDeclaredIn(Type firstType, params Type[] moreTypes) => CreateNextElement(MemberConditionsDefinition.BeDeclaredIn(firstType, moreTypes)); + public TNextElement BeDeclaredIn(IObjectProvider types) => CreateNextElement(MemberConditionsDefinition.BeDeclaredIn(types)); + public TNextElement BeDeclaredIn(IEnumerable types) => CreateNextElement(MemberConditionsDefinition.BeDeclaredIn(types)); + public TNextElement BeDeclaredIn(IEnumerable types) => CreateNextElement(MemberConditionsDefinition.BeDeclaredIn(types)); + + public TNextElement BeStatic() => CreateNextElement(MemberConditionsDefinition.BeStatic()); + public TNextElement BeReadOnly() => CreateNextElement(MemberConditionsDefinition.BeReadOnly()); + public TNextElement BeImmutable() => CreateNextElement(MemberConditionsDefinition.BeImmutable()); + + //Relation Conditions + + public ShouldRelateToTypesThat BeDeclaredInTypesThat() => BeginComplexTypeCondition(MemberConditionsDefinition.BeDeclaredInTypesThat()); + + //Negations + + public TNextElement NotBeDeclaredIn(IType firstType, params IType[] moreTypes) => CreateNextElement(MemberConditionsDefinition.NotBeDeclaredIn(firstType, moreTypes)); + public TNextElement NotBeDeclaredIn(Type firstType, params Type[] moreTypes) => CreateNextElement(MemberConditionsDefinition.NotBeDeclaredIn(firstType, moreTypes)); + public TNextElement NotBeDeclaredIn(IObjectProvider types) => CreateNextElement(MemberConditionsDefinition.NotBeDeclaredIn(types)); + public TNextElement NotBeDeclaredIn(IEnumerable types) => CreateNextElement(MemberConditionsDefinition.NotBeDeclaredIn(types)); + public TNextElement NotBeDeclaredIn(IEnumerable types) => CreateNextElement(MemberConditionsDefinition.NotBeDeclaredIn(types)); + + public TNextElement NotBeStatic() => CreateNextElement(MemberConditionsDefinition.NotBeStatic()); + public TNextElement NotBeReadOnly() => CreateNextElement(MemberConditionsDefinition.NotBeReadOnly()); + public TNextElement NotBeImmutable() => CreateNextElement(MemberConditionsDefinition.NotBeImmutable()); + + //Relation Condition Negations + + public ShouldRelateToTypesThat NotBeDeclaredInTypesThat() => BeginComplexTypeCondition(MemberConditionsDefinition.NotBeDeclaredInTypesThat()); + // csharpier-ignore-end + } +} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/AddMemberPredicate.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/AddMemberPredicate.cs new file mode 100644 index 000000000..0e7fe2951 --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/AddMemberPredicate.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using ArchUnitNET.Domain; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Members +{ + public abstract class AddMemberPredicate + : AddObjectPredicate, + IAddMemberPredicate + where TRuleType : IMember + where TRelatedType : ICanBeAnalyzed + { + internal AddMemberPredicate(IArchRuleCreator ruleCreator) + : base(ruleCreator) { } + + // csharpier-ignore-start + public TNextElement AreDeclaredIn(IType firstType, params IType[] moreTypes) => CreateNextElement(MemberPredicatesDefinition.AreDeclaredIn(firstType, moreTypes)); + public TNextElement AreDeclaredIn(Type firstType, params Type[] moreTypes) => CreateNextElement(MemberPredicatesDefinition.AreDeclaredIn(firstType, moreTypes)); + public TNextElement AreDeclaredIn(IObjectProvider types) => CreateNextElement(MemberPredicatesDefinition.AreDeclaredIn(types)); + public TNextElement AreDeclaredIn(IEnumerable types) => CreateNextElement(MemberPredicatesDefinition.AreDeclaredIn(types)); + public TNextElement AreDeclaredIn(IEnumerable types) => CreateNextElement(MemberPredicatesDefinition.AreDeclaredIn(types)); + + public TNextElement AreStatic() => CreateNextElement(MemberPredicatesDefinition.AreStatic()); + public TNextElement AreReadOnly() => CreateNextElement(MemberPredicatesDefinition.AreReadOnly()); + public TNextElement AreImmutable() => CreateNextElement(MemberPredicatesDefinition.AreImmutable()); + + //Negations + + public TNextElement AreNotDeclaredIn(IType firstType, params IType[] moreTypes) => CreateNextElement(MemberPredicatesDefinition.AreNotDeclaredIn(firstType, moreTypes)); + public TNextElement AreNotDeclaredIn(Type firstType, params Type[] moreTypes) => CreateNextElement(MemberPredicatesDefinition.AreNotDeclaredIn(firstType, moreTypes)); + public TNextElement AreNotDeclaredIn(IObjectProvider types) => CreateNextElement(MemberPredicatesDefinition.AreNotDeclaredIn(types)); + public TNextElement AreNotDeclaredIn(IEnumerable types) => CreateNextElement(MemberPredicatesDefinition.AreNotDeclaredIn(types)); + public TNextElement AreNotDeclaredIn(IEnumerable types) => CreateNextElement(MemberPredicatesDefinition.AreNotDeclaredIn(types)); + + public TNextElement AreNotStatic() => CreateNextElement(MemberPredicatesDefinition.AreNotStatic()); + public TNextElement AreNotReadOnly() => CreateNextElement(MemberPredicatesDefinition.AreNotReadOnly()); + public TNextElement AreNotImmutable() => CreateNextElement(MemberPredicatesDefinition.AreNotImmutable()); + + // csharpier-ignore-end + } +} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/AddFieldMemberCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/AddFieldMemberCondition.cs new file mode 100644 index 000000000..6a38442a5 --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/AddFieldMemberCondition.cs @@ -0,0 +1,12 @@ +using ArchUnitNET.Domain; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Members.FieldMembers +{ + public abstract class AddFieldMemberCondition + : AddMemberCondition, + IAddFieldMemberCondition + { + internal AddFieldMemberCondition(IArchRuleCreator ruleCreator) + : base(ruleCreator) { } + } +} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/AddFieldMemberPredicate.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/AddFieldMemberPredicate.cs new file mode 100644 index 000000000..6d4e6b7b7 --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/AddFieldMemberPredicate.cs @@ -0,0 +1,13 @@ +using ArchUnitNET.Domain; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Members.FieldMembers +{ + public abstract class AddFieldMemberPredicate + : AddMemberPredicate, + IAddFieldMemberPredicate + where TRelatedType : ICanBeAnalyzed + { + internal AddFieldMemberPredicate(IArchRuleCreator ruleCreator) + : base(ruleCreator) { } + } +} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/FieldMembersShould.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/FieldMembersShould.cs index ac7b97fc6..d3c7d059f 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/FieldMembersShould.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/FieldMembersShould.cs @@ -1,12 +1,19 @@ using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Conditions; namespace ArchUnitNET.Fluent.Syntax.Elements.Members.FieldMembers { - public class FieldMembersShould - : MembersShould, - IComplexFieldMemberConditions + public sealed class FieldMembersShould : AddFieldMemberCondition { public FieldMembersShould(IArchRuleCreator ruleCreator) : base(ruleCreator) { } + + protected override FieldMembersShould CreateNextElement( + IOrderedCondition condition + ) + { + _ruleCreator.AddCondition(condition); + return new FieldMembersShould(_ruleCreator); + } } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/GivenFieldMembersThat.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/GivenFieldMembersThat.cs index bc34fb966..37734b517 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/GivenFieldMembersThat.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/GivenFieldMembersThat.cs @@ -1,12 +1,20 @@ using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Predicates; namespace ArchUnitNET.Fluent.Syntax.Elements.Members.FieldMembers { - public class GivenFieldMembersThat - : GivenMembersThat, - IFieldMemberPredicates + public sealed class GivenFieldMembersThat + : AddFieldMemberPredicate { public GivenFieldMembersThat(IArchRuleCreator ruleCreator) : base(ruleCreator) { } + + protected override GivenFieldMembersConjunction CreateNextElement( + IPredicate predicate + ) + { + _ruleCreator.AddPredicate(predicate); + return new GivenFieldMembersConjunction(_ruleCreator); + } } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IFieldMemberConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IAddFieldMemberCondition.cs similarity index 53% rename from ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IFieldMemberConditions.cs rename to ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IAddFieldMemberCondition.cs index 47735b44d..9f6fdd305 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IFieldMemberConditions.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IAddFieldMemberCondition.cs @@ -2,7 +2,7 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Members.FieldMembers { - public interface IFieldMemberConditions - : IMemberConditions + public interface IAddFieldMemberCondition + : IAddMemberCondition where TRuleType : ICanBeAnalyzed { } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IFieldMemberPredicates.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IAddFieldMemberPredicate.cs similarity index 50% rename from ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IFieldMemberPredicates.cs rename to ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IAddFieldMemberPredicate.cs index 2d8bcc864..ce9d562d1 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IFieldMemberPredicates.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IAddFieldMemberPredicate.cs @@ -2,7 +2,7 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Members.FieldMembers { - public interface IFieldMemberPredicates - : IMemberPredicates + public interface IAddFieldMemberPredicate + : IAddMemberPredicate where TRuleType : ICanBeAnalyzed { } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IComplexFieldMemberConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IComplexFieldMemberConditions.cs deleted file mode 100644 index ed4dfc996..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IComplexFieldMemberConditions.cs +++ /dev/null @@ -1,8 +0,0 @@ -using ArchUnitNET.Domain; - -namespace ArchUnitNET.Fluent.Syntax.Elements.Members.FieldMembers -{ - public interface IComplexFieldMemberConditions - : IComplexMemberConditions, - IFieldMemberConditions { } -} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/ShouldRelateToFieldMembersThat.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/ShouldRelateToFieldMembersThat.cs index 9d85e611d..5524aa789 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/ShouldRelateToFieldMembersThat.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/ShouldRelateToFieldMembersThat.cs @@ -1,14 +1,22 @@ using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Predicates; +using static ArchUnitNET.Fluent.Syntax.ConjunctionFactory; namespace ArchUnitNET.Fluent.Syntax.Elements.Members.FieldMembers { - public class ShouldRelateToFieldMembersThat - : ShouldRelateToMembersThat, - IFieldMemberPredicates - where TRuleTypeShouldConjunction : SyntaxElement + public sealed class ShouldRelateToFieldMembersThat + : AddFieldMemberPredicate where TRuleType : ICanBeAnalyzed { public ShouldRelateToFieldMembersThat(IArchRuleCreator ruleCreator) : base(ruleCreator) { } + + protected override TRuleTypeShouldConjunction CreateNextElement( + IPredicate predicate + ) + { + _ruleCreator.ContinueComplexCondition(predicate); + return Create(_ruleCreator); + } } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/GivenMembers.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/GivenMembers.cs index 5fc970ab7..1772a553d 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/GivenMembers.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/GivenMembers.cs @@ -2,12 +2,7 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Members { - public class GivenMembers - : GivenObjects< - GivenMembersThat, - MembersShould, - IMember - > + public class GivenMembers : GivenObjects { public GivenMembers(IArchRuleCreator ruleCreator) : base(ruleCreator) { } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/GivenMembersConjunction.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/GivenMembersConjunction.cs index f49e423cf..51235670c 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/GivenMembersConjunction.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/GivenMembersConjunction.cs @@ -4,8 +4,8 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Members { public class GivenMembersConjunction : GivenObjectsConjunction< - GivenMembersThat, - MembersShould, + GivenMembersThat, + MembersShould, GivenMembersConjunctionWithDescription, IMember > diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/GivenMembersConjunctionWithDescription.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/GivenMembersConjunctionWithDescription.cs index 95252d380..2a3f6ba40 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/GivenMembersConjunctionWithDescription.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/GivenMembersConjunctionWithDescription.cs @@ -3,11 +3,7 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Members { public class GivenMembersConjunctionWithDescription - : GivenObjectsConjunctionWithDescription< - GivenMembersThat, - MembersShould, - IMember - > + : GivenObjectsConjunctionWithDescription { public GivenMembersConjunctionWithDescription(IArchRuleCreator ruleCreator) : base(ruleCreator) { } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/GivenMembersThat.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/GivenMembersThat.cs index e88287bd3..fc63ebaf5 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/GivenMembersThat.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/GivenMembersThat.cs @@ -1,130 +1,22 @@ using System; using System.Collections.Generic; using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Predicates; using ArchUnitNET.Fluent.Syntax.Elements.Members.PropertyMembers; using static ArchUnitNET.Fluent.Syntax.ConjunctionFactory; namespace ArchUnitNET.Fluent.Syntax.Elements.Members { - public class GivenMembersThat - : GivenObjectsThat, - IMemberPredicates - where TRuleType : IMember + public sealed class GivenMembersThat + : AddMemberPredicate { - // ReSharper disable once MemberCanBeProtected.Global - public GivenMembersThat(IArchRuleCreator ruleCreator) + public GivenMembersThat(IArchRuleCreator ruleCreator) : base(ruleCreator) { } - public TGivenRuleTypeConjunction AreDeclaredIn(IType firstType, params IType[] moreTypes) + protected override GivenMembersConjunction CreateNextElement(IPredicate predicate) { - _ruleCreator.AddPredicate( - MemberPredicatesDefinition.AreDeclaredIn(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreDeclaredIn(Type firstType, params Type[] moreTypes) - { - _ruleCreator.AddPredicate( - MemberPredicatesDefinition.AreDeclaredIn(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreDeclaredIn(IObjectProvider types) - { - _ruleCreator.AddPredicate(MemberPredicatesDefinition.AreDeclaredIn(types)); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreDeclaredIn(IEnumerable types) - { - _ruleCreator.AddPredicate(MemberPredicatesDefinition.AreDeclaredIn(types)); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreDeclaredIn(IEnumerable types) - { - _ruleCreator.AddPredicate(MemberPredicatesDefinition.AreDeclaredIn(types)); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreStatic() - { - _ruleCreator.AddPredicate(MemberPredicatesDefinition.AreStatic()); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreReadOnly() - { - _ruleCreator.AddPredicate(MemberPredicatesDefinition.AreReadOnly()); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreImmutable() - { - _ruleCreator.AddPredicate(MemberPredicatesDefinition.AreImmutable()); - return Create(_ruleCreator); - } - - //Negations - - public TGivenRuleTypeConjunction AreNotDeclaredIn(IType firstType, params IType[] moreTypes) - { - _ruleCreator.AddPredicate( - MemberPredicatesDefinition.AreNotDeclaredIn(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreNotDeclaredIn(Type firstType, params Type[] moreTypes) - { - _ruleCreator.AddPredicate( - MemberPredicatesDefinition.AreNotDeclaredIn(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreNotDeclaredIn(IObjectProvider types) - { - _ruleCreator.AddPredicate( - MemberPredicatesDefinition.AreNotDeclaredIn(types) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreNotDeclaredIn(IEnumerable types) - { - _ruleCreator.AddPredicate( - MemberPredicatesDefinition.AreNotDeclaredIn(types) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreNotDeclaredIn(IEnumerable types) - { - _ruleCreator.AddPredicate( - MemberPredicatesDefinition.AreNotDeclaredIn(types) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreNotStatic() - { - _ruleCreator.AddPredicate(MemberPredicatesDefinition.AreNotStatic()); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreNotReadOnly() - { - _ruleCreator.AddPredicate(MemberPredicatesDefinition.AreNotReadOnly()); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreNotImmutable() - { - _ruleCreator.AddPredicate(MemberPredicatesDefinition.AreNotImmutable()); - return Create(_ruleCreator); + _ruleCreator.AddPredicate(predicate); + return new GivenMembersConjunction(_ruleCreator); } } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/IMemberConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/IAddMemberCondition.cs similarity index 75% rename from ArchUnitNET/Fluent/Syntax/Elements/Members/IMemberConditions.cs rename to ArchUnitNET/Fluent/Syntax/Elements/Members/IAddMemberCondition.cs index 370ec5df2..4674f5fcc 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/IMemberConditions.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/IAddMemberCondition.cs @@ -1,11 +1,12 @@ using System; using System.Collections.Generic; using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Syntax.Elements.Types; namespace ArchUnitNET.Fluent.Syntax.Elements.Members { - public interface IMemberConditions - : IObjectConditions + public interface IAddMemberCondition + : IAddObjectCondition where TRuleType : ICanBeAnalyzed { TReturnType BeDeclaredIn(IType firstType, params IType[] moreTypes); @@ -13,6 +14,8 @@ public interface IMemberConditions TReturnType BeDeclaredIn(IObjectProvider types); TReturnType BeDeclaredIn(IEnumerable types); TReturnType BeDeclaredIn(IEnumerable types); + ShouldRelateToTypesThat BeDeclaredInTypesThat(); + TReturnType BeStatic(); TReturnType BeImmutable(); @@ -22,6 +25,8 @@ public interface IMemberConditions TReturnType NotBeDeclaredIn(IObjectProvider types); TReturnType NotBeDeclaredIn(IEnumerable types); TReturnType NotBeDeclaredIn(IEnumerable types); + ShouldRelateToTypesThat NotBeDeclaredInTypesThat(); + TReturnType NotBeStatic(); TReturnType NotBeImmutable(); } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/IMemberPredicates.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/IAddMemberPredicate.cs similarity index 89% rename from ArchUnitNET/Fluent/Syntax/Elements/Members/IMemberPredicates.cs rename to ArchUnitNET/Fluent/Syntax/Elements/Members/IAddMemberPredicate.cs index c98f5bb7d..a69761a0a 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/IMemberPredicates.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/IAddMemberPredicate.cs @@ -4,8 +4,8 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Members { - public interface IMemberPredicates - : IObjectPredicates + public interface IAddMemberPredicate + : IAddObjectPredicate where TRuleType : ICanBeAnalyzed { TRuleTypeConjunction AreDeclaredIn(IType firstType, params IType[] moreTypes); diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/IComplexMemberConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/IComplexMemberConditions.cs deleted file mode 100644 index 269cafcdd..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/IComplexMemberConditions.cs +++ /dev/null @@ -1,26 +0,0 @@ -using ArchUnitNET.Domain; -using ArchUnitNET.Fluent.Syntax.Elements.Types; - -namespace ArchUnitNET.Fluent.Syntax.Elements.Members -{ - public interface IComplexMemberConditions - : IComplexObjectConditions, - IMemberConditions - where TRuleType : IMember - where TRuleTypeShouldConjunction : SyntaxElement - { - ShouldRelateToTypesThat< - TRuleTypeShouldConjunction, - IType, - TRuleType - > BeDeclaredInTypesThat(); - - //Negations - - ShouldRelateToTypesThat< - TRuleTypeShouldConjunction, - IType, - TRuleType - > NotBeDeclaredInTypesThat(); - } -} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/MembersShould.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/MembersShould.cs index 90c608ea6..350e2ac8e 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/MembersShould.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/MembersShould.cs @@ -1,159 +1,23 @@ using System; using System.Collections.Generic; using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Conditions; using ArchUnitNET.Fluent.Syntax.Elements.Types; using static ArchUnitNET.Fluent.Syntax.ConjunctionFactory; namespace ArchUnitNET.Fluent.Syntax.Elements.Members { - public class MembersShould - : ObjectsShould, - IComplexMemberConditions - where TRuleType : IMember - where TRuleTypeShouldConjunction : SyntaxElement + public sealed class MembersShould : AddMemberCondition { - // ReSharper disable once MemberCanBeProtected.Global - public MembersShould(IArchRuleCreator ruleCreator) + public MembersShould(IArchRuleCreator ruleCreator) : base(ruleCreator) { } - public TRuleTypeShouldConjunction BeDeclaredIn(IType firstType, params IType[] moreTypes) + protected override MembersShouldConjunction CreateNextElement( + IOrderedCondition condition + ) { - _ruleCreator.AddCondition( - MemberConditionsDefinition.BeDeclaredIn(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction BeDeclaredIn(Type firstType, params Type[] moreTypes) - { - _ruleCreator.AddCondition( - MemberConditionsDefinition.BeDeclaredIn(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction BeDeclaredIn(IObjectProvider types) - { - _ruleCreator.AddCondition(MemberConditionsDefinition.BeDeclaredIn(types)); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction BeDeclaredIn(IEnumerable types) - { - _ruleCreator.AddCondition(MemberConditionsDefinition.BeDeclaredIn(types)); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction BeDeclaredIn(IEnumerable types) - { - _ruleCreator.AddCondition(MemberConditionsDefinition.BeDeclaredIn(types)); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction BeStatic() - { - _ruleCreator.AddCondition(MemberConditionsDefinition.BeStatic()); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction BeReadOnly() - { - _ruleCreator.AddCondition(MemberConditionsDefinition.BeReadOnly()); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction BeImmutable() - { - _ruleCreator.AddCondition(MemberConditionsDefinition.BeImmutable()); - return Create(_ruleCreator); - } - - //Relation Conditions - - public ShouldRelateToTypesThat< - TRuleTypeShouldConjunction, - IType, - TRuleType - > BeDeclaredInTypesThat() - { - _ruleCreator.BeginComplexCondition( - ArchRuleDefinition.Types(true), - MemberConditionsDefinition.BeDeclaredInTypesThat() - ); - return new ShouldRelateToTypesThat( - _ruleCreator - ); - } - - //Negations - - public TRuleTypeShouldConjunction NotBeDeclaredIn(IType firstType, params IType[] moreTypes) - { - _ruleCreator.AddCondition( - MemberConditionsDefinition.NotBeDeclaredIn(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotBeDeclaredIn(Type firstType, params Type[] moreTypes) - { - _ruleCreator.AddCondition( - MemberConditionsDefinition.NotBeDeclaredIn(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotBeDeclaredIn(IObjectProvider types) - { - _ruleCreator.AddCondition(MemberConditionsDefinition.NotBeDeclaredIn(types)); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotBeDeclaredIn(IEnumerable types) - { - _ruleCreator.AddCondition(MemberConditionsDefinition.NotBeDeclaredIn(types)); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotBeDeclaredIn(IEnumerable types) - { - _ruleCreator.AddCondition(MemberConditionsDefinition.NotBeDeclaredIn(types)); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotBeStatic() - { - _ruleCreator.AddCondition(MemberConditionsDefinition.NotBeStatic()); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotBeReadOnly() - { - _ruleCreator.AddCondition(MemberConditionsDefinition.NotBeReadOnly()); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotBeImmutable() - { - _ruleCreator.AddCondition(MemberConditionsDefinition.NotBeImmutable()); - return Create(_ruleCreator); - } - - //Relation Condition Negations - - public ShouldRelateToTypesThat< - TRuleTypeShouldConjunction, - IType, - TRuleType - > NotBeDeclaredInTypesThat() - { - _ruleCreator.BeginComplexCondition( - ArchRuleDefinition.Types(true), - MemberConditionsDefinition.NotBeDeclaredInTypesThat() - ); - return new ShouldRelateToTypesThat( - _ruleCreator - ); + _ruleCreator.AddCondition(condition); + return new MembersShouldConjunction(_ruleCreator); } } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/MembersShouldConjunction.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/MembersShouldConjunction.cs index 986951ef4..74d0bbf82 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/MembersShouldConjunction.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/MembersShouldConjunction.cs @@ -3,11 +3,7 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Members { public class MembersShouldConjunction - : ObjectsShouldConjunction< - MembersShould, - MembersShouldConjunctionWithDescription, - IMember - > + : ObjectsShouldConjunction { public MembersShouldConjunction(IArchRuleCreator ruleCreator) : base(ruleCreator) { } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/MembersShouldConjunctionWithDescription.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/MembersShouldConjunctionWithDescription.cs index 6b25021b3..2ea0b51b4 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/MembersShouldConjunctionWithDescription.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/MembersShouldConjunctionWithDescription.cs @@ -3,10 +3,7 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Members { public class MembersShouldConjunctionWithDescription - : ObjectsShouldConjunctionWithDescription< - MembersShould, - IMember - > + : ObjectsShouldConjunctionWithDescription { public MembersShouldConjunctionWithDescription(IArchRuleCreator ruleCreator) : base(ruleCreator) { } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/AddMethodMemberCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/AddMethodMemberCondition.cs new file mode 100644 index 000000000..c2a001207 --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/AddMethodMemberCondition.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Conditions; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Members.MethodMembers +{ + public abstract class AddMethodMemberCondition + : AddMemberCondition, + IAddMethodMemberCondition + { + internal AddMethodMemberCondition(IArchRuleCreator ruleCreator) + : base(ruleCreator) { } + + // csharpier-ignore-start + public TNextElement BeConstructor() => CreateNextElement(MethodMemberConditionsDefinition.BeConstructor()); + + 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(IObjectProvider types) => CreateNextElement(MethodMemberConditionsDefinition.BeCalledBy(types)); + public TNextElement BeCalledBy(IEnumerable types) => CreateNextElement(MethodMemberConditionsDefinition.BeCalledBy(types)); + public TNextElement BeCalledBy(IEnumerable types) => CreateNextElement(MethodMemberConditionsDefinition.BeCalledBy(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(IObjectProvider types) => CreateNextElement(MethodMemberConditionsDefinition.HaveDependencyInMethodBodyTo(types)); + public TNextElement HaveDependencyInMethodBodyTo(IEnumerable types) => CreateNextElement(MethodMemberConditionsDefinition.HaveDependencyInMethodBodyTo(types)); + public TNextElement HaveDependencyInMethodBodyTo(IEnumerable types) => CreateNextElement(MethodMemberConditionsDefinition.HaveDependencyInMethodBodyTo(types)); + + public TNextElement HaveReturnType(IType firstType, params IType[] moreTypes) => CreateNextElement(MethodMemberConditionsDefinition.HaveReturnType(firstType, moreTypes)); + public TNextElement HaveReturnType(IEnumerable types) => CreateNextElement(MethodMemberConditionsDefinition.HaveReturnType(types)); + public TNextElement HaveReturnType(IObjectProvider types) => CreateNextElement(MethodMemberConditionsDefinition.HaveReturnType(types)); + public TNextElement HaveReturnType(Type type, params Type[] moreTypes) => CreateNextElement(MethodMemberConditionsDefinition.HaveReturnType(type, moreTypes)); + public TNextElement HaveReturnType(IEnumerable types) => CreateNextElement(MethodMemberConditionsDefinition.HaveReturnType(types)); + + public ShouldRelateToMethodMembersThat BeMethodMembersThat() => BeginComplexMethodMemberCondition(MethodMemberConditionsDefinition.BeMethodMembersThat()); + + //Negations + + public TNextElement BeNoConstructor() => CreateNextElement(MethodMemberConditionsDefinition.BeNoConstructor()); + + 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(IObjectProvider types) => CreateNextElement(MethodMemberConditionsDefinition.NotBeCalledBy(types)); + public TNextElement NotBeCalledBy(IEnumerable types) => CreateNextElement(MethodMemberConditionsDefinition.NotBeCalledBy(types)); + public TNextElement NotBeCalledBy(IEnumerable types) => CreateNextElement(MethodMemberConditionsDefinition.NotBeCalledBy(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(IObjectProvider types) => CreateNextElement(MethodMemberConditionsDefinition.NotHaveDependencyInMethodBodyTo(types)); + public TNextElement NotHaveDependencyInMethodBodyTo(IEnumerable types) => CreateNextElement(MethodMemberConditionsDefinition.NotHaveDependencyInMethodBodyTo(types)); + public TNextElement NotHaveDependencyInMethodBodyTo(IEnumerable types) => CreateNextElement(MethodMemberConditionsDefinition.NotHaveDependencyInMethodBodyTo(types)); + + public TNextElement NotHaveReturnType(IType firstType, params IType[] moreTypes) => CreateNextElement(MethodMemberConditionsDefinition.NotHaveReturnType(firstType, moreTypes)); + public TNextElement NotHaveReturnType(IEnumerable types) => CreateNextElement(MethodMemberConditionsDefinition.NotHaveReturnType(types)); + public TNextElement NotHaveReturnType(IObjectProvider types) => CreateNextElement(MethodMemberConditionsDefinition.NotHaveReturnType(types)); + public TNextElement NotHaveReturnType(Type type, params Type[] moreTypes) => CreateNextElement(MethodMemberConditionsDefinition.NotHaveReturnType(type, moreTypes)); + public TNextElement NotHaveReturnType(IEnumerable types) => CreateNextElement(MethodMemberConditionsDefinition.NotHaveReturnType(types)); + // csharpier-ignore-end + } +} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/AddMethodMemberPredicate.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/AddMethodMemberPredicate.cs new file mode 100644 index 000000000..c36993def --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/AddMethodMemberPredicate.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using ArchUnitNET.Domain; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Members.MethodMembers +{ + public abstract class AddMethodMemberPredicate + : AddMemberPredicate, + IAddMethodMemberPredicate + where TRelatedType : ICanBeAnalyzed + { + internal AddMethodMemberPredicate(IArchRuleCreator ruleCreator) + : base(ruleCreator) { } + + // csharpier-ignore-start + public TNextElement AreConstructors() => CreateNextElement(MethodMemberPredicatesDefinition.AreConstructors()); + + public TNextElement AreVirtual() => CreateNextElement(MethodMemberPredicatesDefinition.AreVirtual()); + + public TNextElement AreCalledBy(IType firstType, params IType[] moreTypes) => CreateNextElement(MethodMemberPredicatesDefinition.AreCalledBy(firstType, moreTypes)); + public TNextElement AreCalledBy(Type type, params Type[] moreTypes) => CreateNextElement(MethodMemberPredicatesDefinition.AreCalledBy(type, moreTypes)); + public TNextElement AreCalledBy(IObjectProvider types) => CreateNextElement(MethodMemberPredicatesDefinition.AreCalledBy(types)); + public TNextElement AreCalledBy(IEnumerable types) => CreateNextElement(MethodMemberPredicatesDefinition.AreCalledBy(types)); + public TNextElement AreCalledBy(IEnumerable types) => CreateNextElement(MethodMemberPredicatesDefinition.AreCalledBy(types)); + + public TNextElement HaveDependencyInMethodBodyTo(IType firstType, params IType[] moreTypes) => CreateNextElement(MethodMemberPredicatesDefinition.HaveDependencyInMethodBodyTo(firstType, moreTypes)); + public TNextElement HaveDependencyInMethodBodyTo(Type type, params Type[] moreTypes) => CreateNextElement(MethodMemberPredicatesDefinition.HaveDependencyInMethodBodyTo(type, moreTypes)); + public TNextElement HaveDependencyInMethodBodyTo(IObjectProvider types) => CreateNextElement(MethodMemberPredicatesDefinition.HaveDependencyInMethodBodyTo(types)); + public TNextElement HaveDependencyInMethodBodyTo(IEnumerable types) => CreateNextElement(MethodMemberPredicatesDefinition.HaveDependencyInMethodBodyTo(types)); + public TNextElement HaveDependencyInMethodBodyTo(IEnumerable types) => CreateNextElement(MethodMemberPredicatesDefinition.HaveDependencyInMethodBodyTo(types)); + + public TNextElement HaveReturnType(IType firstType, params IType[] moreTypes) => CreateNextElement(MethodMemberPredicatesDefinition.HaveReturnType(firstType, moreTypes)); + public TNextElement HaveReturnType(IEnumerable types) => CreateNextElement(MethodMemberPredicatesDefinition.HaveReturnType(types)); + public TNextElement HaveReturnType(IObjectProvider types) => CreateNextElement(MethodMemberPredicatesDefinition.HaveReturnType(types)); + public TNextElement HaveReturnType(Type type, params Type[] moreTypes) => CreateNextElement(MethodMemberPredicatesDefinition.HaveReturnType(type, moreTypes)); + public TNextElement HaveReturnType(IEnumerable types) => CreateNextElement(MethodMemberPredicatesDefinition.HaveReturnType(types)); + + //Negations + + public TNextElement AreNoConstructors() => CreateNextElement(MethodMemberPredicatesDefinition.AreNoConstructors()); + + public TNextElement AreNotVirtual() => CreateNextElement(MethodMemberPredicatesDefinition.AreNotVirtual()); + + public TNextElement AreNotCalledBy(IType firstType, params IType[] moreTypes) => CreateNextElement(MethodMemberPredicatesDefinition.AreNotCalledBy(firstType, moreTypes)); + public TNextElement AreNotCalledBy(Type type, params Type[] moreTypes) => CreateNextElement(MethodMemberPredicatesDefinition.AreNotCalledBy(type, moreTypes)); + public TNextElement AreNotCalledBy(IObjectProvider types) => CreateNextElement(MethodMemberPredicatesDefinition.AreNotCalledBy(types)); + public TNextElement AreNotCalledBy(IEnumerable types) => CreateNextElement(MethodMemberPredicatesDefinition.AreNotCalledBy(types)); + public TNextElement AreNotCalledBy(IEnumerable types) => CreateNextElement(MethodMemberPredicatesDefinition.AreNotCalledBy(types)); + + public TNextElement DoNotHaveDependencyInMethodBodyTo(IType firstType, params IType[] moreTypes) => CreateNextElement(MethodMemberPredicatesDefinition.DoNotHaveDependencyInMethodBodyTo(firstType, moreTypes)); + public TNextElement DoNotHaveDependencyInMethodBodyTo(Type type, params Type[] moreTypes) => CreateNextElement(MethodMemberPredicatesDefinition.DoNotHaveDependencyInMethodBodyTo(type, moreTypes)); + public TNextElement DoNotHaveDependencyInMethodBodyTo(IObjectProvider types) => CreateNextElement(MethodMemberPredicatesDefinition.DoNotHaveDependencyInMethodBodyTo(types)); + public TNextElement DoNotHaveDependencyInMethodBodyTo(IEnumerable types) => CreateNextElement(MethodMemberPredicatesDefinition.DoNotHaveDependencyInMethodBodyTo(types)); + public TNextElement DoNotHaveDependencyInMethodBodyTo(IEnumerable types) => CreateNextElement(MethodMemberPredicatesDefinition.DoNotHaveDependencyInMethodBodyTo(types)); + + public TNextElement DoNotHaveReturnType(IType firstType, params IType[] moreTypes) => CreateNextElement(MethodMemberPredicatesDefinition.DoNotHaveReturnType(firstType, moreTypes)); + public TNextElement DoNotHaveReturnType(IEnumerable types) => CreateNextElement(MethodMemberPredicatesDefinition.DoNotHaveReturnType(types)); + public TNextElement DoNotHaveReturnType(IObjectProvider types) => CreateNextElement(MethodMemberPredicatesDefinition.DoNotHaveReturnType(types)); + public TNextElement DoNotHaveReturnType(Type type, params Type[] moreTypes) => CreateNextElement(MethodMemberPredicatesDefinition.DoNotHaveReturnType(type, moreTypes)); + public TNextElement DoNotHaveReturnType(IEnumerable types) => CreateNextElement(MethodMemberPredicatesDefinition.DoNotHaveReturnType(types)); + + // csharpier-ignore-end + } +} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/GivenMethodMembersThat.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/GivenMethodMembersThat.cs index fa588e565..9197674b4 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/GivenMethodMembersThat.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/GivenMethodMembersThat.cs @@ -1,287 +1,19 @@ -using System; -using System.Collections.Generic; -using ArchUnitNET.Domain; +using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Predicates; namespace ArchUnitNET.Fluent.Syntax.Elements.Members.MethodMembers { - public class GivenMethodMembersThat - : GivenMembersThat, - IMethodMemberPredicates + public sealed class GivenMethodMembersThat + : AddMethodMemberPredicate { public GivenMethodMembersThat(IArchRuleCreator ruleCreator) : base(ruleCreator) { } - public GivenMethodMembersConjunction AreConstructors() - { - _ruleCreator.AddPredicate(MethodMemberPredicatesDefinition.AreConstructors()); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction AreVirtual() - { - _ruleCreator.AddPredicate(MethodMemberPredicatesDefinition.AreVirtual()); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction AreCalledBy(IType firstType, params IType[] moreTypes) - { - _ruleCreator.AddPredicate( - MethodMemberPredicatesDefinition.AreCalledBy(firstType, moreTypes) - ); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction AreCalledBy(Type type, params Type[] moreTypes) - { - _ruleCreator.AddPredicate( - MethodMemberPredicatesDefinition.AreCalledBy(type, moreTypes) - ); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction AreCalledBy(IObjectProvider types) - { - _ruleCreator.AddPredicate(MethodMemberPredicatesDefinition.AreCalledBy(types)); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction AreCalledBy(IEnumerable types) - { - _ruleCreator.AddPredicate(MethodMemberPredicatesDefinition.AreCalledBy(types)); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction AreCalledBy(IEnumerable types) - { - _ruleCreator.AddPredicate(MethodMemberPredicatesDefinition.AreCalledBy(types)); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction HaveDependencyInMethodBodyTo( - IType firstType, - params IType[] moreTypes - ) - { - _ruleCreator.AddPredicate( - MethodMemberPredicatesDefinition.HaveDependencyInMethodBodyTo(firstType, moreTypes) - ); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction HaveDependencyInMethodBodyTo( - Type type, - params Type[] moreTypes - ) - { - _ruleCreator.AddPredicate( - MethodMemberPredicatesDefinition.HaveDependencyInMethodBodyTo(type, moreTypes) - ); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction HaveDependencyInMethodBodyTo( - IObjectProvider types - ) - { - _ruleCreator.AddPredicate( - MethodMemberPredicatesDefinition.HaveDependencyInMethodBodyTo(types) - ); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction HaveDependencyInMethodBodyTo(IEnumerable types) - { - _ruleCreator.AddPredicate( - MethodMemberPredicatesDefinition.HaveDependencyInMethodBodyTo(types) - ); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction HaveDependencyInMethodBodyTo(IEnumerable types) - { - _ruleCreator.AddPredicate( - MethodMemberPredicatesDefinition.HaveDependencyInMethodBodyTo(types) - ); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction HaveReturnType( - IType firstType, - params IType[] moreTypes + protected override GivenMethodMembersConjunction CreateNextElement( + IPredicate predicate ) { - _ruleCreator.AddPredicate( - MethodMemberPredicatesDefinition.HaveReturnType(firstType, moreTypes) - ); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction HaveReturnType(IEnumerable types) - { - _ruleCreator.AddPredicate(MethodMemberPredicatesDefinition.HaveReturnType(types)); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction HaveReturnType(IObjectProvider types) - { - _ruleCreator.AddPredicate(MethodMemberPredicatesDefinition.HaveReturnType(types)); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction HaveReturnType(Type type, params Type[] moreTypes) - { - _ruleCreator.AddPredicate( - MethodMemberPredicatesDefinition.HaveReturnType(type, moreTypes) - ); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction HaveReturnType(IEnumerable types) - { - _ruleCreator.AddPredicate(MethodMemberPredicatesDefinition.HaveReturnType(types)); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - //Negations - - public GivenMethodMembersConjunction AreNoConstructors() - { - _ruleCreator.AddPredicate(MethodMemberPredicatesDefinition.AreNoConstructors()); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction AreNotVirtual() - { - _ruleCreator.AddPredicate(MethodMemberPredicatesDefinition.AreNotVirtual()); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction AreNotCalledBy( - IType firstType, - params IType[] moreTypes - ) - { - _ruleCreator.AddPredicate( - MethodMemberPredicatesDefinition.AreNotCalledBy(firstType, moreTypes) - ); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction AreNotCalledBy(Type type, params Type[] moreTypes) - { - _ruleCreator.AddPredicate( - MethodMemberPredicatesDefinition.AreNotCalledBy(type, moreTypes) - ); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction AreNotCalledBy(IObjectProvider types) - { - _ruleCreator.AddPredicate(MethodMemberPredicatesDefinition.AreNotCalledBy(types)); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction AreNotCalledBy(IEnumerable types) - { - _ruleCreator.AddPredicate(MethodMemberPredicatesDefinition.AreNotCalledBy(types)); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction AreNotCalledBy(IEnumerable types) - { - _ruleCreator.AddPredicate(MethodMemberPredicatesDefinition.AreNotCalledBy(types)); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction DoNotHaveDependencyInMethodBodyTo( - IType firstType, - params IType[] moreTypes - ) - { - _ruleCreator.AddPredicate( - MethodMemberPredicatesDefinition.DoNotHaveDependencyInMethodBodyTo( - firstType, - moreTypes - ) - ); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction DoNotHaveDependencyInMethodBodyTo( - Type type, - params Type[] moreTypes - ) - { - _ruleCreator.AddPredicate( - MethodMemberPredicatesDefinition.DoNotHaveDependencyInMethodBodyTo(type, moreTypes) - ); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction DoNotHaveDependencyInMethodBodyTo( - IObjectProvider types - ) - { - _ruleCreator.AddPredicate( - MethodMemberPredicatesDefinition.DoNotHaveDependencyInMethodBodyTo(types) - ); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction DoNotHaveDependencyInMethodBodyTo( - IEnumerable types - ) - { - _ruleCreator.AddPredicate( - MethodMemberPredicatesDefinition.DoNotHaveDependencyInMethodBodyTo(types) - ); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction DoNotHaveDependencyInMethodBodyTo( - IEnumerable types - ) - { - _ruleCreator.AddPredicate( - MethodMemberPredicatesDefinition.DoNotHaveDependencyInMethodBodyTo(types) - ); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction DoNotHaveReturnType( - IType firstType, - params IType[] moreTypes - ) - { - _ruleCreator.AddPredicate( - MethodMemberPredicatesDefinition.DoNotHaveReturnType(firstType, moreTypes) - ); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction DoNotHaveReturnType(IEnumerable types) - { - _ruleCreator.AddPredicate(MethodMemberPredicatesDefinition.DoNotHaveReturnType(types)); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction DoNotHaveReturnType(IObjectProvider types) - { - _ruleCreator.AddPredicate(MethodMemberPredicatesDefinition.DoNotHaveReturnType(types)); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction DoNotHaveReturnType(Type type, params Type[] moreTypes) - { - _ruleCreator.AddPredicate( - MethodMemberPredicatesDefinition.DoNotHaveReturnType(type, moreTypes) - ); - return new GivenMethodMembersConjunction(_ruleCreator); - } - - public GivenMethodMembersConjunction DoNotHaveReturnType(IEnumerable types) - { - _ruleCreator.AddPredicate(MethodMemberPredicatesDefinition.DoNotHaveReturnType(types)); + _ruleCreator.AddPredicate(predicate); return new GivenMethodMembersConjunction(_ruleCreator); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IMethodMemberConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IAddMethodMemberCondition.cs similarity index 95% rename from ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IMethodMemberConditions.cs rename to ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IAddMethodMemberCondition.cs index c95b97342..0dd1894f3 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IMethodMemberConditions.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IAddMethodMemberCondition.cs @@ -4,8 +4,8 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Members.MethodMembers { - public interface IMethodMemberConditions - : IMemberConditions + public interface IAddMethodMemberCondition + : IAddMemberCondition where TRuleType : ICanBeAnalyzed { TReturnType BeConstructor(); diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IMethodMemberPredicates.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IAddMethodMemberPredicate.cs similarity index 86% rename from ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IMethodMemberPredicates.cs rename to ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IAddMethodMemberPredicate.cs index 434fb7542..f39ed4cca 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IMethodMemberPredicates.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IAddMethodMemberPredicate.cs @@ -4,8 +4,8 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Members.MethodMembers { - public interface IMethodMemberPredicates - : IMemberPredicates + public interface IAddMethodMemberPredicate + : IAddMemberPredicate where TRuleType : ICanBeAnalyzed { TRuleTypeConjunction AreConstructors(); @@ -17,10 +17,7 @@ public interface IMethodMemberPredicates TRuleTypeConjunction AreCalledBy(IEnumerable types); TRuleTypeConjunction AreCalledBy(IEnumerable types); - TRuleTypeConjunction HaveDependencyInMethodBodyTo( - IType firstType, - params IType[] moreTypes - ); + TRuleTypeConjunction HaveDependencyInMethodBodyTo(IType firstType, params IType[] moreTypes); TRuleTypeConjunction HaveDependencyInMethodBodyTo(Type type, params Type[] moreTypes); TRuleTypeConjunction HaveDependencyInMethodBodyTo(IObjectProvider types); TRuleTypeConjunction HaveDependencyInMethodBodyTo(IEnumerable types); @@ -43,10 +40,7 @@ params IType[] moreTypes TRuleTypeConjunction AreNotCalledBy(IEnumerable types); TRuleTypeConjunction AreNotCalledBy(IEnumerable types); - TRuleTypeConjunction DoNotHaveDependencyInMethodBodyTo( - IType firstType, - params IType[] moreTypes - ); + TRuleTypeConjunction DoNotHaveDependencyInMethodBodyTo(IType firstType, params IType[] moreTypes); TRuleTypeConjunction DoNotHaveDependencyInMethodBodyTo(Type type, params Type[] moreTypes); TRuleTypeConjunction DoNotHaveDependencyInMethodBodyTo(IObjectProvider types); TRuleTypeConjunction DoNotHaveDependencyInMethodBodyTo(IEnumerable types); diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IComplexMethodMemberConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IComplexMethodMemberConditions.cs deleted file mode 100644 index 80a27a940..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IComplexMethodMemberConditions.cs +++ /dev/null @@ -1,8 +0,0 @@ -using ArchUnitNET.Domain; - -namespace ArchUnitNET.Fluent.Syntax.Elements.Members.MethodMembers -{ - public interface IComplexMethodMemberConditions - : IComplexMemberConditions, - IMethodMemberConditions { } -} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/MethodMembersShould.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/MethodMembersShould.cs index 30e0b3ef0..b009b8d3d 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/MethodMembersShould.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/MethodMembersShould.cs @@ -1,300 +1,20 @@ using System; using System.Collections.Generic; using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Conditions; namespace ArchUnitNET.Fluent.Syntax.Elements.Members.MethodMembers { - public class MethodMembersShould - : MembersShould, - IComplexMethodMemberConditions + public class MethodMembersShould : AddMethodMemberCondition { public MethodMembersShould(IArchRuleCreator ruleCreator) : base(ruleCreator) { } - public ShouldRelateToMethodMembersThat< - MethodMembersShouldConjunction, - MethodMember - > BeMethodMembersThat() - { - _ruleCreator.BeginComplexCondition( - ArchRuleDefinition.MethodMembers(), - MethodMemberConditionsDefinition.BeMethodMembersThat() - ); - return new ShouldRelateToMethodMembersThat< - MethodMembersShouldConjunction, - MethodMember - >(_ruleCreator); - } - - public MethodMembersShouldConjunction BeConstructor() - { - _ruleCreator.AddCondition(MethodMemberConditionsDefinition.BeConstructor()); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction BeVirtual() - { - _ruleCreator.AddCondition(MethodMemberConditionsDefinition.BeVirtual()); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction BeCalledBy(IType firstType, params IType[] moreTypes) - { - _ruleCreator.AddCondition( - MethodMemberConditionsDefinition.BeCalledBy(firstType, moreTypes) - ); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction BeCalledBy(Type type, params Type[] moreTypes) - { - _ruleCreator.AddCondition(MethodMemberConditionsDefinition.BeCalledBy(type, moreTypes)); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction BeCalledBy(IObjectProvider types) - { - _ruleCreator.AddCondition(MethodMemberConditionsDefinition.BeCalledBy(types)); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction BeCalledBy(IEnumerable types) - { - _ruleCreator.AddCondition(MethodMemberConditionsDefinition.BeCalledBy(types)); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction BeCalledBy(IEnumerable types) - { - _ruleCreator.AddCondition(MethodMemberConditionsDefinition.BeCalledBy(types)); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction HaveDependencyInMethodBodyTo( - IType firstType, - params IType[] moreTypes - ) - { - _ruleCreator.AddCondition( - MethodMemberConditionsDefinition.HaveDependencyInMethodBodyTo(firstType, moreTypes) - ); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction HaveDependencyInMethodBodyTo( - Type type, - params Type[] moreTypes - ) - { - _ruleCreator.AddCondition( - MethodMemberConditionsDefinition.HaveDependencyInMethodBodyTo(type, moreTypes) - ); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction HaveDependencyInMethodBodyTo( - IObjectProvider types - ) - { - _ruleCreator.AddCondition( - MethodMemberConditionsDefinition.HaveDependencyInMethodBodyTo(types) - ); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction HaveDependencyInMethodBodyTo(IEnumerable types) - { - _ruleCreator.AddCondition( - MethodMemberConditionsDefinition.HaveDependencyInMethodBodyTo(types) - ); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction HaveDependencyInMethodBodyTo(IEnumerable types) - { - _ruleCreator.AddCondition( - MethodMemberConditionsDefinition.HaveDependencyInMethodBodyTo(types) - ); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction HaveReturnType( - IType firstType, - params IType[] moreTypes - ) - { - _ruleCreator.AddCondition( - MethodMemberConditionsDefinition.HaveReturnType(firstType, moreTypes) - ); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction HaveReturnType(IEnumerable types) - { - _ruleCreator.AddCondition(MethodMemberConditionsDefinition.HaveReturnType(types)); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction HaveReturnType(IObjectProvider types) - { - _ruleCreator.AddCondition(MethodMemberConditionsDefinition.HaveReturnType(types)); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction HaveReturnType(Type type, params Type[] moreTypes) - { - _ruleCreator.AddCondition( - MethodMemberConditionsDefinition.HaveReturnType(type, moreTypes) - ); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction HaveReturnType(IEnumerable types) - { - _ruleCreator.AddCondition(MethodMemberConditionsDefinition.HaveReturnType(types)); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - //Negations - - public MethodMembersShouldConjunction BeNoConstructor() - { - _ruleCreator.AddCondition(MethodMemberConditionsDefinition.BeNoConstructor()); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction NotBeVirtual() - { - _ruleCreator.AddCondition(MethodMemberConditionsDefinition.NotBeVirtual()); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction NotBeCalledBy( - IType firstType, - params IType[] moreTypes - ) - { - _ruleCreator.AddCondition( - MethodMemberConditionsDefinition.NotBeCalledBy(firstType, moreTypes) - ); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction NotBeCalledBy(Type type, params Type[] moreTypes) - { - _ruleCreator.AddCondition( - MethodMemberConditionsDefinition.NotBeCalledBy(type, moreTypes) - ); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction NotBeCalledBy(IObjectProvider types) - { - _ruleCreator.AddCondition(MethodMemberConditionsDefinition.NotBeCalledBy(types)); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction NotBeCalledBy(IEnumerable types) - { - _ruleCreator.AddCondition(MethodMemberConditionsDefinition.NotBeCalledBy(types)); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction NotBeCalledBy(IEnumerable types) - { - _ruleCreator.AddCondition(MethodMemberConditionsDefinition.NotBeCalledBy(types)); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction NotHaveDependencyInMethodBodyTo( - IType firstType, - params IType[] moreTypes - ) - { - _ruleCreator.AddCondition( - MethodMemberConditionsDefinition.NotHaveDependencyInMethodBodyTo( - firstType, - moreTypes - ) - ); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction NotHaveDependencyInMethodBodyTo( - Type type, - params Type[] moreTypes + protected override MethodMembersShouldConjunction CreateNextElement( + IOrderedCondition condition ) { - _ruleCreator.AddCondition( - MethodMemberConditionsDefinition.NotHaveDependencyInMethodBodyTo(type, moreTypes) - ); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction NotHaveDependencyInMethodBodyTo( - IObjectProvider types - ) - { - _ruleCreator.AddCondition( - MethodMemberConditionsDefinition.NotHaveDependencyInMethodBodyTo(types) - ); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction NotHaveDependencyInMethodBodyTo( - IEnumerable types - ) - { - _ruleCreator.AddCondition( - MethodMemberConditionsDefinition.NotHaveDependencyInMethodBodyTo(types) - ); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction NotHaveDependencyInMethodBodyTo( - IEnumerable types - ) - { - _ruleCreator.AddCondition( - MethodMemberConditionsDefinition.NotHaveDependencyInMethodBodyTo(types) - ); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction NotHaveReturnType( - IType firstType, - params IType[] moreTypes - ) - { - _ruleCreator.AddCondition( - MethodMemberConditionsDefinition.NotHaveReturnType(firstType, moreTypes) - ); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction NotHaveReturnType(IEnumerable types) - { - _ruleCreator.AddCondition(MethodMemberConditionsDefinition.NotHaveReturnType(types)); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction NotHaveReturnType(IObjectProvider types) - { - _ruleCreator.AddCondition(MethodMemberConditionsDefinition.NotHaveReturnType(types)); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction NotHaveReturnType(Type type, params Type[] moreTypes) - { - _ruleCreator.AddCondition( - MethodMemberConditionsDefinition.NotHaveReturnType(type, moreTypes) - ); - return new MethodMembersShouldConjunction(_ruleCreator); - } - - public MethodMembersShouldConjunction NotHaveReturnType(IEnumerable types) - { - _ruleCreator.AddCondition(MethodMemberConditionsDefinition.NotHaveReturnType(types)); + _ruleCreator.AddCondition(condition); return new MethodMembersShouldConjunction(_ruleCreator); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/ShouldRelateToMethodMembersThat.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/ShouldRelateToMethodMembersThat.cs index bf64ee5a7..f21675db6 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/ShouldRelateToMethodMembersThat.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/ShouldRelateToMethodMembersThat.cs @@ -1,309 +1,20 @@ -using System; -using System.Collections.Generic; -using ArchUnitNET.Domain; +using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Predicates; using static ArchUnitNET.Fluent.Syntax.ConjunctionFactory; namespace ArchUnitNET.Fluent.Syntax.Elements.Members.MethodMembers { - public class ShouldRelateToMethodMembersThat - : ShouldRelateToMembersThat, - IMethodMemberPredicates - where TRuleTypeShouldConjunction : SyntaxElement + public sealed class ShouldRelateToMethodMembersThat + : AddMethodMemberPredicate where TRuleType : ICanBeAnalyzed { public ShouldRelateToMethodMembersThat(IArchRuleCreator ruleCreator) : base(ruleCreator) { } - public TRuleTypeShouldConjunction AreConstructors() + protected override TNextElement CreateNextElement(IPredicate predicate) { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.AreConstructors() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreVirtual() - { - _ruleCreator.ContinueComplexCondition(MethodMemberPredicatesDefinition.AreVirtual()); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreCalledBy(IType firstType, params IType[] moreTypes) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.AreCalledBy(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreCalledBy(Type type, params Type[] moreTypes) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.AreCalledBy(type, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreCalledBy(IObjectProvider types) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.AreCalledBy(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreCalledBy(IEnumerable types) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.AreCalledBy(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreCalledBy(IEnumerable types) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.AreCalledBy(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveDependencyInMethodBodyTo( - IType firstType, - params IType[] moreTypes - ) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.HaveDependencyInMethodBodyTo(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveDependencyInMethodBodyTo( - Type type, - params Type[] moreTypes - ) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.HaveDependencyInMethodBodyTo(type, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveDependencyInMethodBodyTo(IObjectProvider types) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.HaveDependencyInMethodBodyTo(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveDependencyInMethodBodyTo(IEnumerable types) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.HaveDependencyInMethodBodyTo(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveDependencyInMethodBodyTo(IEnumerable types) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.HaveDependencyInMethodBodyTo(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveReturnType(IType firstType, params IType[] moreTypes) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.HaveReturnType(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveReturnType(IEnumerable types) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.HaveReturnType(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveReturnType(IObjectProvider types) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.HaveReturnType(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveReturnType(Type type, params Type[] moreTypes) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.HaveReturnType(type, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveReturnType(IEnumerable types) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.HaveReturnType(types) - ); - return Create(_ruleCreator); - } - - //Negations - - public TRuleTypeShouldConjunction AreNoConstructors() - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.AreNoConstructors() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotVirtual() - { - _ruleCreator.ContinueComplexCondition(MethodMemberPredicatesDefinition.AreNotVirtual()); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotCalledBy(IType firstType, params IType[] moreTypes) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.AreNotCalledBy(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotCalledBy(Type type, params Type[] moreTypes) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.AreNotCalledBy(type, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotCalledBy(IObjectProvider types) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.AreNotCalledBy(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotCalledBy(IEnumerable types) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.AreNotCalledBy(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotCalledBy(IEnumerable types) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.AreNotCalledBy(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHaveDependencyInMethodBodyTo( - IType firstType, - params IType[] moreTypes - ) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.DoNotHaveDependencyInMethodBodyTo( - firstType, - moreTypes - ) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHaveDependencyInMethodBodyTo( - Type type, - params Type[] moreTypes - ) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.DoNotHaveDependencyInMethodBodyTo(type, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHaveDependencyInMethodBodyTo( - IObjectProvider types - ) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.DoNotHaveDependencyInMethodBodyTo(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHaveDependencyInMethodBodyTo( - IEnumerable types - ) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.DoNotHaveDependencyInMethodBodyTo(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHaveDependencyInMethodBodyTo(IEnumerable types) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.DoNotHaveDependencyInMethodBodyTo(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHaveReturnType( - IType firstType, - params IType[] moreTypes - ) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.DoNotHaveReturnType(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHaveReturnType(IEnumerable types) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.DoNotHaveReturnType(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHaveReturnType(IObjectProvider types) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.DoNotHaveReturnType(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHaveReturnType(Type type, params Type[] moreTypes) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.DoNotHaveReturnType(type, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHaveReturnType(IEnumerable types) - { - _ruleCreator.ContinueComplexCondition( - MethodMemberPredicatesDefinition.DoNotHaveReturnType(types) - ); - return Create(_ruleCreator); + _ruleCreator.ContinueComplexCondition(predicate); + return Create(_ruleCreator); } } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/AddPropertyMemberCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/AddPropertyMemberCondition.cs new file mode 100644 index 000000000..5afe47ec7 --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/AddPropertyMemberCondition.cs @@ -0,0 +1,54 @@ +using ArchUnitNET.Domain; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Members.PropertyMembers +{ + public abstract class AddPropertyMemberCondition + : AddMemberCondition, + IAddPropertyMemberCondition + { + internal AddPropertyMemberCondition(IArchRuleCreator ruleCreator) + : base(ruleCreator) { } + + // csharpier-ignore-start + public TNextElement HaveGetter() => CreateNextElement(PropertyMemberConditionsDefinition.HaveGetter()); + public TNextElement HavePrivateGetter() => CreateNextElement(PropertyMemberConditionsDefinition.HavePrivateGetter()); + public TNextElement HavePublicGetter() => CreateNextElement(PropertyMemberConditionsDefinition.HavePublicGetter()); + public TNextElement HaveProtectedGetter() => CreateNextElement(PropertyMemberConditionsDefinition.HaveProtectedGetter()); + public TNextElement HaveInternalGetter() => CreateNextElement(PropertyMemberConditionsDefinition.HaveInternalGetter()); + public TNextElement HaveProtectedInternalGetter() => CreateNextElement(PropertyMemberConditionsDefinition.HaveProtectedInternalGetter()); + public TNextElement HavePrivateProtectedGetter() => CreateNextElement(PropertyMemberConditionsDefinition.HavePrivateProtectedGetter()); + + public TNextElement HaveSetter() => CreateNextElement(PropertyMemberConditionsDefinition.HaveSetter()); + public TNextElement HavePrivateSetter() => CreateNextElement(PropertyMemberConditionsDefinition.HavePrivateSetter()); + public TNextElement HavePublicSetter() => CreateNextElement(PropertyMemberConditionsDefinition.HavePublicSetter()); + public TNextElement HaveProtectedSetter() => CreateNextElement(PropertyMemberConditionsDefinition.HaveProtectedSetter()); + public TNextElement HaveInternalSetter() => CreateNextElement(PropertyMemberConditionsDefinition.HaveInternalSetter()); + public TNextElement HaveProtectedInternalSetter() => CreateNextElement(PropertyMemberConditionsDefinition.HaveProtectedInternalSetter()); + public TNextElement HavePrivateProtectedSetter() => CreateNextElement(PropertyMemberConditionsDefinition.HavePrivateProtectedSetter()); + public TNextElement HaveInitOnlySetter() => CreateNextElement(PropertyMemberConditionsDefinition.HaveInitSetter()); + + public TNextElement BeVirtual() => CreateNextElement(PropertyMemberConditionsDefinition.BeVirtual()); + + //Negations + + public TNextElement NotHaveGetter() => CreateNextElement(PropertyMemberConditionsDefinition.NotHaveGetter()); + public TNextElement NotHavePrivateGetter() => CreateNextElement(PropertyMemberConditionsDefinition.NotHavePrivateGetter()); + public TNextElement NotHavePublicGetter() => CreateNextElement(PropertyMemberConditionsDefinition.NotHavePublicGetter()); + public TNextElement NotHaveProtectedGetter() => CreateNextElement(PropertyMemberConditionsDefinition.NotHaveProtectedGetter()); + public TNextElement NotHaveInternalGetter() => CreateNextElement(PropertyMemberConditionsDefinition.NotHaveInternalGetter()); + public TNextElement NotHaveProtectedInternalGetter() => CreateNextElement(PropertyMemberConditionsDefinition.NotHaveProtectedInternalGetter()); + public TNextElement NotHavePrivateProtectedGetter() => CreateNextElement(PropertyMemberConditionsDefinition.NotHavePrivateProtectedGetter()); + + public TNextElement NotHaveSetter() => CreateNextElement(PropertyMemberConditionsDefinition.NotHaveSetter()); + public TNextElement NotHavePrivateSetter() => CreateNextElement(PropertyMemberConditionsDefinition.NotHavePrivateSetter()); + public TNextElement NotHavePublicSetter() => CreateNextElement(PropertyMemberConditionsDefinition.NotHavePublicSetter()); + public TNextElement NotHaveProtectedSetter() => CreateNextElement(PropertyMemberConditionsDefinition.NotHaveProtectedSetter()); + public TNextElement NotHaveInternalSetter() => CreateNextElement(PropertyMemberConditionsDefinition.NotHaveInternalSetter()); + public TNextElement NotHaveProtectedInternalSetter() => CreateNextElement(PropertyMemberConditionsDefinition.NotHaveProtectedInternalSetter()); + public TNextElement NotHavePrivateProtectedSetter() => CreateNextElement(PropertyMemberConditionsDefinition.NotHavePrivateProtectedSetter()); + public TNextElement NotHaveInitOnlySetter() => CreateNextElement(PropertyMemberConditionsDefinition.NotHaveInitSetter()); + + public TNextElement NotBeVirtual() => CreateNextElement(PropertyMemberConditionsDefinition.NotBeVirtual()); + // csharpier-ignore-end + } +} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/AddPropertyMemberPredicate.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/AddPropertyMemberPredicate.cs new file mode 100644 index 000000000..66a061664 --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/AddPropertyMemberPredicate.cs @@ -0,0 +1,56 @@ +using ArchUnitNET.Domain; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Members.PropertyMembers +{ + public abstract class AddPropertyMemberPredicate + : AddMemberPredicate, + IAddPropertyMemberPredicate + where TRelatedType : ICanBeAnalyzed + { + internal AddPropertyMemberPredicate(IArchRuleCreator ruleCreator) + : base(ruleCreator) { } + + // csharpier-ignore-start + public TNextElement HaveGetter() => CreateNextElement(PropertyMemberPredicateDefinition.HaveGetter()); + public TNextElement HavePrivateGetter() => CreateNextElement(PropertyMemberPredicateDefinition.HavePrivateGetter()); + public TNextElement HavePublicGetter() => CreateNextElement(PropertyMemberPredicateDefinition.HavePublicGetter()); + public TNextElement HaveProtectedGetter() => CreateNextElement(PropertyMemberPredicateDefinition.HaveProtectedGetter()); + public TNextElement HaveInternalGetter() => CreateNextElement(PropertyMemberPredicateDefinition.HaveInternalGetter()); + public TNextElement HaveProtectedInternalGetter() => CreateNextElement(PropertyMemberPredicateDefinition.HaveProtectedInternalGetter()); + public TNextElement HavePrivateProtectedGetter() => CreateNextElement(PropertyMemberPredicateDefinition.HavePrivateProtectedGetter()); + + public TNextElement HaveSetter() => CreateNextElement(PropertyMemberPredicateDefinition.HaveSetter()); + public TNextElement HavePrivateSetter() => CreateNextElement(PropertyMemberPredicateDefinition.HavePrivateSetter()); + public TNextElement HavePublicSetter() => CreateNextElement(PropertyMemberPredicateDefinition.HavePublicSetter()); + public TNextElement HaveProtectedSetter() => CreateNextElement(PropertyMemberPredicateDefinition.HaveProtectedSetter()); + public TNextElement HaveInternalSetter() => CreateNextElement(PropertyMemberPredicateDefinition.HaveInternalSetter()); + public TNextElement HaveProtectedInternalSetter() => CreateNextElement(PropertyMemberPredicateDefinition.HaveProtectedInternalSetter()); + public TNextElement HavePrivateProtectedSetter() => CreateNextElement(PropertyMemberPredicateDefinition.HavePrivateProtectedSetter()); + public TNextElement HaveInitOnlySetter() => CreateNextElement(PropertyMemberPredicateDefinition.HaveInitSetter()); + + public TNextElement AreVirtual() => CreateNextElement(PropertyMemberPredicateDefinition.AreVirtual()); + + //Negations + + public TNextElement HaveNoGetter() => CreateNextElement(PropertyMemberPredicateDefinition.HaveNoGetter()); + public TNextElement DoNotHavePrivateGetter() => CreateNextElement(PropertyMemberPredicateDefinition.DoNotHavePrivateGetter()); + public TNextElement DoNotHavePublicGetter() => CreateNextElement(PropertyMemberPredicateDefinition.DoNotHavePublicGetter()); + public TNextElement DoNotHaveProtectedGetter() => CreateNextElement(PropertyMemberPredicateDefinition.DoNotHaveProtectedGetter()); + public TNextElement DoNotHaveInternalGetter() => CreateNextElement(PropertyMemberPredicateDefinition.DoNotHaveInternalGetter()); + public TNextElement DoNotHaveProtectedInternalGetter() => CreateNextElement(PropertyMemberPredicateDefinition.DoNotHaveProtectedInternalGetter()); + public TNextElement DoNotHavePrivateProtectedGetter() => CreateNextElement(PropertyMemberPredicateDefinition.DoNotHavePrivateProtectedGetter()); + + public TNextElement HaveNoSetter() => CreateNextElement(PropertyMemberPredicateDefinition.HaveNoSetter()); + public TNextElement DoNotHavePrivateSetter() => CreateNextElement(PropertyMemberPredicateDefinition.DoNotHavePrivateSetter()); + public TNextElement DoNotHavePublicSetter() => CreateNextElement(PropertyMemberPredicateDefinition.DoNotHavePublicSetter()); + public TNextElement DoNotHaveProtectedSetter() => CreateNextElement(PropertyMemberPredicateDefinition.DoNotHaveProtectedSetter()); + public TNextElement DoNotHaveInternalSetter() => CreateNextElement(PropertyMemberPredicateDefinition.DoNotHaveInternalSetter()); + public TNextElement DoNotHaveProtectedInternalSetter() => CreateNextElement(PropertyMemberPredicateDefinition.DoNotHaveProtectedInternalSetter()); + public TNextElement DoNotHavePrivateProtectedSetter() => CreateNextElement(PropertyMemberPredicateDefinition.DoNotHavePrivateProtectedSetter()); + public TNextElement DoNotHaveInitOnlySetter() => CreateNextElement(PropertyMemberPredicateDefinition.DoNotHaveInitSetter()); + + public TNextElement AreNotVirtual() => CreateNextElement(PropertyMemberPredicateDefinition.AreNotVirtual()); + + // csharpier-ignore-end + } +} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/GivenPropertyMembersThat.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/GivenPropertyMembersThat.cs index ae4b93965..c4664ea27 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/GivenPropertyMembersThat.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/GivenPropertyMembersThat.cs @@ -1,221 +1,19 @@ using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Predicates; namespace ArchUnitNET.Fluent.Syntax.Elements.Members.PropertyMembers { - public class GivenPropertyMembersThat - : GivenMembersThat, - IPropertyMemberPredicates + public sealed class GivenPropertyMembersThat + : AddPropertyMemberPredicate { public GivenPropertyMembersThat(IArchRuleCreator ruleCreator) : base(ruleCreator) { } - public GivenPropertyMembersConjunction HaveGetter() + protected override GivenPropertyMembersConjunction CreateNextElement( + IPredicate predicate + ) { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.HaveGetter()); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction HavePrivateGetter() - { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.HavePrivateGetter()); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction HavePublicGetter() - { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.HavePublicGetter()); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction HaveProtectedGetter() - { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.HaveProtectedGetter()); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction HaveInternalGetter() - { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.HaveInternalGetter()); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction HaveProtectedInternalGetter() - { - _ruleCreator.AddPredicate( - PropertyMemberPredicateDefinition.HaveProtectedInternalGetter() - ); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction HavePrivateProtectedGetter() - { - _ruleCreator.AddPredicate( - PropertyMemberPredicateDefinition.HavePrivateProtectedGetter() - ); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction HaveSetter() - { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.HaveSetter()); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction HavePrivateSetter() - { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.HavePrivateSetter()); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction HavePublicSetter() - { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.HavePublicSetter()); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction HaveProtectedSetter() - { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.HaveProtectedSetter()); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction HaveInternalSetter() - { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.HaveInternalSetter()); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction HaveProtectedInternalSetter() - { - _ruleCreator.AddPredicate( - PropertyMemberPredicateDefinition.HaveProtectedInternalSetter() - ); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction HavePrivateProtectedSetter() - { - _ruleCreator.AddPredicate( - PropertyMemberPredicateDefinition.HavePrivateProtectedSetter() - ); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction HaveInitOnlySetter() - { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.HaveInitSetter()); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction AreVirtual() - { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.AreVirtual()); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - //Negations - - public GivenPropertyMembersConjunction HaveNoGetter() - { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.HaveNoGetter()); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction DoNotHavePrivateGetter() - { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.DoNotHavePrivateGetter()); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction DoNotHavePublicGetter() - { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.DoNotHavePublicGetter()); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction DoNotHaveProtectedGetter() - { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.DoNotHaveProtectedGetter()); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction DoNotHaveInternalGetter() - { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.DoNotHaveInternalGetter()); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction DoNotHaveProtectedInternalGetter() - { - _ruleCreator.AddPredicate( - PropertyMemberPredicateDefinition.DoNotHaveProtectedInternalGetter() - ); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction DoNotHavePrivateProtectedGetter() - { - _ruleCreator.AddPredicate( - PropertyMemberPredicateDefinition.DoNotHavePrivateProtectedGetter() - ); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction HaveNoSetter() - { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.HaveNoSetter()); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction DoNotHavePrivateSetter() - { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.DoNotHavePrivateSetter()); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction DoNotHavePublicSetter() - { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.DoNotHavePublicSetter()); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction DoNotHaveProtectedSetter() - { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.DoNotHaveProtectedSetter()); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction DoNotHaveInternalSetter() - { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.DoNotHaveInternalSetter()); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction DoNotHaveProtectedInternalSetter() - { - _ruleCreator.AddPredicate( - PropertyMemberPredicateDefinition.DoNotHaveProtectedInternalSetter() - ); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction DoNotHavePrivateProtectedSetter() - { - _ruleCreator.AddPredicate( - PropertyMemberPredicateDefinition.DoNotHavePrivateProtectedSetter() - ); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction DoNotHaveInitOnlySetter() - { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.DoNotHaveInitSetter()); - return new GivenPropertyMembersConjunction(_ruleCreator); - } - - public GivenPropertyMembersConjunction AreNotVirtual() - { - _ruleCreator.AddPredicate(PropertyMemberPredicateDefinition.AreNotVirtual()); + _ruleCreator.AddPredicate(predicate); return new GivenPropertyMembersConjunction(_ruleCreator); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IPropertyMemberConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IAddPropertyMemberCondition.cs similarity index 92% rename from ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IPropertyMemberConditions.cs rename to ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IAddPropertyMemberCondition.cs index 66e05f29d..4dcd17f6c 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IPropertyMemberConditions.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IAddPropertyMemberCondition.cs @@ -2,8 +2,8 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Members.PropertyMembers { - public interface IPropertyMemberConditions - : IMemberConditions + public interface IAddPropertyMemberCondition + : IAddMemberCondition where TRuleType : ICanBeAnalyzed { TReturnType HaveGetter(); diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IPropertyMemberPredicates.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IAddPropertyMemberPredicate.cs similarity index 92% rename from ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IPropertyMemberPredicates.cs rename to ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IAddPropertyMemberPredicate.cs index 067facc4d..4a9d244d3 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IPropertyMemberPredicates.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IAddPropertyMemberPredicate.cs @@ -2,8 +2,8 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Members.PropertyMembers { - public interface IPropertyMemberPredicates - : IMemberPredicates + public interface IAddPropertyMemberPredicate + : IAddMemberPredicate where TRuleType : ICanBeAnalyzed { TRuleTypeConjunction HaveGetter(); diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IComplexPropertyMemberConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IComplexPropertyMemberConditions.cs deleted file mode 100644 index 264081e19..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IComplexPropertyMemberConditions.cs +++ /dev/null @@ -1,8 +0,0 @@ -using ArchUnitNET.Domain; - -namespace ArchUnitNET.Fluent.Syntax.Elements.Members.PropertyMembers -{ - public interface IComplexPropertyMemberConditions - : IComplexMemberConditions, - IPropertyMemberConditions { } -} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/PropertyMembersShould.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/PropertyMembersShould.cs index d30782735..86500037e 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/PropertyMembersShould.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/PropertyMembersShould.cs @@ -1,221 +1,19 @@ using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Conditions; namespace ArchUnitNET.Fluent.Syntax.Elements.Members.PropertyMembers { public class PropertyMembersShould - : MembersShould, - IComplexPropertyMemberConditions + : AddPropertyMemberCondition { public PropertyMembersShould(IArchRuleCreator ruleCreator) : base(ruleCreator) { } - public PropertyMembersShouldConjunction HaveGetter() + protected override PropertyMembersShouldConjunction CreateNextElement( + IOrderedCondition condition + ) { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.HaveGetter()); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction HavePrivateGetter() - { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.HavePrivateGetter()); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction HavePublicGetter() - { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.HavePublicGetter()); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction HaveProtectedGetter() - { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.HaveProtectedGetter()); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction HaveInternalGetter() - { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.HaveInternalGetter()); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction HaveProtectedInternalGetter() - { - _ruleCreator.AddCondition( - PropertyMemberConditionsDefinition.HaveProtectedInternalGetter() - ); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction HavePrivateProtectedGetter() - { - _ruleCreator.AddCondition( - PropertyMemberConditionsDefinition.HavePrivateProtectedGetter() - ); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction HaveSetter() - { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.HaveSetter()); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction HavePrivateSetter() - { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.HavePrivateSetter()); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction HavePublicSetter() - { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.HavePublicSetter()); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction HaveProtectedSetter() - { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.HaveProtectedSetter()); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction HaveInternalSetter() - { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.HaveInternalSetter()); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction HaveProtectedInternalSetter() - { - _ruleCreator.AddCondition( - PropertyMemberConditionsDefinition.HaveProtectedInternalSetter() - ); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction HavePrivateProtectedSetter() - { - _ruleCreator.AddCondition( - PropertyMemberConditionsDefinition.HavePrivateProtectedSetter() - ); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction HaveInitOnlySetter() - { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.HaveInitSetter()); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction BeVirtual() - { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.BeVirtual()); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - //Negations - - public PropertyMembersShouldConjunction NotHaveGetter() - { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.NotHaveGetter()); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction NotHavePrivateGetter() - { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.NotHavePrivateGetter()); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction NotHavePublicGetter() - { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.NotHavePublicGetter()); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction NotHaveProtectedGetter() - { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.NotHaveProtectedGetter()); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction NotHaveInternalGetter() - { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.NotHaveInternalGetter()); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction NotHaveProtectedInternalGetter() - { - _ruleCreator.AddCondition( - PropertyMemberConditionsDefinition.NotHaveProtectedInternalGetter() - ); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction NotHavePrivateProtectedGetter() - { - _ruleCreator.AddCondition( - PropertyMemberConditionsDefinition.NotHavePrivateProtectedGetter() - ); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction NotHaveSetter() - { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.NotHaveSetter()); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction NotHavePrivateSetter() - { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.NotHavePrivateSetter()); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction NotHavePublicSetter() - { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.NotHavePublicSetter()); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction NotHaveProtectedSetter() - { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.NotHaveProtectedSetter()); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction NotHaveInternalSetter() - { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.NotHaveInternalSetter()); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction NotHaveProtectedInternalSetter() - { - _ruleCreator.AddCondition( - PropertyMemberConditionsDefinition.NotHaveProtectedInternalSetter() - ); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction NotHavePrivateProtectedSetter() - { - _ruleCreator.AddCondition( - PropertyMemberConditionsDefinition.NotHavePrivateProtectedSetter() - ); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction NotHaveInitOnlySetter() - { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.NotHaveInitSetter()); - return new PropertyMembersShouldConjunction(_ruleCreator); - } - - public PropertyMembersShouldConjunction NotBeVirtual() - { - _ruleCreator.AddCondition(PropertyMemberConditionsDefinition.NotBeVirtual()); + _ruleCreator.AddCondition(condition); return new PropertyMembersShouldConjunction(_ruleCreator); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/ShouldRelateToPropertyMembersThat.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/ShouldRelateToPropertyMembersThat.cs index 9c4eacec8..9cf7f0a26 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/ShouldRelateToPropertyMembersThat.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/ShouldRelateToPropertyMembersThat.cs @@ -1,263 +1,20 @@ using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Predicates; using static ArchUnitNET.Fluent.Syntax.ConjunctionFactory; namespace ArchUnitNET.Fluent.Syntax.Elements.Members.PropertyMembers { - public class ShouldRelateToPropertyMembersThat - : ShouldRelateToMembersThat, - IPropertyMemberPredicates - where TRuleTypeShouldConjunction : SyntaxElement + public sealed class ShouldRelateToPropertyMembersThat + : AddPropertyMemberPredicate where TRuleType : ICanBeAnalyzed { public ShouldRelateToPropertyMembersThat(IArchRuleCreator ruleCreator) : base(ruleCreator) { } - public TRuleTypeShouldConjunction HaveGetter() + protected override TNextElement CreateNextElement(IPredicate predicate) { - _ruleCreator.ContinueComplexCondition(PropertyMemberPredicateDefinition.HaveGetter()); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HavePrivateGetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.HavePrivateGetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HavePublicGetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.HavePublicGetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveProtectedGetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.HaveProtectedGetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveInternalGetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.HaveInternalGetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveProtectedInternalGetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.HaveProtectedInternalGetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HavePrivateProtectedGetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.HavePrivateProtectedGetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveSetter() - { - _ruleCreator.ContinueComplexCondition(PropertyMemberPredicateDefinition.HaveSetter()); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HavePrivateSetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.HavePrivateSetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HavePublicSetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.HavePublicSetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveProtectedSetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.HaveProtectedSetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveInternalSetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.HaveInternalSetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveProtectedInternalSetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.HaveProtectedInternalSetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HavePrivateProtectedSetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.HavePrivateProtectedSetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveInitOnlySetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.HaveInitSetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreVirtual() - { - _ruleCreator.ContinueComplexCondition(PropertyMemberPredicateDefinition.AreVirtual()); - return Create(_ruleCreator); - } - - //Negations - - public TRuleTypeShouldConjunction HaveNoGetter() - { - _ruleCreator.ContinueComplexCondition(PropertyMemberPredicateDefinition.HaveNoGetter()); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHavePrivateGetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.DoNotHavePrivateGetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHavePublicGetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.DoNotHavePublicGetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHaveProtectedGetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.DoNotHaveProtectedGetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHaveInternalGetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.DoNotHaveInternalGetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHaveProtectedInternalGetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.DoNotHaveProtectedInternalGetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHavePrivateProtectedGetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.DoNotHavePrivateProtectedGetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveNoSetter() - { - _ruleCreator.ContinueComplexCondition(PropertyMemberPredicateDefinition.HaveNoSetter()); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHavePrivateSetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.DoNotHavePrivateSetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHavePublicSetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.DoNotHavePublicSetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHaveProtectedSetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.DoNotHaveProtectedSetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHaveInternalSetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.DoNotHaveInternalSetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHaveProtectedInternalSetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.DoNotHaveProtectedInternalSetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHavePrivateProtectedSetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.DoNotHavePrivateProtectedSetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHaveInitOnlySetter() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.DoNotHaveInitSetter() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotVirtual() - { - _ruleCreator.ContinueComplexCondition( - PropertyMemberPredicateDefinition.AreNotVirtual() - ); - return Create(_ruleCreator); + _ruleCreator.ContinueComplexCondition(predicate); + return Create(_ruleCreator); } } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/ShouldRelateToMembersThat.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/ShouldRelateToMembersThat.cs index 0d9e82fe5..142d8210f 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/ShouldRelateToMembersThat.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/ShouldRelateToMembersThat.cs @@ -1,150 +1,23 @@ using System; using System.Collections.Generic; using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Predicates; using static ArchUnitNET.Fluent.Syntax.ConjunctionFactory; namespace ArchUnitNET.Fluent.Syntax.Elements.Members { - public class ShouldRelateToMembersThat - : ShouldRelateToObjectsThat, - IMemberPredicates - where TReferenceType : IMember + public class ShouldRelateToMembersThat + : AddMemberPredicate where TRuleType : ICanBeAnalyzed { - // ReSharper disable once MemberCanBeProtected.Global public ShouldRelateToMembersThat(IArchRuleCreator ruleCreator) : base(ruleCreator) { } - public TRuleTypeShouldConjunction AreDeclaredIn(IType firstType, params IType[] moreTypes) - { - _ruleCreator.ContinueComplexCondition( - MemberPredicatesDefinition.AreDeclaredIn(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreDeclaredIn(Type firstType, params Type[] moreTypes) - { - _ruleCreator.ContinueComplexCondition( - MemberPredicatesDefinition.AreDeclaredIn(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreDeclaredIn(IObjectProvider types) - { - _ruleCreator.ContinueComplexCondition( - MemberPredicatesDefinition.AreDeclaredIn(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreDeclaredIn(IEnumerable types) - { - _ruleCreator.ContinueComplexCondition( - MemberPredicatesDefinition.AreDeclaredIn(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreDeclaredIn(IEnumerable types) - { - _ruleCreator.ContinueComplexCondition( - MemberPredicatesDefinition.AreDeclaredIn(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreStatic() - { - _ruleCreator.ContinueComplexCondition( - MemberPredicatesDefinition.AreStatic() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreReadOnly() - { - _ruleCreator.ContinueComplexCondition( - MemberPredicatesDefinition.AreReadOnly() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreImmutable() - { - _ruleCreator.ContinueComplexCondition( - MemberPredicatesDefinition.AreImmutable() - ); - return Create(_ruleCreator); - } - - //Negations - - public TRuleTypeShouldConjunction AreNotDeclaredIn( - IType firstType, - params IType[] moreTypes + protected override TRuleTypeShouldConjunction CreateNextElement( + IPredicate predicate ) { - _ruleCreator.ContinueComplexCondition( - MemberPredicatesDefinition.AreNotDeclaredIn(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotDeclaredIn(Type firstType, params Type[] moreTypes) - { - _ruleCreator.ContinueComplexCondition( - MemberPredicatesDefinition.AreNotDeclaredIn(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotDeclaredIn(IObjectProvider types) - { - _ruleCreator.ContinueComplexCondition( - MemberPredicatesDefinition.AreNotDeclaredIn(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotDeclaredIn(IEnumerable types) - { - _ruleCreator.ContinueComplexCondition( - MemberPredicatesDefinition.AreNotDeclaredIn(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotDeclaredIn(IEnumerable types) - { - _ruleCreator.ContinueComplexCondition( - MemberPredicatesDefinition.AreNotDeclaredIn(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotStatic() - { - _ruleCreator.ContinueComplexCondition( - MemberPredicatesDefinition.AreNotStatic() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotReadOnly() - { - _ruleCreator.ContinueComplexCondition( - MemberPredicatesDefinition.AreNotReadOnly() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotImmutable() - { - _ruleCreator.ContinueComplexCondition( - MemberPredicatesDefinition.AreNotImmutable() - ); + _ruleCreator.ContinueComplexCondition(predicate); return Create(_ruleCreator); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/ShouldRelateToObjectsThat.cs b/ArchUnitNET/Fluent/Syntax/Elements/ShouldRelateToObjectsThat.cs deleted file mode 100644 index 74a682c47..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/ShouldRelateToObjectsThat.cs +++ /dev/null @@ -1,170 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using ArchUnitNET.Domain; -using ArchUnitNET.Domain.Extensions; -using ArchUnitNET.Fluent.Predicates; -using static ArchUnitNET.Fluent.Syntax.ConjunctionFactory; -using Attribute = ArchUnitNET.Domain.Attribute; - -namespace ArchUnitNET.Fluent.Syntax.Elements -{ - public class ShouldRelateToObjectsThat - : SyntaxElement, - IObjectPredicates - where TReferenceType : ICanBeAnalyzed - where TRuleType : ICanBeAnalyzed - { - protected ShouldRelateToObjectsThat(IArchRuleCreator ruleCreator) - : base(ruleCreator) { } - - // csharpier-ignore-start - public TRuleTypeShouldConjunction Are(params ICanBeAnalyzed[] objects) => Are(new ObjectProvider(objects)); - public TRuleTypeShouldConjunction Are(IEnumerable objects) => Are(new ObjectProvider(objects)); - public TRuleTypeShouldConjunction Are(IObjectProvider objects) => ContinueComplexCondition(ObjectPredicatesDefinition.Are(objects)); - - public TRuleTypeShouldConjunction CallAny(params MethodMember[] methods) => CallAny(new ObjectProvider(methods)); - public TRuleTypeShouldConjunction CallAny(IEnumerable methods) => CallAny(new ObjectProvider(methods)); - public TRuleTypeShouldConjunction CallAny(IObjectProvider methods) => ContinueComplexCondition(ObjectPredicatesDefinition.CallAny(methods)); - - public TRuleTypeShouldConjunction DependOnAny() => DependOnAny(new ObjectProvider()); - public TRuleTypeShouldConjunction DependOnAny(params IType[] types) => DependOnAny(new ObjectProvider(types)); - public TRuleTypeShouldConjunction DependOnAny(params Type[] types) => DependOnAny(new SystemTypeObjectProvider(types)); - public TRuleTypeShouldConjunction DependOnAny(IObjectProvider types) => ContinueComplexCondition(ObjectPredicatesDefinition.DependOnAny(types)); - public TRuleTypeShouldConjunction DependOnAny(IEnumerable types) => DependOnAny(new ObjectProvider(types)); - public TRuleTypeShouldConjunction DependOnAny(IEnumerable types) => DependOnAny(new SystemTypeObjectProvider(types)); - - public TRuleTypeShouldConjunction FollowCustomPredicate(IPredicate predicate) => ContinueComplexCondition(predicate); - public TRuleTypeShouldConjunction FollowCustomPredicate(Func predicate, string description) => ContinueComplexCondition(ObjectPredicatesDefinition.FollowCustomPredicate(predicate, description)); - - public TRuleTypeShouldConjunction OnlyDependOn() => OnlyDependOn(new ObjectProvider()); - public TRuleTypeShouldConjunction OnlyDependOn(params IType[] types) => OnlyDependOn(new ObjectProvider(types)); - public TRuleTypeShouldConjunction OnlyDependOn(params Type[] types) => OnlyDependOn(new SystemTypeObjectProvider(types)); - public TRuleTypeShouldConjunction OnlyDependOn(IObjectProvider types) => ContinueComplexCondition(ObjectPredicatesDefinition.OnlyDependOn(types)); - public TRuleTypeShouldConjunction OnlyDependOn(IEnumerable types) => OnlyDependOn(new ObjectProvider(types)); - public TRuleTypeShouldConjunction OnlyDependOn(IEnumerable types) => OnlyDependOn(new SystemTypeObjectProvider(types)); - - public TRuleTypeShouldConjunction HaveAnyAttributes() => HaveAnyAttributes(new ObjectProvider()); - public TRuleTypeShouldConjunction HaveAnyAttributes(params Attribute[] attributes) => HaveAnyAttributes(new ObjectProvider(attributes)); - public TRuleTypeShouldConjunction HaveAnyAttributes(params Type[] attributes) => HaveAnyAttributes(new SystemTypeObjectProvider(attributes)); - public TRuleTypeShouldConjunction HaveAnyAttributes(IObjectProvider attributes) => ContinueComplexCondition(ObjectPredicatesDefinition.HaveAnyAttributes(attributes)); - public TRuleTypeShouldConjunction HaveAnyAttributes(IEnumerable attributes) => HaveAnyAttributes(new ObjectProvider(attributes)); - public TRuleTypeShouldConjunction HaveAnyAttributes(IEnumerable attributes) => HaveAnyAttributes(new SystemTypeObjectProvider(attributes)); - - public TRuleTypeShouldConjunction OnlyHaveAttributes() => OnlyHaveAttributes(new ObjectProvider()); - public TRuleTypeShouldConjunction OnlyHaveAttributes(params Attribute[] attributes) => OnlyHaveAttributes(new ObjectProvider(attributes)); - public TRuleTypeShouldConjunction OnlyHaveAttributes(params Type[] attributes) => OnlyHaveAttributes(new SystemTypeObjectProvider(attributes)); - public TRuleTypeShouldConjunction OnlyHaveAttributes(IObjectProvider attributes) => ContinueComplexCondition(ObjectPredicatesDefinition.OnlyHaveAttributes(attributes)); - public TRuleTypeShouldConjunction OnlyHaveAttributes(IEnumerable attributes) => OnlyHaveAttributes(new ObjectProvider(attributes)); - public TRuleTypeShouldConjunction OnlyHaveAttributes(IEnumerable attributes) => OnlyHaveAttributes(new SystemTypeObjectProvider(attributes)); - - public TRuleTypeShouldConjunction HaveAnyAttributesWithArguments(IEnumerable argumentValues) => ContinueComplexCondition(ObjectPredicatesDefinition.HaveAnyAttributesWithArguments(argumentValues)); - - public TRuleTypeShouldConjunction HaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues) => ContinueComplexCondition(ObjectPredicatesDefinition.HaveAttributeWithArguments(attribute.FullName, _ => attribute, argumentValues)); - public TRuleTypeShouldConjunction HaveAttributeWithArguments(Type attribute, IEnumerable argumentValues) => ContinueComplexCondition(ObjectPredicatesDefinition.HaveAttributeWithArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), argumentValues)); - - public TRuleTypeShouldConjunction HaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments) => ContinueComplexCondition(ObjectPredicatesDefinition.HaveAnyAttributesWithNamedArguments(attributeArguments)); - public TRuleTypeShouldConjunction HaveAnyAttributesWithNamedArguments(params (string, object)[] attributeArguments) => HaveAnyAttributesWithNamedArguments((IEnumerable<(string, object)>)attributeArguments); - - public TRuleTypeShouldConjunction HaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments) => ContinueComplexCondition(ObjectPredicatesDefinition.HaveAttributeWithNamedArguments(attribute.FullName, _ => attribute, attributeArguments)); - public TRuleTypeShouldConjunction HaveAttributeWithNamedArguments(Attribute attribute, params (string, object)[] attributeArguments) => HaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); - public TRuleTypeShouldConjunction HaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments) => ContinueComplexCondition(ObjectPredicatesDefinition.HaveAttributeWithNamedArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), attributeArguments)); - public TRuleTypeShouldConjunction HaveAttributeWithNamedArguments(Type attribute, params (string, object)[] attributeArguments) => HaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); - - public TRuleTypeShouldConjunction HaveName(string name) => ContinueComplexCondition(ObjectPredicatesDefinition.HaveName(name)); - public TRuleTypeShouldConjunction HaveNameMatching(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.HaveNameMatching(pattern)); - public TRuleTypeShouldConjunction HaveNameStartingWith(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.HaveNameStartingWith(pattern)); - public TRuleTypeShouldConjunction HaveNameEndingWith(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.HaveNameEndingWith(pattern)); - public TRuleTypeShouldConjunction HaveNameContaining(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.HaveNameContaining(pattern)); - - public TRuleTypeShouldConjunction HaveFullName(string fullName) => ContinueComplexCondition(ObjectPredicatesDefinition.HaveFullName(fullName)); - public TRuleTypeShouldConjunction HaveFullNameMatching(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.HaveFullNameMatching(pattern)); - public TRuleTypeShouldConjunction HaveFullNameStartingWith(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.HaveFullNameStartingWith(pattern)); - public TRuleTypeShouldConjunction HaveFullNameEndingWith(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.HaveFullNameEndingWith(pattern)); - public TRuleTypeShouldConjunction HaveFullNameContaining(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.HaveFullNameContaining(pattern)); - - public TRuleTypeShouldConjunction HaveAssemblyQualifiedName(string assemblyQualifiedName) => ContinueComplexCondition(ObjectPredicatesDefinition.HaveAssemblyQualifiedName(assemblyQualifiedName)); - public TRuleTypeShouldConjunction HaveAssemblyQualifiedNameMatching(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.HaveAssemblyQualifiedNameMatching(pattern)); - public TRuleTypeShouldConjunction HaveAssemblyQualifiedNameStartingWith(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.HaveAssemblyQualifiedNameStartingWith(pattern)); - public TRuleTypeShouldConjunction HaveAssemblyQualifiedNameEndingWith(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.HaveAssemblyQualifiedNameEndingWith(pattern)); - public TRuleTypeShouldConjunction HaveAssemblyQualifiedNameContaining(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.HaveAssemblyQualifiedNameContaining(pattern)); - - public TRuleTypeShouldConjunction ArePrivate() => ContinueComplexCondition(ObjectPredicatesDefinition.ArePrivate()); - public TRuleTypeShouldConjunction ArePublic() => ContinueComplexCondition(ObjectPredicatesDefinition.ArePublic()); - public TRuleTypeShouldConjunction AreProtected() => ContinueComplexCondition(ObjectPredicatesDefinition.AreProtected()); - public TRuleTypeShouldConjunction AreInternal() => ContinueComplexCondition(ObjectPredicatesDefinition.AreInternal()); - public TRuleTypeShouldConjunction AreProtectedInternal() => ContinueComplexCondition(ObjectPredicatesDefinition.AreProtectedInternal()); - public TRuleTypeShouldConjunction ArePrivateProtected() => ContinueComplexCondition(ObjectPredicatesDefinition.ArePrivateProtected()); - - // Negations - - public TRuleTypeShouldConjunction AreNot(params ICanBeAnalyzed[] objects) => AreNot(new ObjectProvider(objects)); - public TRuleTypeShouldConjunction AreNot(IEnumerable objects) => AreNot(new ObjectProvider(objects)); - public TRuleTypeShouldConjunction AreNot(IObjectProvider objects) => ContinueComplexCondition(ObjectPredicatesDefinition.AreNot(objects)); - - public TRuleTypeShouldConjunction DoNotCallAny(params MethodMember[] methods) => DoNotCallAny(new ObjectProvider(methods)); - public TRuleTypeShouldConjunction DoNotCallAny(IEnumerable methods) => DoNotCallAny(new ObjectProvider(methods)); - public TRuleTypeShouldConjunction DoNotCallAny(IObjectProvider methods) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotCallAny(methods)); - - public TRuleTypeShouldConjunction DoNotDependOnAny() => DoNotDependOnAny(new ObjectProvider()); - public TRuleTypeShouldConjunction DoNotDependOnAny(params IType[] types) => DoNotDependOnAny(new ObjectProvider(types)); - public TRuleTypeShouldConjunction DoNotDependOnAny(params Type[] types) => DoNotDependOnAny(new SystemTypeObjectProvider(types)); - public TRuleTypeShouldConjunction DoNotDependOnAny(IObjectProvider types) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotDependOnAny(types)); - public TRuleTypeShouldConjunction DoNotDependOnAny(IEnumerable types) => DoNotDependOnAny(new ObjectProvider(types)); - public TRuleTypeShouldConjunction DoNotDependOnAny(IEnumerable types) => DoNotDependOnAny(new SystemTypeObjectProvider(types)); - - public TRuleTypeShouldConjunction DoNotHaveAnyAttributes() => DoNotHaveAnyAttributes(new ObjectProvider()); - public TRuleTypeShouldConjunction DoNotHaveAnyAttributes(params Attribute[] attributes) => DoNotHaveAnyAttributes(new ObjectProvider(attributes)); - public TRuleTypeShouldConjunction DoNotHaveAnyAttributes(params Type[] attributes) => DoNotHaveAnyAttributes(new SystemTypeObjectProvider(attributes)); - public TRuleTypeShouldConjunction DoNotHaveAnyAttributes(IObjectProvider attributes) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotHaveAnyAttributes(attributes)); - public TRuleTypeShouldConjunction DoNotHaveAnyAttributes(IEnumerable attributes) => DoNotHaveAnyAttributes(new ObjectProvider(attributes)); - public TRuleTypeShouldConjunction DoNotHaveAnyAttributes(IEnumerable attributes) => DoNotHaveAnyAttributes(new SystemTypeObjectProvider(attributes)); - - public TRuleTypeShouldConjunction DoNotHaveAnyAttributesWithArguments(IEnumerable argumentValues) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotHaveAnyAttributesWithArguments(argumentValues)); - - public TRuleTypeShouldConjunction DoNotHaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotHaveAttributeWithArguments(attribute.FullName, _ => attribute, argumentValues)); - public TRuleTypeShouldConjunction DoNotHaveAttributeWithArguments(Type attribute, IEnumerable argumentValues) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotHaveAttributeWithArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), argumentValues)); - - public TRuleTypeShouldConjunction DoNotHaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotHaveAnyAttributesWithNamedArguments(attributeArguments)); - public TRuleTypeShouldConjunction DoNotHaveAnyAttributesWithNamedArguments(params (string, object)[] attributeArguments) => DoNotHaveAnyAttributesWithNamedArguments((IEnumerable<(string, object)>)attributeArguments); - - public TRuleTypeShouldConjunction DoNotHaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotHaveAttributeWithNamedArguments(attribute.FullName, _ => attribute, attributeArguments)); - public TRuleTypeShouldConjunction DoNotHaveAttributeWithNamedArguments(Attribute attribute, params (string, object)[] attributeArguments) => DoNotHaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); - public TRuleTypeShouldConjunction DoNotHaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotHaveAttributeWithNamedArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), attributeArguments)); - public TRuleTypeShouldConjunction DoNotHaveAttributeWithNamedArguments(Type attribute, params (string, object)[] attributeArguments) => DoNotHaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); - - public TRuleTypeShouldConjunction DoNotHaveName(string name) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotHaveName(name)); - public TRuleTypeShouldConjunction DoNotHaveNameMatching(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotHaveNameMatching(pattern)); - public TRuleTypeShouldConjunction DoNotHaveNameStartingWith(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotHaveNameStartingWith(pattern)); - public TRuleTypeShouldConjunction DoNotHaveNameEndingWith(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotHaveNameEndingWith(pattern)); - public TRuleTypeShouldConjunction DoNotHaveNameContaining(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotHaveNameContaining(pattern)); - - public TRuleTypeShouldConjunction DoNotHaveFullName(string fullName) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotHaveFullName(fullName)); - public TRuleTypeShouldConjunction DoNotHaveFullNameMatching(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotHaveFullNameMatching(pattern)); - public TRuleTypeShouldConjunction DoNotHaveFullNameStartingWith(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotHaveFullNameStartingWith(pattern)); - public TRuleTypeShouldConjunction DoNotHaveFullNameEndingWith(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotHaveFullNameEndingWith(pattern)); - public TRuleTypeShouldConjunction DoNotHaveFullNameContaining(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotHaveFullNameContaining(pattern)); - - public TRuleTypeShouldConjunction DoNotHaveAssemblyQualifiedName(string assemblyQualifiedName) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedName(assemblyQualifiedName)); - public TRuleTypeShouldConjunction DoNotHaveAssemblyQualifiedNameMatching(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedNameMatching(pattern)); - public TRuleTypeShouldConjunction DoNotHaveAssemblyQualifiedNameStartingWith(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedNameStartingWith(pattern)); - public TRuleTypeShouldConjunction DoNotHaveAssemblyQualifiedNameEndingWith(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedNameEndingWith(pattern)); - public TRuleTypeShouldConjunction DoNotHaveAssemblyQualifiedNameContaining(string pattern) => ContinueComplexCondition(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedNameContaining(pattern)); - - public TRuleTypeShouldConjunction AreNotPrivate() => ContinueComplexCondition(ObjectPredicatesDefinition.AreNotPrivate()); - public TRuleTypeShouldConjunction AreNotPublic() => ContinueComplexCondition(ObjectPredicatesDefinition.AreNotPublic()); - public TRuleTypeShouldConjunction AreNotProtected() => ContinueComplexCondition(ObjectPredicatesDefinition.AreNotProtected()); - public TRuleTypeShouldConjunction AreNotInternal() => ContinueComplexCondition(ObjectPredicatesDefinition.AreNotInternal()); - public TRuleTypeShouldConjunction AreNotProtectedInternal() => ContinueComplexCondition(ObjectPredicatesDefinition.AreNotProtectedInternal()); - public TRuleTypeShouldConjunction AreNotPrivateProtected() => ContinueComplexCondition(ObjectPredicatesDefinition.AreNotPrivateProtected()); - // csharpier-ignore-end - - private TRuleTypeShouldConjunction ContinueComplexCondition( - IPredicate predicate - ) - { - _ruleCreator.ContinueComplexCondition(predicate); - return Create(_ruleCreator); - } - } -} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/AddTypeCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/AddTypeCondition.cs new file mode 100644 index 000000000..e6ce18a70 --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/AddTypeCondition.cs @@ -0,0 +1,118 @@ +using System; +using System.Collections.Generic; +using System.IO; +using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Conditions; +using ArchUnitNET.Fluent.Syntax.Elements.Types.Interfaces; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Types +{ + public abstract class AddTypeCondition + : AddObjectCondition, + IAddTypeCondition + where TRuleType : IType + { + internal AddTypeCondition(IArchRuleCreator ruleCreator) + : base(ruleCreator) { } + + // csharpier-ignore-start + public TNextElement Be(Type firstType, params Type[] moreTypes) => CreateNextElement(TypeConditionsDefinition.Be(firstType, moreTypes)); + public TNextElement Be(IEnumerable types) => CreateNextElement(TypeConditionsDefinition.Be(types)); + + public TNextElement BeAssignableTo(IType firstType, params IType[] moreTypes) => CreateNextElement(TypeConditionsDefinition.BeAssignableTo(firstType, moreTypes)); + public TNextElement BeAssignableTo(Type firstType, params Type[] moreTypes) => CreateNextElement(TypeConditionsDefinition.BeAssignableTo(firstType, moreTypes)); + public TNextElement BeAssignableTo(IObjectProvider types) => CreateNextElement(TypeConditionsDefinition.BeAssignableTo(types)); + public TNextElement BeAssignableTo(IEnumerable types) => CreateNextElement(TypeConditionsDefinition.BeAssignableTo(types)); + public TNextElement BeAssignableTo(IEnumerable types) => CreateNextElement(TypeConditionsDefinition.BeAssignableTo(types)); + + public TNextElement BeNestedIn(IType firstType, params IType[] moreTypes) => CreateNextElement(TypeConditionsDefinition.BeNestedIn(firstType, moreTypes)); + public TNextElement BeNestedIn(Type firstType, params Type[] moreTypes) => CreateNextElement(TypeConditionsDefinition.BeNestedIn(firstType, moreTypes)); + public TNextElement BeNestedIn(IObjectProvider types) => CreateNextElement(TypeConditionsDefinition.BeNestedIn(types)); + public TNextElement BeNestedIn(IEnumerable types) => CreateNextElement(TypeConditionsDefinition.BeNestedIn(types)); + public TNextElement BeNestedIn(IEnumerable types) => CreateNextElement(TypeConditionsDefinition.BeNestedIn(types)); + + public TNextElement BeValueTypes() => CreateNextElement(TypeConditionsDefinition.BeValueTypes()); + public TNextElement BeEnums() => CreateNextElement(TypeConditionsDefinition.BeEnums()); + public TNextElement BeStructs() => CreateNextElement(TypeConditionsDefinition.BeStructs()); + + public TNextElement ImplementInterface(Interface intf) => CreateNextElement(TypeConditionsDefinition.ImplementInterface(intf)); + public TNextElement ImplementInterface(Type intf) => CreateNextElement(TypeConditionsDefinition.ImplementInterface(intf)); + + public TNextElement ImplementAnyInterfaces() => ImplementAnyInterfaces(new ObjectProvider()); + public TNextElement ImplementAnyInterfaces(params Interface[] interfaces) => ImplementAnyInterfaces(new ObjectProvider(interfaces)); + public TNextElement ImplementAnyInterfaces(params Type[] interfaces) => ImplementAnyInterfaces(new SystemTypeObjectProvider(interfaces)); + public TNextElement ImplementAnyInterfaces(IEnumerable interfaces) => ImplementAnyInterfaces(new ObjectProvider(interfaces)); + public TNextElement ImplementAnyInterfaces(IEnumerable interfaces) => ImplementAnyInterfaces(new SystemTypeObjectProvider(interfaces)); + public TNextElement ImplementAnyInterfaces(IObjectProvider interfaces) => CreateNextElement(TypeConditionsDefinition.ImplementAny(interfaces)); + + public TNextElement ResideInNamespace(string fullName) => CreateNextElement(TypeConditionsDefinition.ResideInNamespace(fullName)); + public TNextElement ResideInNamespaceMatching(string pattern) => CreateNextElement(TypeConditionsDefinition.ResideInNamespaceMatching(pattern)); + + public TNextElement ResideInAssembly(string fullName) => CreateNextElement(TypeConditionsDefinition.ResideInAssembly(fullName)); + public TNextElement ResideInAssemblyMatching(string pattern) => CreateNextElement(TypeConditionsDefinition.ResideInAssemblyMatching(pattern)); + public TNextElement ResideInAssembly(System.Reflection.Assembly assembly, params System.Reflection.Assembly[] moreAssemblies) => CreateNextElement(TypeConditionsDefinition.ResideInAssembly(assembly, moreAssemblies)); + public TNextElement ResideInAssembly(Assembly assembly, params Assembly[] moreAssemblies) => CreateNextElement(TypeConditionsDefinition.ResideInAssembly(assembly, moreAssemblies)); + + public TNextElement HavePropertyMemberWithName(string name) => CreateNextElement(TypeConditionsDefinition.HavePropertyMemberWithName(name)); + public TNextElement HaveFieldMemberWithName(string name) => CreateNextElement(TypeConditionsDefinition.HaveFieldMemberWithName(name)); + public TNextElement HaveMethodMemberWithName(string name) => CreateNextElement(TypeConditionsDefinition.HaveMethodMemberWithName(name)); + public TNextElement HaveMemberWithName(string name) => CreateNextElement(TypeConditionsDefinition.HaveMemberWithName(name)); + + public TNextElement BeNested() => CreateNextElement(TypeConditionsDefinition.BeNested()); + + //Relation Conditions + + public ShouldRelateToTypesThat BeTypesThat() => BeginComplexTypeCondition(TypeConditionsDefinition.BeTypesThat()); + public ShouldRelateToTypesThat BeAssignableToTypesThat() => BeginComplexTypeCondition(TypeConditionsDefinition.BeAssignableToTypesThat()); + public ShouldRelateToInterfacesThat ImplementAnyInterfacesThat() => BeginComplexInterfaceCondition(TypeConditionsDefinition.ImplementAnyInterfacesThat()); + + //Negations + + public TNextElement NotBe(Type firstType, params Type[] moreTypes) => CreateNextElement(TypeConditionsDefinition.NotBe(firstType, moreTypes)); + public TNextElement NotBe(IEnumerable types) => CreateNextElement(TypeConditionsDefinition.NotBe(types)); + + public TNextElement NotBeAssignableTo(IType firstType, params IType[] moreTypes) => CreateNextElement(TypeConditionsDefinition.NotBeAssignableTo(firstType, moreTypes)); + public TNextElement NotBeAssignableTo(Type firstType, params Type[] moreTypes) => CreateNextElement(TypeConditionsDefinition.NotBeAssignableTo(firstType, moreTypes)); + public TNextElement NotBeAssignableTo(IObjectProvider types) => CreateNextElement(TypeConditionsDefinition.NotBeAssignableTo(types)); + public TNextElement NotBeAssignableTo(IEnumerable types) => CreateNextElement(TypeConditionsDefinition.NotBeAssignableTo(types)); + public TNextElement NotBeAssignableTo(IEnumerable types) => CreateNextElement(TypeConditionsDefinition.NotBeAssignableTo(types)); + + public TNextElement NotBeValueTypes() => CreateNextElement(TypeConditionsDefinition.NotBeValueTypes()); + public TNextElement NotBeEnums() => CreateNextElement(TypeConditionsDefinition.NotBeEnums()); + public TNextElement NotBeStructs() => CreateNextElement(TypeConditionsDefinition.NotBeStructs()); + + public TNextElement NotImplementInterface(Interface intf) => CreateNextElement(TypeConditionsDefinition.NotImplementInterface(intf)); + public TNextElement NotImplementInterface(Type intf) => CreateNextElement(TypeConditionsDefinition.NotImplementInterface(intf)); + + public TNextElement NotImplementAnyInterfaces() => NotImplementAnyInterfaces(new ObjectProvider()); + public TNextElement NotImplementAnyInterfaces(params Interface[] interfaces) => NotImplementAnyInterfaces(new ObjectProvider(interfaces)); + public TNextElement NotImplementAnyInterfaces(params Type[] interfaces) => NotImplementAnyInterfaces(new SystemTypeObjectProvider(interfaces)); + public TNextElement NotImplementAnyInterfaces(IEnumerable interfaces) => NotImplementAnyInterfaces(new ObjectProvider(interfaces)); + public TNextElement NotImplementAnyInterfaces(IEnumerable interfaces) => NotImplementAnyInterfaces(new SystemTypeObjectProvider(interfaces)); + public TNextElement NotImplementAnyInterfaces(IObjectProvider interfaces) => CreateNextElement(TypeConditionsDefinition.NotImplementAny(interfaces)); + + public TNextElement NotResideInNamespace(string fullName) => CreateNextElement(TypeConditionsDefinition.NotResideInNamespace(fullName)); + public TNextElement NotResideInNamespaceMatching(string pattern) => CreateNextElement(TypeConditionsDefinition.NotResideInNamespaceMatching(pattern)); + + public TNextElement NotResideInAssembly(string fullName) => CreateNextElement(TypeConditionsDefinition.NotResideInAssembly(fullName)); + public TNextElement NotResideInAssemblyMatching(string pattern) => CreateNextElement(TypeConditionsDefinition.NotResideInAssemblyMatching(pattern)); + public TNextElement NotResideInAssembly(System.Reflection.Assembly assembly, params System.Reflection.Assembly[] moreAssemblies) => CreateNextElement(TypeConditionsDefinition.NotResideInAssembly(assembly, moreAssemblies)); + public TNextElement NotResideInAssembly(Assembly assembly, params Assembly[] moreAssemblies) => CreateNextElement(TypeConditionsDefinition.NotResideInAssembly(assembly, moreAssemblies)); + + public TNextElement NotHavePropertyMemberWithName(string name) => CreateNextElement(TypeConditionsDefinition.NotHavePropertyMemberWithName(name)); + public TNextElement NotHaveFieldMemberWithName(string name) => CreateNextElement(TypeConditionsDefinition.NotHaveFieldMemberWithName(name)); + public TNextElement NotHaveMethodMemberWithName(string name) => CreateNextElement(TypeConditionsDefinition.NotHaveMethodMemberWithName(name)); + public TNextElement NotHaveMemberWithName(string name) => CreateNextElement(TypeConditionsDefinition.NotHaveMemberWithName(name)); + + public TNextElement NotBeNested() => CreateNextElement(TypeConditionsDefinition.NotBeNested()); + + public TNextElement AdhereToPlantUmlDiagram(string file) => CreateNextElement(TypeConditionsDefinition.AdhereToPlantUmlDiagram(file)); + public TNextElement AdhereToPlantUmlDiagram(Stream stream) => CreateNextElement(TypeConditionsDefinition.AdhereToPlantUmlDiagram(stream)); + + //Relation Condition Negations + + public ShouldRelateToTypesThat NotBeAssignableToTypesThat() => BeginComplexTypeCondition(TypeConditionsDefinition.NotBeAssignableToTypesThat()); + public ShouldRelateToInterfacesThat NotImplementAnyInterfacesThat() => BeginComplexInterfaceCondition(TypeConditionsDefinition.NotImplementAnyInterfacesThat()); + // csharpier-ignore-end + } +} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/AddTypePredicate.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/AddTypePredicate.cs new file mode 100644 index 000000000..f6b98fb23 --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/AddTypePredicate.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using ArchUnitNET.Domain; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Types +{ + public abstract class AddTypePredicate + : AddObjectPredicate, + IAddTypePredicate + where TRuleType : IType + where TRelatedType : ICanBeAnalyzed + { + internal AddTypePredicate(IArchRuleCreator archRuleCreator) + : base(archRuleCreator) { } + + // csharpier-ignore-start + public TNextElement Are(Type firstType, params Type[] moreTypes) => CreateNextElement(TypePredicatesDefinition.Are(firstType, moreTypes)); + public TNextElement Are(IEnumerable types) => CreateNextElement(TypePredicatesDefinition.Are(types)); + + public TNextElement AreAssignableTo(IType firstType, params IType[] moreTypes) => CreateNextElement(TypePredicatesDefinition.AreAssignableTo(firstType, moreTypes)); + public TNextElement AreAssignableTo(Type firstType, params Type[] moreTypes) => CreateNextElement(TypePredicatesDefinition.AreAssignableTo(firstType, moreTypes)); + public TNextElement AreAssignableTo(IObjectProvider types) => CreateNextElement(TypePredicatesDefinition.AreAssignableTo(types)); + public TNextElement AreAssignableTo(IEnumerable types) => CreateNextElement(TypePredicatesDefinition.AreAssignableTo(types)); + public TNextElement AreAssignableTo(IEnumerable types) => CreateNextElement(TypePredicatesDefinition.AreAssignableTo(types)); + + public TNextElement AreNestedIn(IType firstType, params IType[] moreTypes) => CreateNextElement(TypePredicatesDefinition.AreNestedIn(firstType, moreTypes)); + public TNextElement AreNestedIn(Type firstType, params Type[] moreTypes) => CreateNextElement(TypePredicatesDefinition.AreNestedIn(firstType, moreTypes)); + public TNextElement AreNestedIn(IObjectProvider types) => CreateNextElement(TypePredicatesDefinition.AreNestedIn(types)); + public TNextElement AreNestedIn(IEnumerable types) => CreateNextElement(TypePredicatesDefinition.AreNestedIn(types)); + public TNextElement AreNestedIn(IEnumerable types) => CreateNextElement(TypePredicatesDefinition.AreNestedIn(types)); + + public TNextElement AreValueTypes() => CreateNextElement(TypePredicatesDefinition.AreValueTypes()); + public TNextElement AreEnums() => CreateNextElement(TypePredicatesDefinition.AreEnums()); + public TNextElement AreStructs() => CreateNextElement(TypePredicatesDefinition.AreStructs()); + + public TNextElement ImplementInterface(Interface intf) => CreateNextElement(TypePredicatesDefinition.ImplementInterface(intf)); + public TNextElement ImplementInterface(Type intf) => CreateNextElement(TypePredicatesDefinition.ImplementInterface(intf)); + + public TNextElement ImplementAnyInterfaces() => ImplementAnyInterfaces(new ObjectProvider()); + public TNextElement ImplementAnyInterfaces(params Interface[] interfaces) => ImplementAnyInterfaces(new ObjectProvider(interfaces)); + public TNextElement ImplementAnyInterfaces(params Type[] interfaces) => ImplementAnyInterfaces(new SystemTypeObjectProvider(interfaces)); + public TNextElement ImplementAnyInterfaces(IEnumerable interfaces) => ImplementAnyInterfaces(new ObjectProvider(interfaces)); + public TNextElement ImplementAnyInterfaces(IEnumerable interfaces) => ImplementAnyInterfaces(new SystemTypeObjectProvider(interfaces)); + public TNextElement ImplementAnyInterfaces(IObjectProvider interfaces) => CreateNextElement(TypePredicatesDefinition.ImplementAny(interfaces)); + + public TNextElement ResideInNamespace(string fullName) => CreateNextElement(TypePredicatesDefinition.ResideInNamespace(fullName)); + public TNextElement ResideInNamespaceMatching(string pattern) => CreateNextElement(TypePredicatesDefinition.ResideInNamespaceMatching(pattern)); + + public TNextElement ResideInAssembly(string fullName) => CreateNextElement(TypePredicatesDefinition.ResideInAssembly(fullName)); + public TNextElement ResideInAssemblyMatching(string pattern) => CreateNextElement(TypePredicatesDefinition.ResideInAssemblyMatching(pattern)); + public TNextElement ResideInAssembly(System.Reflection.Assembly assembly, params System.Reflection.Assembly[] moreAssemblies) => CreateNextElement(TypePredicatesDefinition.ResideInAssembly(assembly, moreAssemblies)); + public TNextElement ResideInAssembly(Assembly assembly, params Assembly[] moreAssemblies) => CreateNextElement(TypePredicatesDefinition.ResideInAssembly(assembly, moreAssemblies)); + + public TNextElement HavePropertyMemberWithName(string name) => CreateNextElement(TypePredicatesDefinition.HavePropertyMemberWithName(name)); + public TNextElement HaveFieldMemberWithName(string name) => CreateNextElement(TypePredicatesDefinition.HaveFieldMemberWithName(name)); + public TNextElement HaveMethodMemberWithName(string name) => CreateNextElement(TypePredicatesDefinition.HaveMethodMemberWithName(name)); + public TNextElement HaveMemberWithName(string name) => CreateNextElement(TypePredicatesDefinition.HaveMemberWithName(name)); + + public TNextElement AreNested() => CreateNextElement(TypePredicatesDefinition.AreNested()); + + //Negations + + public TNextElement AreNot(Type firstType, params Type[] moreTypes) => CreateNextElement(TypePredicatesDefinition.AreNot(firstType, moreTypes)); + public TNextElement AreNot(IEnumerable types) => CreateNextElement(TypePredicatesDefinition.AreNot(types)); + + public TNextElement AreNotAssignableTo(IType firstType, params IType[] moreTypes) => CreateNextElement(TypePredicatesDefinition.AreNotAssignableTo(firstType, moreTypes)); + public TNextElement AreNotAssignableTo(Type firstType, params Type[] moreTypes) => CreateNextElement(TypePredicatesDefinition.AreNotAssignableTo(firstType, moreTypes)); + public TNextElement AreNotAssignableTo(IObjectProvider types) => CreateNextElement(TypePredicatesDefinition.AreNotAssignableTo(types)); + public TNextElement AreNotAssignableTo(IEnumerable types) => CreateNextElement(TypePredicatesDefinition.AreNotAssignableTo(types)); + public TNextElement AreNotAssignableTo(IEnumerable types) => CreateNextElement(TypePredicatesDefinition.AreNotAssignableTo(types)); + + public TNextElement AreNotValueTypes() => CreateNextElement(TypePredicatesDefinition.AreNotValueTypes()); + public TNextElement AreNotEnums() => CreateNextElement(TypePredicatesDefinition.AreNotEnums()); + public TNextElement AreNotStructs() => CreateNextElement(TypePredicatesDefinition.AreNotStructs()); + + public TNextElement DoNotImplementInterface(Interface intf) => CreateNextElement(TypePredicatesDefinition.DoNotImplementInterface(intf)); + public TNextElement DoNotImplementInterface(Type intf) => CreateNextElement(TypePredicatesDefinition.DoNotImplementInterface(intf)); + + public TNextElement DoNotImplementAnyInterfaces() => DoNotImplementAnyInterfaces(new ObjectProvider()); + public TNextElement DoNotImplementAnyInterfaces(params Interface[] interfaces) => DoNotImplementAnyInterfaces(new ObjectProvider(interfaces)); + public TNextElement DoNotImplementAnyInterfaces(params Type[] interfaces) => DoNotImplementAnyInterfaces(new SystemTypeObjectProvider(interfaces)); + public TNextElement DoNotImplementAnyInterfaces(IEnumerable interfaces) => DoNotImplementAnyInterfaces(new ObjectProvider(interfaces)); + public TNextElement DoNotImplementAnyInterfaces(IEnumerable interfaces) => DoNotImplementAnyInterfaces(new SystemTypeObjectProvider(interfaces)); + public TNextElement DoNotImplementAnyInterfaces(IObjectProvider interfaces) => CreateNextElement(TypePredicatesDefinition.DoNotImplementAny(interfaces)); + + public TNextElement DoNotResideInNamespace(string fullName) => CreateNextElement(TypePredicatesDefinition.DoNotResideInNamespace(fullName)); + public TNextElement DoNotResideInNamespaceMatching(string pattern) => CreateNextElement(TypePredicatesDefinition.DoNotResideInNamespaceMatching(pattern)); + + public TNextElement DoNotResideInAssembly(string fullName) => CreateNextElement(TypePredicatesDefinition.DoNotResideInAssembly(fullName)); + public TNextElement DoNotResideInAssemblyMatching(string pattern) => CreateNextElement(TypePredicatesDefinition.DoNotResideInAssemblyMatching(pattern)); + public TNextElement DoNotResideInAssembly(System.Reflection.Assembly assembly, params System.Reflection.Assembly[] moreAssemblies) => CreateNextElement(TypePredicatesDefinition.DoNotResideInAssembly(assembly, moreAssemblies)); + public TNextElement DoNotResideInAssembly(Assembly assembly, params Assembly[] moreAssemblies) => CreateNextElement(TypePredicatesDefinition.DoNotResideInAssembly(assembly, moreAssemblies)); + + public TNextElement DoNotHavePropertyMemberWithName(string name) => CreateNextElement(TypePredicatesDefinition.DoNotHavePropertyMemberWithName(name)); + public TNextElement DoNotHaveFieldMemberWithName(string name) => CreateNextElement(TypePredicatesDefinition.DoNotHaveFieldMemberWithName(name)); + public TNextElement DoNotHaveMethodMemberWithName(string name) => CreateNextElement(TypePredicatesDefinition.DoNotHaveMethodMemberWithName(name)); + public TNextElement DoNotHaveMemberWithName(string name) => CreateNextElement(TypePredicatesDefinition.DoNotHaveMemberWithName(name)); + + public TNextElement AreNotNested() => CreateNextElement(TypePredicatesDefinition.AreNotNested()); + // csharpier-ignore-end + } +} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/AddAttributeCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/AddAttributeCondition.cs new file mode 100644 index 000000000..faacb61c2 --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/AddAttributeCondition.cs @@ -0,0 +1,26 @@ +using ArchUnitNET.Domain; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Attributes +{ + public abstract class AddAttributeCondition + : AddTypeCondition, + IAddAttributeCondition + { + internal AddAttributeCondition(IArchRuleCreator ruleCreator) + : base(ruleCreator) { } + + public TNextElement BeAbstract() => + CreateNextElement(AttributeConditionsDefinition.BeAbstract()); + + public TNextElement BeSealed() => + CreateNextElement(AttributeConditionsDefinition.BeSealed()); + + //Negations + + public TNextElement NotBeAbstract() => + CreateNextElement(AttributeConditionsDefinition.NotBeAbstract()); + + public TNextElement NotBeSealed() => + CreateNextElement(AttributeConditionsDefinition.NotBeSealed()); + } +} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/AddAttributePredicate.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/AddAttributePredicate.cs new file mode 100644 index 000000000..979f3cf73 --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/AddAttributePredicate.cs @@ -0,0 +1,25 @@ +using ArchUnitNET.Domain; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Attributes +{ + public abstract class AddAttributePredicate + : AddTypePredicate, + IAddAttributePredicate + where TRelatedType : ICanBeAnalyzed + { + internal AddAttributePredicate(IArchRuleCreator ruleCreator) + : base(ruleCreator) { } + + // csharpier-ignore-start + + public TNextElement AreAbstract() => CreateNextElement(AttributePredicatesDefinition.AreAbstract()); + public TNextElement AreSealed() => CreateNextElement(AttributePredicatesDefinition.AreSealed()); + + //Negations + + public TNextElement AreNotAbstract() => CreateNextElement(AttributePredicatesDefinition.AreNotAbstract()); + public TNextElement AreNotSealed() => CreateNextElement(AttributePredicatesDefinition.AreNotSealed()); + + // csharpier-ignore-end + } +} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/AttributesShould.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/AttributesShould.cs index 944d2f700..380721fcd 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/AttributesShould.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/AttributesShould.cs @@ -1,37 +1,18 @@ using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Conditions; namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Attributes { - public class AttributesShould - : TypesShould, - IComplexAttributeConditions + public class AttributesShould : AddAttributeCondition { public AttributesShould(IArchRuleCreator ruleCreator) : base(ruleCreator) { } - public AttributesShouldConjunction BeAbstract() + protected override AttributesShouldConjunction CreateNextElement( + IOrderedCondition condition + ) { - _ruleCreator.AddCondition(AttributeConditionsDefinition.BeAbstract()); - return new AttributesShouldConjunction(_ruleCreator); - } - - public AttributesShouldConjunction BeSealed() - { - _ruleCreator.AddCondition(AttributeConditionsDefinition.BeSealed()); - return new AttributesShouldConjunction(_ruleCreator); - } - - //Negations - - public AttributesShouldConjunction NotBeAbstract() - { - _ruleCreator.AddCondition(AttributeConditionsDefinition.NotBeAbstract()); - return new AttributesShouldConjunction(_ruleCreator); - } - - public AttributesShouldConjunction NotBeSealed() - { - _ruleCreator.AddCondition(AttributeConditionsDefinition.NotBeSealed()); + _ruleCreator.AddCondition(condition); return new AttributesShouldConjunction(_ruleCreator); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/GivenAttributesThat.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/GivenAttributesThat.cs index ba28b796c..e19227d8c 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/GivenAttributesThat.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/GivenAttributesThat.cs @@ -1,37 +1,19 @@ using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Predicates; namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Attributes { - public class GivenAttributesThat - : GivenTypesThat, - IAttributePredicates + public sealed class GivenAttributesThat + : AddAttributePredicate { public GivenAttributesThat(IArchRuleCreator ruleCreator) : base(ruleCreator) { } - public GivenAttributesConjunction AreAbstract() + protected override GivenAttributesConjunction CreateNextElement( + IPredicate predicate + ) { - _ruleCreator.AddPredicate(AttributePredicatesDefinition.AreAbstract()); - return new GivenAttributesConjunction(_ruleCreator); - } - - public GivenAttributesConjunction AreSealed() - { - _ruleCreator.AddPredicate(AttributePredicatesDefinition.AreSealed()); - return new GivenAttributesConjunction(_ruleCreator); - } - - //Negations - - public GivenAttributesConjunction AreNotAbstract() - { - _ruleCreator.AddPredicate(AttributePredicatesDefinition.AreNotAbstract()); - return new GivenAttributesConjunction(_ruleCreator); - } - - public GivenAttributesConjunction AreNotSealed() - { - _ruleCreator.AddPredicate(AttributePredicatesDefinition.AreNotSealed()); + _ruleCreator.AddPredicate(predicate); return new GivenAttributesConjunction(_ruleCreator); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAttributeConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAddAttributeCondition.cs similarity index 71% rename from ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAttributeConditions.cs rename to ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAddAttributeCondition.cs index fe940f415..57ee6d8bf 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAttributeConditions.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAddAttributeCondition.cs @@ -2,8 +2,8 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Attributes { - public interface IAttributeConditions - : ITypeConditions + public interface IAddAttributeCondition + : IAddTypeCondition where TRuleType : ICanBeAnalyzed { TReturnType BeAbstract(); diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAttributePredicates.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAddAttributePredicate.cs similarity index 71% rename from ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAttributePredicates.cs rename to ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAddAttributePredicate.cs index e2b4cec0a..3685cf673 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAttributePredicates.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAddAttributePredicate.cs @@ -2,8 +2,8 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Attributes { - public interface IAttributePredicates - : ITypePredicates + public interface IAddAttributePredicate + : IAddTypePredicate where TRuleType : ICanBeAnalyzed { TReturnType AreAbstract(); diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IComplexAttributeConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IComplexAttributeConditions.cs deleted file mode 100644 index 7a079f333..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IComplexAttributeConditions.cs +++ /dev/null @@ -1,8 +0,0 @@ -using ArchUnitNET.Domain; - -namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Attributes -{ - public interface IComplexAttributeConditions - : IComplexTypeConditions, - IAttributeConditions { } -} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/ShouldRelateToAttributesThat.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/ShouldRelateToAttributesThat.cs index b18b0f7b9..5b3644714 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/ShouldRelateToAttributesThat.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/ShouldRelateToAttributesThat.cs @@ -1,41 +1,20 @@ using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Predicates; using static ArchUnitNET.Fluent.Syntax.ConjunctionFactory; namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Attributes { - public class ShouldRelateToAttributesThat - : ShouldRelateToTypesThat, - IAttributePredicates + public sealed class ShouldRelateToAttributesThat + : AddAttributePredicate where TRuleType : ICanBeAnalyzed - where TRuleTypeShouldConjunction : SyntaxElement { public ShouldRelateToAttributesThat(IArchRuleCreator ruleCreator) : base(ruleCreator) { } - public TRuleTypeShouldConjunction AreAbstract() + protected override TNextElement CreateNextElement(IPredicate predicate) { - _ruleCreator.ContinueComplexCondition(AttributePredicatesDefinition.AreAbstract()); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreSealed() - { - _ruleCreator.ContinueComplexCondition(AttributePredicatesDefinition.AreSealed()); - return Create(_ruleCreator); - } - - //Negations - - public TRuleTypeShouldConjunction AreNotAbstract() - { - _ruleCreator.ContinueComplexCondition(AttributePredicatesDefinition.AreNotAbstract()); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotSealed() - { - _ruleCreator.ContinueComplexCondition(AttributePredicatesDefinition.AreNotSealed()); - return Create(_ruleCreator); + _ruleCreator.ContinueComplexCondition(predicate); + return Create(_ruleCreator); } } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/AddClassCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/AddClassCondition.cs new file mode 100644 index 000000000..53455f949 --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/AddClassCondition.cs @@ -0,0 +1,36 @@ +using ArchUnitNET.Domain; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Classes +{ + public abstract class AddClassCondition + : AddTypeCondition, + IAddClassCondition + { + public AddClassCondition(IArchRuleCreator ruleCreator) + : base(ruleCreator) { } + + public TNextElement BeAbstract() => + CreateNextElement(ClassConditionsDefinition.BeAbstract()); + + public TNextElement BeSealed() => CreateNextElement(ClassConditionsDefinition.BeSealed()); + + public TNextElement BeRecord() => CreateNextElement(ClassConditionsDefinition.BeRecord()); + + public TNextElement BeImmutable() => + CreateNextElement(ClassConditionsDefinition.BeImmutable()); + + //Negations + + public TNextElement NotBeAbstract() => + CreateNextElement(ClassConditionsDefinition.NotBeAbstract()); + + public TNextElement NotBeSealed() => + CreateNextElement(ClassConditionsDefinition.NotBeSealed()); + + public TNextElement NotBeRecord() => + CreateNextElement(ClassConditionsDefinition.NotBeRecord()); + + public TNextElement NotBeImmutable() => + CreateNextElement(ClassConditionsDefinition.NotBeImmutable()); + } +} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/AddClassPredicate.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/AddClassPredicate.cs new file mode 100644 index 000000000..92d817b96 --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/AddClassPredicate.cs @@ -0,0 +1,29 @@ +using ArchUnitNET.Domain; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Classes +{ + public abstract class AddClassPredicate + : AddTypePredicate, + IAddClassPredicate + where TRelatedType : ICanBeAnalyzed + { + internal AddClassPredicate(IArchRuleCreator ruleCreator) + : base(ruleCreator) { } + + // csharpier-ignore-start + + public TNextElement AreAbstract() => CreateNextElement(ClassPredicatesDefinition.AreAbstract()); + public TNextElement AreSealed() => CreateNextElement(ClassPredicatesDefinition.AreSealed()); + public TNextElement AreRecord() => CreateNextElement(ClassPredicatesDefinition.AreRecord()); + public TNextElement AreImmutable() => CreateNextElement(ClassPredicatesDefinition.AreImmutable()); + + //Negations + + public TNextElement AreNotAbstract() => CreateNextElement(ClassPredicatesDefinition.AreNotAbstract()); + public TNextElement AreNotSealed() => CreateNextElement(ClassPredicatesDefinition.AreNotSealed()); + public TNextElement AreNotRecord() => CreateNextElement(ClassPredicatesDefinition.AreNotRecord()); + public TNextElement AreNotImmutable() => CreateNextElement(ClassPredicatesDefinition.AreNotImmutable()); + + // csharpier-ignore-end + } +} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/ClassesShould.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/ClassesShould.cs index 2788f9597..0f3d3c0ac 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/ClassesShould.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/ClassesShould.cs @@ -1,61 +1,18 @@ using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Conditions; namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Classes { - public class ClassesShould - : TypesShould, - IComplexClassConditions + public class ClassesShould : AddClassCondition { public ClassesShould(IArchRuleCreator ruleCreator) : base(ruleCreator) { } - public ClassesShouldConjunction BeAbstract() + protected override ClassesShouldConjunction CreateNextElement( + IOrderedCondition condition + ) { - _ruleCreator.AddCondition(ClassConditionsDefinition.BeAbstract()); - return new ClassesShouldConjunction(_ruleCreator); - } - - public ClassesShouldConjunction BeSealed() - { - _ruleCreator.AddCondition(ClassConditionsDefinition.BeSealed()); - return new ClassesShouldConjunction(_ruleCreator); - } - - public ClassesShouldConjunction BeRecord() - { - _ruleCreator.AddCondition(ClassConditionsDefinition.BeRecord()); - return new ClassesShouldConjunction(_ruleCreator); - } - - public ClassesShouldConjunction BeImmutable() - { - _ruleCreator.AddCondition(ClassConditionsDefinition.BeImmutable()); - return new ClassesShouldConjunction(_ruleCreator); - } - - //Negations - - public ClassesShouldConjunction NotBeAbstract() - { - _ruleCreator.AddCondition(ClassConditionsDefinition.NotBeAbstract()); - return new ClassesShouldConjunction(_ruleCreator); - } - - public ClassesShouldConjunction NotBeSealed() - { - _ruleCreator.AddCondition(ClassConditionsDefinition.NotBeSealed()); - return new ClassesShouldConjunction(_ruleCreator); - } - - public ClassesShouldConjunction NotBeRecord() - { - _ruleCreator.AddCondition(ClassConditionsDefinition.NotBeRecord()); - return new ClassesShouldConjunction(_ruleCreator); - } - - public ClassesShouldConjunction NotBeImmutable() - { - _ruleCreator.AddCondition(ClassConditionsDefinition.NotBeImmutable()); + _ruleCreator.AddCondition(condition); return new ClassesShouldConjunction(_ruleCreator); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/GivenClassesThat.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/GivenClassesThat.cs index c3c4b1e37..8a8dd2b11 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/GivenClassesThat.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/GivenClassesThat.cs @@ -1,61 +1,16 @@ using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Predicates; namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Classes { - public class GivenClassesThat - : GivenTypesThat, - IClassPredicates + public sealed class GivenClassesThat : AddClassPredicate { public GivenClassesThat(IArchRuleCreator ruleCreator) : base(ruleCreator) { } - public GivenClassesConjunction AreAbstract() + protected override GivenClassesConjunction CreateNextElement(IPredicate predicate) { - _ruleCreator.AddPredicate(ClassPredicatesDefinition.AreAbstract()); - return new GivenClassesConjunction(_ruleCreator); - } - - public GivenClassesConjunction AreSealed() - { - _ruleCreator.AddPredicate(ClassPredicatesDefinition.AreSealed()); - return new GivenClassesConjunction(_ruleCreator); - } - - public GivenClassesConjunction AreRecord() - { - _ruleCreator.AddPredicate(ClassPredicatesDefinition.AreRecord()); - return new GivenClassesConjunction(_ruleCreator); - } - - public GivenClassesConjunction AreImmutable() - { - _ruleCreator.AddPredicate(ClassPredicatesDefinition.AreImmutable()); - return new GivenClassesConjunction(_ruleCreator); - } - - //Negations - - public GivenClassesConjunction AreNotAbstract() - { - _ruleCreator.AddPredicate(ClassPredicatesDefinition.AreNotAbstract()); - return new GivenClassesConjunction(_ruleCreator); - } - - public GivenClassesConjunction AreNotSealed() - { - _ruleCreator.AddPredicate(ClassPredicatesDefinition.AreNotSealed()); - return new GivenClassesConjunction(_ruleCreator); - } - - public GivenClassesConjunction AreNotRecord() - { - _ruleCreator.AddPredicate(ClassPredicatesDefinition.AreNotRecord()); - return new GivenClassesConjunction(_ruleCreator); - } - - public GivenClassesConjunction AreNotImmutable() - { - _ruleCreator.AddPredicate(ClassPredicatesDefinition.AreNotImmutable()); + _ruleCreator.AddPredicate(predicate); return new GivenClassesConjunction(_ruleCreator); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IClassConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IAddClassCondition.cs similarity index 75% rename from ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IClassConditions.cs rename to ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IAddClassCondition.cs index 1f43dd703..1d431534d 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IClassConditions.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IAddClassCondition.cs @@ -2,8 +2,8 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Classes { - public interface IClassConditions - : ITypeConditions + public interface IAddClassCondition + : IAddTypeCondition where TRuleType : ICanBeAnalyzed { TReturnType BeAbstract(); diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IClassPredicates.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IAddClassPredicate.cs similarity index 76% rename from ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IClassPredicates.cs rename to ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IAddClassPredicate.cs index 7249af1f8..855a31bf6 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IClassPredicates.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IAddClassPredicate.cs @@ -2,8 +2,8 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Classes { - public interface IClassPredicates - : ITypePredicates + public interface IAddClassPredicate + : IAddTypePredicate where TRuleType : ICanBeAnalyzed { TReturnType AreAbstract(); diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IComplexClassConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IComplexClassConditions.cs deleted file mode 100644 index 9b0f5ad98..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IComplexClassConditions.cs +++ /dev/null @@ -1,8 +0,0 @@ -using ArchUnitNET.Domain; - -namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Classes -{ - public interface IComplexClassConditions - : IComplexTypeConditions, - IClassConditions { } -} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/ShouldRelateToClassesThat.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/ShouldRelateToClassesThat.cs index 2344991e1..e11e9aa85 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/ShouldRelateToClassesThat.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/ShouldRelateToClassesThat.cs @@ -1,53 +1,20 @@ using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Predicates; using static ArchUnitNET.Fluent.Syntax.ConjunctionFactory; namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Classes { - public class ShouldRelateToClassesThat - : ShouldRelateToTypesThat, - IClassPredicates - where TRuleTypeShouldConjunction : SyntaxElement + public sealed class ShouldRelateToClassesThat + : AddClassPredicate where TRuleType : ICanBeAnalyzed { public ShouldRelateToClassesThat(IArchRuleCreator ruleCreator) : base(ruleCreator) { } - public TRuleTypeShouldConjunction AreAbstract() + protected override TNextElement CreateNextElement(IPredicate predicate) { - _ruleCreator.ContinueComplexCondition(ClassPredicatesDefinition.AreAbstract()); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreSealed() - { - _ruleCreator.ContinueComplexCondition(ClassPredicatesDefinition.AreSealed()); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreImmutable() - { - _ruleCreator.ContinueComplexCondition(ClassPredicatesDefinition.AreImmutable()); - return Create(_ruleCreator); - } - - //Negations - - public TRuleTypeShouldConjunction AreNotAbstract() - { - _ruleCreator.ContinueComplexCondition(ClassPredicatesDefinition.AreNotAbstract()); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotSealed() - { - _ruleCreator.ContinueComplexCondition(ClassPredicatesDefinition.AreNotSealed()); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotImmutable() - { - _ruleCreator.ContinueComplexCondition(ClassPredicatesDefinition.AreNotImmutable()); - return Create(_ruleCreator); + _ruleCreator.ContinueComplexCondition(predicate); + return Create(_ruleCreator); } } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/GivenTypes.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/GivenTypes.cs index ebdd0efac..274de1293 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/GivenTypes.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/GivenTypes.cs @@ -2,12 +2,7 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types { - public class GivenTypes - : GivenObjects< - GivenTypesThat, - TypesShould, - IType - > + public class GivenTypes : GivenObjects { public GivenTypes(IArchRuleCreator ruleCreator) : base(ruleCreator) { } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/GivenTypesConjunction.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/GivenTypesConjunction.cs index 86ba1180c..6da9dbe92 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/GivenTypesConjunction.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/GivenTypesConjunction.cs @@ -4,8 +4,8 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types { public class GivenTypesConjunction : GivenObjectsConjunction< - GivenTypesThat, - TypesShould, + GivenTypesThat, + TypesShould, GivenTypesConjunctionWithDescription, IType > diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/GivenTypesConjunctionWithDescription.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/GivenTypesConjunctionWithDescription.cs index 5f01e5f56..1c5b4c7eb 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/GivenTypesConjunctionWithDescription.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/GivenTypesConjunctionWithDescription.cs @@ -3,11 +3,7 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types { public class GivenTypesConjunctionWithDescription - : GivenObjectsConjunctionWithDescription< - GivenTypesThat, - TypesShould, - IType - > + : GivenObjectsConjunctionWithDescription { public GivenTypesConjunctionWithDescription(IArchRuleCreator ruleCreator) : base(ruleCreator) { } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/GivenTypesThat.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/GivenTypesThat.cs index 3444079eb..e586d57b1 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/GivenTypesThat.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/GivenTypesThat.cs @@ -8,424 +8,15 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types { - public class GivenTypesThat - : GivenObjectsThat, - ITypePredicates - where TRuleType : IType + public sealed class GivenTypesThat : AddTypePredicate { - // ReSharper disable once MemberCanBeProtected.Global - public GivenTypesThat(IArchRuleCreator ruleCreator) + public GivenTypesThat(IArchRuleCreator ruleCreator) : base(ruleCreator) { } - public TGivenRuleTypeConjunction Are(Type firstType, params Type[] moreTypes) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.Are(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction Are(IEnumerable types) - { - _ruleCreator.AddPredicate(TypePredicatesDefinition.Are(types)); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreAssignableTo(IType firstType, params IType[] moreTypes) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.AreAssignableTo(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreAssignableTo(Type firstType, params Type[] moreTypes) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.AreAssignableTo(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreAssignableTo(IObjectProvider types) - { - _ruleCreator.AddPredicate(TypePredicatesDefinition.AreAssignableTo(types)); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreAssignableTo(IEnumerable types) - { - _ruleCreator.AddPredicate(TypePredicatesDefinition.AreAssignableTo(types)); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreAssignableTo(IEnumerable types) - { - _ruleCreator.AddPredicate(TypePredicatesDefinition.AreAssignableTo(types)); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreNestedIn(IType firstType, params IType[] moreTypes) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.AreNestedIn(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreNestedIn(Type firstType, params Type[] moreTypes) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.AreNestedIn(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreNestedIn(IObjectProvider types) - { - _ruleCreator.AddPredicate(TypePredicatesDefinition.AreNestedIn(types)); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreNestedIn(IEnumerable types) - { - _ruleCreator.AddPredicate(TypePredicatesDefinition.AreNestedIn(types)); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreNestedIn(IEnumerable types) - { - _ruleCreator.AddPredicate(TypePredicatesDefinition.AreNestedIn(types)); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreValueTypes() - { - _ruleCreator.AddPredicate(TypePredicatesDefinition.AreValueTypes()); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreEnums() - { - _ruleCreator.AddPredicate(TypePredicatesDefinition.AreEnums()); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreStructs() - { - _ruleCreator.AddPredicate(TypePredicatesDefinition.AreStructs()); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction ImplementInterface(Interface intf) - { - _ruleCreator.AddPredicate(TypePredicatesDefinition.ImplementInterface(intf)); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction ImplementInterface(Type intf) - { - _ruleCreator.AddPredicate(TypePredicatesDefinition.ImplementInterface(intf)); - return Create(_ruleCreator); - } - - // csharpier-ignore-start - public TGivenRuleTypeConjunction ImplementAnyInterfaces() => ImplementAnyInterfaces(new ObjectProvider()); - public TGivenRuleTypeConjunction ImplementAnyInterfaces(params Interface[] interfaces) => ImplementAnyInterfaces(new ObjectProvider(interfaces)); - public TGivenRuleTypeConjunction ImplementAnyInterfaces(params Type[] interfaces) => ImplementAnyInterfaces(new SystemTypeObjectProvider(interfaces)); - public TGivenRuleTypeConjunction ImplementAnyInterfaces(IEnumerable interfaces) => ImplementAnyInterfaces(new ObjectProvider(interfaces)); - public TGivenRuleTypeConjunction ImplementAnyInterfaces(IEnumerable interfaces) => ImplementAnyInterfaces(new SystemTypeObjectProvider(interfaces)); - public TGivenRuleTypeConjunction ImplementAnyInterfaces(IObjectProvider interfaces) => Handle(TypePredicatesDefinition.ImplementAny(interfaces)); - // csharpier-ignore-end - - public TGivenRuleTypeConjunction ResideInNamespace(string fullName) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.ResideInNamespace(fullName) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction ResideInNamespaceMatching(string pattern) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.ResideInNamespaceMatching(pattern) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction ResideInAssembly(string fullName) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.ResideInAssembly(fullName) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction ResideInAssemblyMatching(string pattern) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.ResideInAssemblyMatching(pattern) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction ResideInAssembly( - Assembly assembly, - params Assembly[] moreAssemblies - ) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.ResideInAssembly(assembly, moreAssemblies) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction ResideInAssembly( - Domain.Assembly assembly, - params Domain.Assembly[] moreAssemblies - ) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.ResideInAssembly(assembly, moreAssemblies) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction HavePropertyMemberWithName(string name) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.HavePropertyMemberWithName(name) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction HaveFieldMemberWithName(string name) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.HaveFieldMemberWithName(name) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction HaveMethodMemberWithName(string name) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.HaveMethodMemberWithName(name) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction HaveMemberWithName(string name) - { - _ruleCreator.AddPredicate(TypePredicatesDefinition.HaveMemberWithName(name)); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreNested() - { - _ruleCreator.AddPredicate(TypePredicatesDefinition.AreNested()); - return Create(_ruleCreator); - } - - //Negations - - public TGivenRuleTypeConjunction AreNot(Type firstType, params Type[] moreTypes) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.AreNot(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreNot(IEnumerable types) - { - _ruleCreator.AddPredicate(TypePredicatesDefinition.AreNot(types)); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreNotAssignableTo( - IType firstType, - params IType[] moreTypes - ) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.AreNotAssignableTo(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreNotAssignableTo(Type firstType, params Type[] moreTypes) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.AreNotAssignableTo(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreNotAssignableTo(IObjectProvider types) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.AreNotAssignableTo(types) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreNotAssignableTo(IEnumerable types) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.AreNotAssignableTo(types) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreNotAssignableTo(IEnumerable types) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.AreNotAssignableTo(types) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreNotValueTypes() - { - _ruleCreator.AddPredicate(TypePredicatesDefinition.AreNotValueTypes()); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreNotEnums() - { - _ruleCreator.AddPredicate(TypePredicatesDefinition.AreNotEnums()); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreNotStructs() - { - _ruleCreator.AddPredicate(TypePredicatesDefinition.AreNotStructs()); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction DoNotImplementInterface(Interface intf) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.DoNotImplementInterface(intf) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction DoNotImplementInterface(Type intf) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.DoNotImplementInterface(intf) - ); - return Create(_ruleCreator); - } - - // csharpier-ignore-start - public TGivenRuleTypeConjunction DoNotImplementAnyInterfaces() => DoNotImplementAnyInterfaces(new ObjectProvider()); - public TGivenRuleTypeConjunction DoNotImplementAnyInterfaces(params Interface[] interfaces) => DoNotImplementAnyInterfaces(new ObjectProvider(interfaces)); - public TGivenRuleTypeConjunction DoNotImplementAnyInterfaces(params Type[] interfaces) => DoNotImplementAnyInterfaces(new SystemTypeObjectProvider(interfaces)); - public TGivenRuleTypeConjunction DoNotImplementAnyInterfaces(IEnumerable interfaces) => DoNotImplementAnyInterfaces(new ObjectProvider(interfaces)); - public TGivenRuleTypeConjunction DoNotImplementAnyInterfaces(IEnumerable interfaces) => DoNotImplementAnyInterfaces(new SystemTypeObjectProvider(interfaces)); - public TGivenRuleTypeConjunction DoNotImplementAnyInterfaces(IObjectProvider interfaces) => Handle(TypePredicatesDefinition.DoNotImplementAny(interfaces)); - // csharpier-ignore-end - - public TGivenRuleTypeConjunction DoNotResideInNamespace(string fullName) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.DoNotResideInNamespace(fullName) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction DoNotResideInNamespaceMatching(string pattern) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.DoNotResideInNamespaceMatching(pattern) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction DoNotResideInAssembly(string fullName) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.DoNotResideInAssembly(fullName) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction DoNotResideInAssemblyMatching(string pattern) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.DoNotResideInAssemblyMatching(pattern) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction DoNotResideInAssembly( - Assembly assembly, - params Assembly[] moreAssemblies - ) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.DoNotResideInAssembly(assembly, moreAssemblies) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction DoNotResideInAssembly( - Domain.Assembly assembly, - params Domain.Assembly[] moreAssemblies - ) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.DoNotResideInAssembly(assembly, moreAssemblies) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction DoNotHavePropertyMemberWithName(string name) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.DoNotHavePropertyMemberWithName(name) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction DoNotHaveFieldMemberWithName(string name) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.DoNotHaveFieldMemberWithName(name) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction DoNotHaveMethodMemberWithName(string name) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.DoNotHaveMethodMemberWithName(name) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction DoNotHaveMemberWithName(string name) - { - _ruleCreator.AddPredicate( - TypePredicatesDefinition.DoNotHaveMemberWithName(name) - ); - return Create(_ruleCreator); - } - - public TGivenRuleTypeConjunction AreNotNested() - { - _ruleCreator.AddPredicate(TypePredicatesDefinition.AreNotNested()); - return Create(_ruleCreator); - } - - private TGivenRuleTypeConjunction Handle(IPredicate predicate) + protected override GivenTypesConjunction CreateNextElement(IPredicate predicate) { _ruleCreator.AddPredicate(predicate); - return Create(_ruleCreator); + return new GivenTypesConjunction(_ruleCreator); } } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/ITypeConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/IAddTypeCondition.cs similarity index 87% rename from ArchUnitNET/Fluent/Syntax/Elements/Types/ITypeConditions.cs rename to ArchUnitNET/Fluent/Syntax/Elements/Types/IAddTypeCondition.cs index ef631f0e3..76c10ed40 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/ITypeConditions.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/IAddTypeCondition.cs @@ -1,12 +1,13 @@ using System; using System.Collections.Generic; using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Syntax.Elements.Types.Interfaces; using Assembly = System.Reflection.Assembly; namespace ArchUnitNET.Fluent.Syntax.Elements.Types { - public interface ITypeConditions - : IObjectConditions + public interface IAddTypeCondition + : IAddObjectCondition where TRuleType : ICanBeAnalyzed { TReturnType Be(Type firstType, params Type[] moreTypes); @@ -17,6 +18,8 @@ public interface ITypeConditions TReturnType BeAssignableTo(IObjectProvider types); TReturnType BeAssignableTo(IEnumerable types); TReturnType BeAssignableTo(IEnumerable types); + ShouldRelateToTypesThat BeAssignableToTypesThat(); + TReturnType BeValueTypes(); TReturnType BeEnums(); TReturnType BeStructs(); @@ -30,6 +33,7 @@ public interface ITypeConditions TReturnType ImplementAnyInterfaces(IEnumerable interfaces); TReturnType ImplementAnyInterfaces(IEnumerable interfaces); TReturnType ImplementAnyInterfaces(IObjectProvider interfaces); + ShouldRelateToInterfacesThat ImplementAnyInterfacesThat(); TReturnType ResideInNamespace(string fullName); TReturnType ResideInNamespaceMatching(string pattern); @@ -41,10 +45,12 @@ TReturnType ResideInAssembly( Domain.Assembly assembly, params Domain.Assembly[] moreAssemblies ); + TReturnType HavePropertyMemberWithName(string name); TReturnType HaveFieldMemberWithName(string name); TReturnType HaveMethodMemberWithName(string name); TReturnType HaveMemberWithName(string name); + TReturnType BeNested(); //Negations @@ -57,6 +63,8 @@ params Domain.Assembly[] moreAssemblies TReturnType NotBeAssignableTo(IObjectProvider types); TReturnType NotBeAssignableTo(IEnumerable types); TReturnType NotBeAssignableTo(IEnumerable types); + ShouldRelateToTypesThat NotBeAssignableToTypesThat(); + TReturnType NotBeValueTypes(); TReturnType NotBeEnums(); TReturnType NotBeStructs(); @@ -70,6 +78,7 @@ params Domain.Assembly[] moreAssemblies TReturnType NotImplementAnyInterfaces(IEnumerable interfaces); TReturnType NotImplementAnyInterfaces(IEnumerable interfaces); TReturnType NotImplementAnyInterfaces(IObjectProvider interfaces); + ShouldRelateToInterfacesThat NotImplementAnyInterfacesThat(); TReturnType NotResideInNamespace(string fullName); TReturnType NotResideInNamespaceMatching(string pattern); @@ -80,10 +89,12 @@ TReturnType NotResideInAssembly( Domain.Assembly assembly, params Domain.Assembly[] moreAssemblies ); + TReturnType NotHavePropertyMemberWithName(string name); TReturnType NotHaveFieldMemberWithName(string name); TReturnType NotHaveMethodMemberWithName(string name); TReturnType NotHaveMemberWithName(string name); + TReturnType NotBeNested(); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/ITypePredicates.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/IAddTypePredicate.cs similarity index 97% rename from ArchUnitNET/Fluent/Syntax/Elements/Types/ITypePredicates.cs rename to ArchUnitNET/Fluent/Syntax/Elements/Types/IAddTypePredicate.cs index 03449a678..026c513e8 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/ITypePredicates.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/IAddTypePredicate.cs @@ -5,8 +5,8 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types { - public interface ITypePredicates - : IObjectPredicates + public interface IAddTypePredicate + : IAddObjectPredicate where TRuleType : ICanBeAnalyzed { TReturnType Are(Type firstType, params Type[] moreTypes); diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/IComplexTypeConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/IComplexTypeConditions.cs deleted file mode 100644 index 8a00b7455..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/IComplexTypeConditions.cs +++ /dev/null @@ -1,36 +0,0 @@ -using ArchUnitNET.Domain; -using ArchUnitNET.Fluent.Syntax.Elements.Types.Interfaces; - -namespace ArchUnitNET.Fluent.Syntax.Elements.Types -{ - public interface IComplexTypeConditions - : IComplexObjectConditions, - ITypeConditions - where TRuleType : IType - where TRuleTypeShouldConjunction : SyntaxElement - { - ShouldRelateToTypesThat< - TRuleTypeShouldConjunction, - IType, - TRuleType - > BeAssignableToTypesThat(); - - ShouldRelateToInterfacesThat< - TRuleTypeShouldConjunction, - TRuleType - > ImplementAnyInterfacesThat(); - - //Negations - - ShouldRelateToTypesThat< - TRuleTypeShouldConjunction, - IType, - TRuleType - > NotBeAssignableToTypesThat(); - - ShouldRelateToInterfacesThat< - TRuleTypeShouldConjunction, - TRuleType - > NotImplementAnyInterfacesThat(); - } -} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/AddInterfaceCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/AddInterfaceCondition.cs new file mode 100644 index 000000000..b54f7ac4f --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/AddInterfaceCondition.cs @@ -0,0 +1,12 @@ +using ArchUnitNET.Domain; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Interfaces +{ + public abstract class AddInterfaceCondition + : AddTypeCondition, + IAddInterfaceCondition + { + internal AddInterfaceCondition(IArchRuleCreator ruleCreator) + : base(ruleCreator) { } + } +} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/AddInterfacePredicate.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/AddInterfacePredicate.cs new file mode 100644 index 000000000..57d691219 --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/AddInterfacePredicate.cs @@ -0,0 +1,13 @@ +using ArchUnitNET.Domain; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Interfaces +{ + public abstract class AddInterfacePredicate + : AddTypePredicate, + IAddInterfacePredicate + where TRelatedType : ICanBeAnalyzed + { + internal AddInterfacePredicate(IArchRuleCreator ruleCreator) + : base(ruleCreator) { } + } +} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/GivenInterfacesThat.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/GivenInterfacesThat.cs index 83083ffdb..4401db0e0 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/GivenInterfacesThat.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/GivenInterfacesThat.cs @@ -1,12 +1,20 @@ using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Predicates; namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Interfaces { - public class GivenInterfacesThat - : GivenTypesThat, - IInterfacePredicates + public sealed class GivenInterfacesThat + : AddInterfacePredicate { public GivenInterfacesThat(IArchRuleCreator ruleCreator) : base(ruleCreator) { } + + protected override GivenInterfacesConjunction CreateNextElement( + IPredicate predicate + ) + { + _ruleCreator.AddPredicate(predicate); + return new GivenInterfacesConjunction(_ruleCreator); + } } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IInterfacePredicates.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IAddInterfaceCondition.cs similarity index 54% rename from ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IInterfacePredicates.cs rename to ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IAddInterfaceCondition.cs index 5975ed995..1000e53a4 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IInterfacePredicates.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IAddInterfaceCondition.cs @@ -2,7 +2,7 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Interfaces { - public interface IInterfacePredicates - : ITypePredicates + public interface IAddInterfaceCondition + : IAddTypeCondition where TRuleType : ICanBeAnalyzed { } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IInterfaceConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IAddInterfacePredicate.cs similarity index 53% rename from ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IInterfaceConditions.cs rename to ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IAddInterfacePredicate.cs index d095a1ad0..447258ef8 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IInterfaceConditions.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IAddInterfacePredicate.cs @@ -2,7 +2,7 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Interfaces { - public interface IInterfaceConditions - : ITypeConditions + public interface IAddInterfacePredicate + : IAddTypePredicate where TRuleType : ICanBeAnalyzed { } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IComplexInterfaceConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IComplexInterfaceConditions.cs deleted file mode 100644 index ea822978c..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IComplexInterfaceConditions.cs +++ /dev/null @@ -1,8 +0,0 @@ -using ArchUnitNET.Domain; - -namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Interfaces -{ - public interface IComplexInterfaceConditions - : IComplexTypeConditions, - IInterfaceConditions { } -} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/InterfacesShould.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/InterfacesShould.cs index 5ed6a3f02..b89b6f005 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/InterfacesShould.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/InterfacesShould.cs @@ -1,12 +1,19 @@ using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Conditions; namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Interfaces { - public class InterfacesShould - : TypesShould, - IComplexInterfaceConditions + public class InterfacesShould : AddInterfaceCondition { public InterfacesShould(IArchRuleCreator ruleCreator) : base(ruleCreator) { } + + protected override InterfacesShouldConjunction CreateNextElement( + IOrderedCondition condition + ) + { + _ruleCreator.AddCondition(condition); + return new InterfacesShouldConjunction(_ruleCreator); + } } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/ShouldRelateToInterfacesThat.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/ShouldRelateToInterfacesThat.cs index 48462c619..8e75601c7 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/ShouldRelateToInterfacesThat.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/ShouldRelateToInterfacesThat.cs @@ -1,13 +1,20 @@ using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Predicates; +using static ArchUnitNET.Fluent.Syntax.ConjunctionFactory; namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Interfaces { - public class ShouldRelateToInterfacesThat - : ShouldRelateToTypesThat, - IInterfacePredicates + public sealed class ShouldRelateToInterfacesThat + : AddInterfacePredicate where TRuleType : ICanBeAnalyzed { public ShouldRelateToInterfacesThat(IArchRuleCreator ruleCreator) : base(ruleCreator) { } + + protected override TNextElement CreateNextElement(IPredicate predicate) + { + _ruleCreator.ContinueComplexCondition(predicate); + return Create(_ruleCreator); + } } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/ShouldRelateToTypesThat.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/ShouldRelateToTypesThat.cs index 7d273560c..fd9daa5d2 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/ShouldRelateToTypesThat.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/ShouldRelateToTypesThat.cs @@ -7,469 +7,14 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types { - public class ShouldRelateToTypesThat - : ShouldRelateToObjectsThat, - ITypePredicates - where TReferenceType : IType + public sealed class ShouldRelateToTypesThat + : AddTypePredicate where TRuleType : ICanBeAnalyzed { - // ReSharper disable once MemberCanBeProtected.Global public ShouldRelateToTypesThat(IArchRuleCreator ruleCreator) : base(ruleCreator) { } - public TRuleTypeShouldConjunction Are(Type firstType, params Type[] moreTypes) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.Are(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction Are(IEnumerable types) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.Are(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreAssignableTo(IType firstType, params IType[] moreTypes) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreAssignableTo(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreAssignableTo(Type firstType, params Type[] moreTypes) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreAssignableTo(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreAssignableTo(IObjectProvider types) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreAssignableTo(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreAssignableTo(IEnumerable types) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreAssignableTo(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreAssignableTo(IEnumerable types) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreAssignableTo(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNestedIn(IType firstType, params IType[] moreTypes) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreNestedIn(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNestedIn(Type firstType, params Type[] moreTypes) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreNestedIn(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNestedIn(IObjectProvider types) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreNestedIn(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNestedIn(IEnumerable types) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreNestedIn(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNestedIn(IEnumerable types) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreNestedIn(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreValueTypes() - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreValueTypes() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreEnums() - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreEnums() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreStructs() - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreStructs() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction ImplementInterface(Interface intf) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.ImplementInterface(intf) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction ImplementInterface(Type intf) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.ImplementInterface(intf) - ); - return Create(_ruleCreator); - } - - // csharpier-ignore-start - public TRuleTypeShouldConjunction ImplementAnyInterfaces() => ImplementAnyInterfaces(new ObjectProvider()); - public TRuleTypeShouldConjunction ImplementAnyInterfaces(params Interface[] interfaces) => ImplementAnyInterfaces(new ObjectProvider(interfaces)); - public TRuleTypeShouldConjunction ImplementAnyInterfaces(params Type[] interfaces) => ImplementAnyInterfaces(new SystemTypeObjectProvider(interfaces)); - public TRuleTypeShouldConjunction ImplementAnyInterfaces(IEnumerable interfaces) => ImplementAnyInterfaces(new ObjectProvider(interfaces)); - public TRuleTypeShouldConjunction ImplementAnyInterfaces(IEnumerable interfaces) => ImplementAnyInterfaces(new SystemTypeObjectProvider(interfaces)); - public TRuleTypeShouldConjunction ImplementAnyInterfaces(IObjectProvider interfaces) => Handle(TypePredicatesDefinition.ImplementAny(interfaces)); - // csharpier-ignore-end - - public TRuleTypeShouldConjunction ResideInNamespace(string fullName) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.ResideInNamespace(fullName) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction ResideInNamespaceMatching(string pattern) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.ResideInNamespaceMatching(pattern) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction ResideInAssembly(string fullName) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.ResideInAssembly(fullName) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction ResideInAssemblyMatching(string pattern) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.ResideInAssemblyMatching(pattern) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction ResideInAssembly( - Assembly assembly, - params Assembly[] moreAssemblies - ) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.ResideInAssembly(assembly, moreAssemblies) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction ResideInAssembly( - Domain.Assembly assembly, - params Domain.Assembly[] moreAssemblies - ) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.ResideInAssembly(assembly, moreAssemblies) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HavePropertyMemberWithName(string name) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.HaveMethodMemberWithName(name) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveFieldMemberWithName(string name) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.HaveFieldMemberWithName(name) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveMethodMemberWithName(string name) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.HaveFieldMemberWithName(name) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveMemberWithName(string name) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.HaveMemberWithName(name) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNested() - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreNested() - ); - return Create(_ruleCreator); - } - - //Negations - - public TRuleTypeShouldConjunction AreNot(Type firstType, params Type[] moreTypes) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreNot(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNot(IEnumerable types) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreNot(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotAssignableTo( - IType firstType, - params IType[] moreTypes - ) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreNotAssignableTo(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotAssignableTo( - Type firstType, - params Type[] moreTypes - ) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreNotAssignableTo(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotAssignableTo(IObjectProvider types) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreNotAssignableTo(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotAssignableTo(IEnumerable types) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreNotAssignableTo(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotAssignableTo(IEnumerable types) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreNotAssignableTo(types) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotValueTypes() - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreNotValueTypes() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotEnums() - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreNotEnums() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotStructs() - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreNotStructs() - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotImplementInterface(Interface intf) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.DoNotImplementInterface(intf) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotImplementInterface(Type intf) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.DoNotImplementInterface(intf) - ); - return Create(_ruleCreator); - } - - // csharpier-ignore-start - public TRuleTypeShouldConjunction DoNotImplementAnyInterfaces() => DoNotImplementAnyInterfaces(new ObjectProvider()); - public TRuleTypeShouldConjunction DoNotImplementAnyInterfaces(params Interface[] interfaces) => DoNotImplementAnyInterfaces(new ObjectProvider(interfaces)); - public TRuleTypeShouldConjunction DoNotImplementAnyInterfaces(params Type[] interfaces) => DoNotImplementAnyInterfaces(new SystemTypeObjectProvider(interfaces)); - public TRuleTypeShouldConjunction DoNotImplementAnyInterfaces(IEnumerable interfaces) => DoNotImplementAnyInterfaces(new ObjectProvider(interfaces)); - public TRuleTypeShouldConjunction DoNotImplementAnyInterfaces(IEnumerable interfaces) => DoNotImplementAnyInterfaces(new SystemTypeObjectProvider(interfaces)); - public TRuleTypeShouldConjunction DoNotImplementAnyInterfaces(IObjectProvider interfaces) => Handle(TypePredicatesDefinition.DoNotImplementAny(interfaces)); - // csharpier-ignore-end - - public TRuleTypeShouldConjunction DoNotResideInNamespace(string fullName) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.DoNotResideInNamespace(fullName) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotResideInNamespaceMatching(string pattern) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.DoNotResideInNamespaceMatching(pattern) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotResideInAssembly(string fullName) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.DoNotResideInAssembly(fullName) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotResideInAssemblyMatching(string pattern) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.DoNotResideInAssemblyMatching(pattern) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotResideInAssembly( - Assembly assembly, - params Assembly[] moreAssemblies - ) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.DoNotResideInAssembly( - assembly, - moreAssemblies - ) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotResideInAssembly( - Domain.Assembly assembly, - params Domain.Assembly[] moreAssemblies - ) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.DoNotResideInAssembly( - assembly, - moreAssemblies - ) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHavePropertyMemberWithName(string name) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.DoNotHavePropertyMemberWithName(name) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHaveFieldMemberWithName(string name) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.DoNotHaveFieldMemberWithName(name) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHaveMethodMemberWithName(string name) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.DoNotHaveMethodMemberWithName(name) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction DoNotHaveMemberWithName(string name) - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.DoNotHaveMethodMemberWithName(name) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AreNotNested() - { - _ruleCreator.ContinueComplexCondition( - TypePredicatesDefinition.AreNotNested() - ); - return Create(_ruleCreator); - } - - private TRuleTypeShouldConjunction Handle(IPredicate predicate) + protected override TRuleTypeShouldConjunction CreateNextElement(IPredicate predicate) { _ruleCreator.ContinueComplexCondition(predicate); return Create(_ruleCreator); diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/TypesShould.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/TypesShould.cs index f4fd44317..ef63639b5 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/TypesShould.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/TypesShould.cs @@ -9,506 +9,17 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types { - public class TypesShould - : ObjectsShould, - IComplexTypeConditions - where TRuleType : IType - where TRuleTypeShouldConjunction : SyntaxElement + public sealed class TypesShould : AddTypeCondition { - // ReSharper disable once MemberCanBeProtected.Global - public TypesShould(IArchRuleCreator ruleCreator) + public TypesShould(IArchRuleCreator ruleCreator) : base(ruleCreator) { } - public TRuleTypeShouldConjunction Be(Type firstType, params Type[] moreTypes) - { - _ruleCreator.AddCondition(TypeConditionsDefinition.Be(firstType, moreTypes)); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction Be(IEnumerable types) - { - _ruleCreator.AddCondition(TypeConditionsDefinition.Be(types)); - return Create(_ruleCreator); - } - - public ShouldRelateToTypesThat BeTypesThat() - { - _ruleCreator.BeginComplexCondition( - ArchRuleDefinition.Types(true), - TypeConditionsDefinition.BeTypesThat() - ); - return new ShouldRelateToTypesThat( - _ruleCreator - ); - } - - public TRuleTypeShouldConjunction BeAssignableTo(IType firstType, params IType[] moreTypes) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.BeAssignableTo(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction BeAssignableTo(Type firstType, params Type[] moreTypes) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.BeAssignableTo(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction BeAssignableTo(IObjectProvider types) - { - _ruleCreator.AddCondition(TypeConditionsDefinition.BeAssignableTo(types)); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction BeAssignableTo(IEnumerable types) - { - _ruleCreator.AddCondition(TypeConditionsDefinition.BeAssignableTo(types)); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction BeAssignableTo(IEnumerable types) - { - _ruleCreator.AddCondition(TypeConditionsDefinition.BeAssignableTo(types)); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction BeNestedIn(IType firstType, params IType[] moreTypes) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.BeNestedIn(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction BeNestedIn(Type firstType, params Type[] moreTypes) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.BeNestedIn(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction BeNestedIn(IObjectProvider types) - { - _ruleCreator.AddCondition(TypeConditionsDefinition.BeNestedIn(types)); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction BeNestedIn(IEnumerable types) - { - _ruleCreator.AddCondition(TypeConditionsDefinition.BeNestedIn(types)); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction BeNestedIn(IEnumerable types) - { - _ruleCreator.AddCondition(TypeConditionsDefinition.BeNestedIn(types)); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction BeValueTypes() - { - _ruleCreator.AddCondition(TypeConditionsDefinition.BeValueTypes()); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction BeEnums() - { - _ruleCreator.AddCondition(TypeConditionsDefinition.BeEnums()); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction BeStructs() - { - _ruleCreator.AddCondition(TypeConditionsDefinition.BeStructs()); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction ImplementInterface(Interface intf) - { - _ruleCreator.AddCondition(TypeConditionsDefinition.ImplementInterface(intf)); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction ImplementInterface(Type intf) - { - _ruleCreator.AddCondition(TypeConditionsDefinition.ImplementInterface(intf)); - return Create(_ruleCreator); - } - - // csharpier-ignore-start - public TRuleTypeShouldConjunction ImplementAnyInterfaces() => ImplementAnyInterfaces(new ObjectProvider()); - public TRuleTypeShouldConjunction ImplementAnyInterfaces(params Interface[] interfaces) => ImplementAnyInterfaces(new ObjectProvider(interfaces)); - public TRuleTypeShouldConjunction ImplementAnyInterfaces(params Type[] interfaces) => ImplementAnyInterfaces(new SystemTypeObjectProvider(interfaces)); - public TRuleTypeShouldConjunction ImplementAnyInterfaces(IEnumerable interfaces) => ImplementAnyInterfaces(new ObjectProvider(interfaces)); - public TRuleTypeShouldConjunction ImplementAnyInterfaces(IEnumerable interfaces) => ImplementAnyInterfaces(new SystemTypeObjectProvider(interfaces)); - public TRuleTypeShouldConjunction ImplementAnyInterfaces(IObjectProvider interfaces) => Handle(TypeConditionsDefinition.ImplementAny(interfaces)); - // csharpier-ignore-end - - public TRuleTypeShouldConjunction ResideInNamespace(string fullName) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.ResideInNamespace(fullName) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction ResideInNamespaceMatching(string pattern) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.ResideInNamespaceMatching(pattern) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction ResideInAssembly(string fullName) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.ResideInAssembly(fullName) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction ResideInAssemblyMatching(string pattern) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.ResideInAssemblyMatching(pattern) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction ResideInAssembly( - Assembly assembly, - params Assembly[] moreAssemblies - ) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.ResideInAssembly(assembly, moreAssemblies) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction ResideInAssembly( - Domain.Assembly assembly, - params Domain.Assembly[] moreAssemblies + protected override TypesShouldConjunction CreateNextElement( + IOrderedCondition condition ) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.ResideInAssembly(assembly, moreAssemblies) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HavePropertyMemberWithName(string name) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.HavePropertyMemberWithName(name) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveFieldMemberWithName(string name) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.HaveFieldMemberWithName(name) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveMethodMemberWithName(string name) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.HaveMethodMemberWithName(name) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction HaveMemberWithName(string name) - { - _ruleCreator.AddCondition(TypeConditionsDefinition.HaveMemberWithName(name)); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction BeNested() - { - _ruleCreator.AddCondition(TypeConditionsDefinition.BeNested()); - return Create(_ruleCreator); - } - - //Relation Conditions - - public ShouldRelateToTypesThat< - TRuleTypeShouldConjunction, - IType, - TRuleType - > BeAssignableToTypesThat() - { - _ruleCreator.BeginComplexCondition( - ArchRuleDefinition.Types(true), - TypeConditionsDefinition.BeAssignableToTypesThat() - ); - return new ShouldRelateToTypesThat( - _ruleCreator - ); - } - - public ShouldRelateToInterfacesThat< - TRuleTypeShouldConjunction, - TRuleType - > ImplementAnyInterfacesThat() - { - _ruleCreator.BeginComplexCondition( - ArchRuleDefinition.Interfaces(true), - TypeConditionsDefinition.ImplementAnyInterfacesThat() - ); - return new ShouldRelateToInterfacesThat( - _ruleCreator - ); - } - - //Negations - - public TRuleTypeShouldConjunction NotBe(Type firstType, params Type[] moreTypes) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.NotBe(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotBe(IEnumerable types) - { - _ruleCreator.AddCondition(TypeConditionsDefinition.NotBe(types)); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotBeAssignableTo( - IType firstType, - params IType[] moreTypes - ) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.NotBeAssignableTo(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotBeAssignableTo(Type firstType, params Type[] moreTypes) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.NotBeAssignableTo(firstType, moreTypes) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotBeAssignableTo(IObjectProvider types) - { - _ruleCreator.AddCondition(TypeConditionsDefinition.NotBeAssignableTo(types)); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotBeAssignableTo(IEnumerable types) - { - _ruleCreator.AddCondition(TypeConditionsDefinition.NotBeAssignableTo(types)); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotBeAssignableTo(IEnumerable types) - { - _ruleCreator.AddCondition(TypeConditionsDefinition.NotBeAssignableTo(types)); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotBeValueTypes() - { - _ruleCreator.AddCondition(TypeConditionsDefinition.NotBeValueTypes()); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotBeEnums() - { - _ruleCreator.AddCondition(TypeConditionsDefinition.NotBeEnums()); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotBeStructs() - { - _ruleCreator.AddCondition(TypeConditionsDefinition.NotBeStructs()); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotImplementInterface(Interface intf) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.NotImplementInterface(intf) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotImplementInterface(Type intf) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.NotImplementInterface(intf) - ); - return Create(_ruleCreator); - } - - // csharpier-ignore-start - public TRuleTypeShouldConjunction NotImplementAnyInterfaces() => NotImplementAnyInterfaces(new ObjectProvider()); - public TRuleTypeShouldConjunction NotImplementAnyInterfaces(params Interface[] interfaces) => NotImplementAnyInterfaces(new ObjectProvider(interfaces)); - public TRuleTypeShouldConjunction NotImplementAnyInterfaces(params Type[] interfaces) => NotImplementAnyInterfaces(new SystemTypeObjectProvider(interfaces)); - public TRuleTypeShouldConjunction NotImplementAnyInterfaces(IEnumerable interfaces) => NotImplementAnyInterfaces(new ObjectProvider(interfaces)); - public TRuleTypeShouldConjunction NotImplementAnyInterfaces(IEnumerable interfaces) => NotImplementAnyInterfaces(new SystemTypeObjectProvider(interfaces)); - public TRuleTypeShouldConjunction NotImplementAnyInterfaces(IObjectProvider interfaces) => Handle(TypeConditionsDefinition.NotImplementAny(interfaces)); - // csharpier-ignore-end - - public TRuleTypeShouldConjunction NotResideInNamespace(string fullName) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.NotResideInNamespace(fullName) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotResideInNamespaceMatching(string pattern) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.NotResideInNamespaceMatching(pattern) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotResideInAssembly(string fullName) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.NotResideInAssembly(fullName) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotResideInAssemblyMatching(string pattern) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.NotResideInAssemblyMatching(pattern) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotResideInAssembly( - Assembly assembly, - params Assembly[] moreAssemblies - ) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.NotResideInAssembly(assembly, moreAssemblies) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotResideInAssembly( - Domain.Assembly assembly, - params Domain.Assembly[] moreAssemblies - ) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.NotResideInAssembly(assembly, moreAssemblies) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotHavePropertyMemberWithName(string name) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.NotHavePropertyMemberWithName(name) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotHaveFieldMemberWithName(string name) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.NotHaveFieldMemberWithName(name) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotHaveMethodMemberWithName(string name) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.NotHaveMethodMemberWithName(name) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotHaveMemberWithName(string name) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.NotHaveMemberWithName(name) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction NotBeNested() - { - _ruleCreator.AddCondition(TypeConditionsDefinition.NotBeNested()); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AdhereToPlantUmlDiagram(string file) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.AdhereToPlantUmlDiagram(file) - ); - return Create(_ruleCreator); - } - - public TRuleTypeShouldConjunction AdhereToPlantUmlDiagram(Stream stream) - { - _ruleCreator.AddCondition( - TypeConditionsDefinition.AdhereToPlantUmlDiagram(stream) - ); - return Create(_ruleCreator); - } - - //Relation Condition Negations - - public ShouldRelateToTypesThat< - TRuleTypeShouldConjunction, - IType, - TRuleType - > NotBeAssignableToTypesThat() - { - _ruleCreator.BeginComplexCondition( - ArchRuleDefinition.Types(true), - TypeConditionsDefinition.NotBeAssignableToTypesThat() - ); - return new ShouldRelateToTypesThat( - _ruleCreator - ); - } - - public ShouldRelateToInterfacesThat< - TRuleTypeShouldConjunction, - TRuleType - > NotImplementAnyInterfacesThat() - { - _ruleCreator.BeginComplexCondition( - ArchRuleDefinition.Interfaces(true), - TypeConditionsDefinition.NotImplementAnyInterfacesThat() - ); - return new ShouldRelateToInterfacesThat( - _ruleCreator - ); - } - - private TRuleTypeShouldConjunction Handle(IOrderedCondition condition) { _ruleCreator.AddCondition(condition); - return Create(_ruleCreator); + return new TypesShouldConjunction(_ruleCreator); } } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/TypesShouldConjunction.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/TypesShouldConjunction.cs index f2b808382..1ae51c7c1 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/TypesShouldConjunction.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/TypesShouldConjunction.cs @@ -3,11 +3,7 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types { public class TypesShouldConjunction - : ObjectsShouldConjunction< - TypesShould, - TypesShouldConjunctionWithDescription, - IType - > + : ObjectsShouldConjunction { public TypesShouldConjunction(IArchRuleCreator ruleCreator) : base(ruleCreator) { } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/TypesShouldConjunctionWithDescription.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/TypesShouldConjunctionWithDescription.cs index a0d1d3cad..b0959779a 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/TypesShouldConjunctionWithDescription.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/TypesShouldConjunctionWithDescription.cs @@ -3,7 +3,7 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types { public class TypesShouldConjunctionWithDescription - : ObjectsShouldConjunctionWithDescription, IType> + : ObjectsShouldConjunctionWithDescription { public TypesShouldConjunctionWithDescription(IArchRuleCreator ruleCreator) : base(ruleCreator) { } From bcc8a027444241d6a4cdbf91785f4f6a3a8df125 Mon Sep 17 00:00:00 2001 From: Alexander Linne Date: Thu, 18 Dec 2025 14:18:35 +0100 Subject: [PATCH 2/2] Rename Generic Parameters Signed-off-by: Alexander Linne --- .../Syntax/Elements/AddObjectCondition.cs | 310 +++++++++--------- .../Syntax/Elements/AddObjectPredicate.cs | 278 ++++++++-------- .../Syntax/Elements/IAddObjectCondition.cs | 294 ++++++++--------- .../Syntax/Elements/IAddObjectPredicate.cs | 272 +++++++-------- .../FieldMembers/IAddFieldMemberCondition.cs | 4 +- .../FieldMembers/IAddFieldMemberPredicate.cs | 4 +- .../Elements/Members/IAddMemberCondition.cs | 36 +- .../Elements/Members/IAddMemberPredicate.cs | 32 +- .../IAddMethodMemberCondition.cs | 84 ++--- .../IAddMethodMemberPredicate.cs | 84 ++--- .../IAddPropertyMemberCondition.cs | 68 ++-- .../IAddPropertyMemberPredicate.cs | 68 ++-- .../Attributes/IAddAttributeCondition.cs | 12 +- .../Attributes/IAddAttributePredicate.cs | 12 +- .../Types/Classes/IAddClassCondition.cs | 16 +- .../Types/Classes/IAddClassPredicate.cs | 16 +- .../Elements/Types/IAddTypeCondition.cs | 150 ++++----- .../Elements/Types/IAddTypePredicate.cs | 118 +++---- .../Interfaces/IAddInterfaceCondition.cs | 4 +- .../Interfaces/IAddInterfacePredicate.cs | 4 +- 20 files changed, 933 insertions(+), 933 deletions(-) diff --git a/ArchUnitNET/Fluent/Syntax/Elements/AddObjectCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/AddObjectCondition.cs index 1001dadf0..eb16eb0ba 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/AddObjectCondition.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/AddObjectCondition.cs @@ -11,193 +11,193 @@ namespace ArchUnitNET.Fluent.Syntax.Elements { - public abstract class AddObjectCondition + public abstract class AddObjectCondition : SyntaxElement, - IAddObjectCondition + IAddObjectCondition where TRuleType : ICanBeAnalyzed { internal AddObjectCondition(IArchRuleCreator ruleCreator) : base(ruleCreator) { } - public TRuleTypeShouldConjunction Exist() + public TNextElement Exist() { _ruleCreator.RequirePositiveResults = false; return CreateNextElement(ObjectConditionsDefinition.Exist()); } // csharpier-ignore-start - public TRuleTypeShouldConjunction Be(params ICanBeAnalyzed[] objects) => Be(new ObjectProvider(objects)); - public TRuleTypeShouldConjunction Be(IEnumerable objects) => Be(new ObjectProvider(objects)); - public TRuleTypeShouldConjunction Be(IObjectProvider objects) => CreateNextElement(ObjectConditionsDefinition.Be(objects)); - - public TRuleTypeShouldConjunction CallAny(params MethodMember[] methods) => CallAny(new ObjectProvider(methods)); - public TRuleTypeShouldConjunction CallAny(IEnumerable methods) => CallAny(new ObjectProvider(methods)); - public TRuleTypeShouldConjunction CallAny(IObjectProvider methods) => CreateNextElement(ObjectConditionsDefinition.CallAny(methods)); - - public TRuleTypeShouldConjunction DependOnAny() => DependOnAny(new ObjectProvider()); - public TRuleTypeShouldConjunction DependOnAny(params IType[] types) => DependOnAny(new ObjectProvider(types)); - public TRuleTypeShouldConjunction DependOnAny(params Type[] types) => DependOnAny(new SystemTypeObjectProvider(types)); - public TRuleTypeShouldConjunction DependOnAny(IObjectProvider types) => CreateNextElement(ObjectConditionsDefinition.DependOnAny(types)); - public TRuleTypeShouldConjunction DependOnAny(IEnumerable types) => DependOnAny(new ObjectProvider(types)); - public TRuleTypeShouldConjunction DependOnAny(IEnumerable types) => DependOnAny(new SystemTypeObjectProvider(types)); - - public TRuleTypeShouldConjunction FollowCustomCondition(ICondition condition) => CreateNextElement(condition.AsOrderedCondition()); - public TRuleTypeShouldConjunction FollowCustomCondition(Func condition, string description) => CreateNextElement(ObjectConditionsDefinition.FollowCustomCondition(condition, description)); - public TRuleTypeShouldConjunction FollowCustomCondition(Func condition, string description, string failDescription) => CreateNextElement(ObjectConditionsDefinition.FollowCustomCondition(condition, description, failDescription)); - - public TRuleTypeShouldConjunction OnlyDependOn() => OnlyDependOn(new ObjectProvider()); - public TRuleTypeShouldConjunction OnlyDependOn(params IType[] types) => OnlyDependOn(new ObjectProvider(types)); - public TRuleTypeShouldConjunction OnlyDependOn(params Type[] types) => OnlyDependOn(new SystemTypeObjectProvider(types)); - public TRuleTypeShouldConjunction OnlyDependOn(IObjectProvider types) => CreateNextElement(ObjectConditionsDefinition.OnlyDependOn(types)); - public TRuleTypeShouldConjunction OnlyDependOn(IEnumerable types) => OnlyDependOn(new ObjectProvider(types)); - public TRuleTypeShouldConjunction OnlyDependOn(IEnumerable types) => OnlyDependOn(new SystemTypeObjectProvider(types)); - - public TRuleTypeShouldConjunction HaveAnyAttributes() => HaveAnyAttributes(new ObjectProvider()); - public TRuleTypeShouldConjunction HaveAnyAttributes(params Attribute[] attributes) => HaveAnyAttributes(new ObjectProvider(attributes)); - public TRuleTypeShouldConjunction HaveAnyAttributes(params Type[] attributes) => HaveAnyAttributes(new SystemTypeObjectProvider(attributes)); - public TRuleTypeShouldConjunction HaveAnyAttributes(IObjectProvider attributes) => CreateNextElement(ObjectConditionsDefinition.HaveAnyAttributes(attributes)); - public TRuleTypeShouldConjunction HaveAnyAttributes(IEnumerable attributes) => HaveAnyAttributes(new ObjectProvider(attributes)); - public TRuleTypeShouldConjunction HaveAnyAttributes(IEnumerable attributes) => HaveAnyAttributes(new SystemTypeObjectProvider(attributes)); - - public TRuleTypeShouldConjunction OnlyHaveAttributes() => OnlyHaveAttributes(new ObjectProvider()); - public TRuleTypeShouldConjunction OnlyHaveAttributes(params Attribute[] attributes) => OnlyHaveAttributes(new ObjectProvider(attributes)); - public TRuleTypeShouldConjunction OnlyHaveAttributes(params Type[] attributes) => OnlyHaveAttributes(new SystemTypeObjectProvider(attributes)); - public TRuleTypeShouldConjunction OnlyHaveAttributes(IObjectProvider attributes) => CreateNextElement(ObjectConditionsDefinition.OnlyHaveAttributes(attributes)); - public TRuleTypeShouldConjunction OnlyHaveAttributes(IEnumerable attributes) => OnlyHaveAttributes(new ObjectProvider(attributes)); - public TRuleTypeShouldConjunction OnlyHaveAttributes(IEnumerable attributes) => OnlyHaveAttributes(new SystemTypeObjectProvider(attributes)); - - public TRuleTypeShouldConjunction HaveAnyAttributesWithArguments(IEnumerable argumentValues) => CreateNextElement(ObjectConditionsDefinition.HaveAnyAttributesWithArguments(argumentValues)); - - public TRuleTypeShouldConjunction HaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues) => CreateNextElement(ObjectConditionsDefinition.HaveAttributeWithArguments(attribute.FullName, _ => attribute, argumentValues)); - public TRuleTypeShouldConjunction HaveAttributeWithArguments(Type attribute, IEnumerable argumentValues) => CreateNextElement(ObjectConditionsDefinition.HaveAttributeWithArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), argumentValues)); - - public TRuleTypeShouldConjunction HaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectConditionsDefinition.HaveAnyAttributesWithNamedArguments(attributeArguments)); - public TRuleTypeShouldConjunction HaveAnyAttributesWithNamedArguments(params (string, object)[] attributeArguments) => HaveAnyAttributesWithNamedArguments((IEnumerable<(string, object)>)attributeArguments); - - public TRuleTypeShouldConjunction HaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectConditionsDefinition.HaveAttributeWithNamedArguments(attribute.FullName, _ => attribute, attributeArguments)); - public TRuleTypeShouldConjunction HaveAttributeWithNamedArguments(Attribute attribute, params (string, object)[] attributeArguments) => HaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); - public TRuleTypeShouldConjunction HaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectConditionsDefinition.HaveAttributeWithNamedArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), attributeArguments)); - public TRuleTypeShouldConjunction HaveAttributeWithNamedArguments(Type attribute, params (string, object)[] attributeArguments) => HaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); - - public TRuleTypeShouldConjunction HaveName(string name) => CreateNextElement(ObjectConditionsDefinition.HaveName(name)); - public TRuleTypeShouldConjunction HaveNameMatching(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveNameMatching(pattern)); - public TRuleTypeShouldConjunction HaveNameStartingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveNameStartingWith(pattern)); - public TRuleTypeShouldConjunction HaveNameEndingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveNameEndingWith(pattern)); - public TRuleTypeShouldConjunction HaveNameContaining(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveNameContaining(pattern)); - - public TRuleTypeShouldConjunction HaveFullName(string fullName) => CreateNextElement(ObjectConditionsDefinition.HaveFullName(fullName)); - public TRuleTypeShouldConjunction HaveFullNameMatching(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveFullNameMatching(pattern)); - public TRuleTypeShouldConjunction HaveFullNameStartingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveFullNameStartingWith(pattern)); - public TRuleTypeShouldConjunction HaveFullNameEndingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveFullNameEndingWith(pattern)); - public TRuleTypeShouldConjunction HaveFullNameContaining(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveFullNameContaining(pattern)); - - public TRuleTypeShouldConjunction HaveAssemblyQualifiedName(string assemblyQualifiedName) => CreateNextElement(ObjectConditionsDefinition.HaveAssemblyQualifiedName(assemblyQualifiedName)); - public TRuleTypeShouldConjunction HaveAssemblyQualifiedNameMatching(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveAssemblyQualifiedNameMatching(pattern)); - public TRuleTypeShouldConjunction HaveAssemblyQualifiedNameStartingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveAssemblyQualifiedNameStartingWith(pattern)); - public TRuleTypeShouldConjunction HaveAssemblyQualifiedNameEndingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveAssemblyQualifiedNameEndingWith(pattern)); - public TRuleTypeShouldConjunction HaveAssemblyQualifiedNameContaining(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveAssemblyQualifiedNameContaining(pattern)); - - public TRuleTypeShouldConjunction BePrivate() => CreateNextElement(ObjectConditionsDefinition.BePrivate()); - public TRuleTypeShouldConjunction BePublic() => CreateNextElement(ObjectConditionsDefinition.BePublic()); - public TRuleTypeShouldConjunction BeProtected() => CreateNextElement(ObjectConditionsDefinition.BeProtected()); - public TRuleTypeShouldConjunction BeInternal() => CreateNextElement(ObjectConditionsDefinition.BeInternal()); - public TRuleTypeShouldConjunction BeProtectedInternal() => CreateNextElement(ObjectConditionsDefinition.BeProtectedInternal()); - public TRuleTypeShouldConjunction BePrivateProtected() => CreateNextElement(ObjectConditionsDefinition.BePrivateProtected()); + public TNextElement Be(params ICanBeAnalyzed[] objects) => Be(new ObjectProvider(objects)); + public TNextElement Be(IEnumerable objects) => Be(new ObjectProvider(objects)); + public TNextElement Be(IObjectProvider objects) => CreateNextElement(ObjectConditionsDefinition.Be(objects)); + + public TNextElement CallAny(params MethodMember[] methods) => CallAny(new ObjectProvider(methods)); + public TNextElement CallAny(IEnumerable methods) => CallAny(new ObjectProvider(methods)); + public TNextElement CallAny(IObjectProvider methods) => CreateNextElement(ObjectConditionsDefinition.CallAny(methods)); + + public TNextElement DependOnAny() => DependOnAny(new ObjectProvider()); + public TNextElement DependOnAny(params IType[] types) => DependOnAny(new ObjectProvider(types)); + public TNextElement DependOnAny(params Type[] types) => DependOnAny(new SystemTypeObjectProvider(types)); + public TNextElement DependOnAny(IObjectProvider types) => CreateNextElement(ObjectConditionsDefinition.DependOnAny(types)); + public TNextElement DependOnAny(IEnumerable types) => DependOnAny(new ObjectProvider(types)); + public TNextElement DependOnAny(IEnumerable types) => DependOnAny(new SystemTypeObjectProvider(types)); + + public TNextElement FollowCustomCondition(ICondition condition) => CreateNextElement(condition.AsOrderedCondition()); + public TNextElement FollowCustomCondition(Func condition, string description) => CreateNextElement(ObjectConditionsDefinition.FollowCustomCondition(condition, description)); + public TNextElement FollowCustomCondition(Func condition, string description, string failDescription) => CreateNextElement(ObjectConditionsDefinition.FollowCustomCondition(condition, description, failDescription)); + + public TNextElement OnlyDependOn() => OnlyDependOn(new ObjectProvider()); + public TNextElement OnlyDependOn(params IType[] types) => OnlyDependOn(new ObjectProvider(types)); + public TNextElement OnlyDependOn(params Type[] types) => OnlyDependOn(new SystemTypeObjectProvider(types)); + public TNextElement OnlyDependOn(IObjectProvider types) => CreateNextElement(ObjectConditionsDefinition.OnlyDependOn(types)); + public TNextElement OnlyDependOn(IEnumerable types) => OnlyDependOn(new ObjectProvider(types)); + public TNextElement OnlyDependOn(IEnumerable types) => OnlyDependOn(new SystemTypeObjectProvider(types)); + + public TNextElement HaveAnyAttributes() => HaveAnyAttributes(new ObjectProvider()); + public TNextElement HaveAnyAttributes(params Attribute[] attributes) => HaveAnyAttributes(new ObjectProvider(attributes)); + public TNextElement HaveAnyAttributes(params Type[] attributes) => HaveAnyAttributes(new SystemTypeObjectProvider(attributes)); + public TNextElement HaveAnyAttributes(IObjectProvider attributes) => CreateNextElement(ObjectConditionsDefinition.HaveAnyAttributes(attributes)); + public TNextElement HaveAnyAttributes(IEnumerable attributes) => HaveAnyAttributes(new ObjectProvider(attributes)); + public TNextElement HaveAnyAttributes(IEnumerable attributes) => HaveAnyAttributes(new SystemTypeObjectProvider(attributes)); + + public TNextElement OnlyHaveAttributes() => OnlyHaveAttributes(new ObjectProvider()); + public TNextElement OnlyHaveAttributes(params Attribute[] attributes) => OnlyHaveAttributes(new ObjectProvider(attributes)); + public TNextElement OnlyHaveAttributes(params Type[] attributes) => OnlyHaveAttributes(new SystemTypeObjectProvider(attributes)); + public TNextElement OnlyHaveAttributes(IObjectProvider attributes) => CreateNextElement(ObjectConditionsDefinition.OnlyHaveAttributes(attributes)); + public TNextElement OnlyHaveAttributes(IEnumerable attributes) => OnlyHaveAttributes(new ObjectProvider(attributes)); + public TNextElement OnlyHaveAttributes(IEnumerable attributes) => OnlyHaveAttributes(new SystemTypeObjectProvider(attributes)); + + public TNextElement HaveAnyAttributesWithArguments(IEnumerable argumentValues) => CreateNextElement(ObjectConditionsDefinition.HaveAnyAttributesWithArguments(argumentValues)); + + public TNextElement HaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues) => CreateNextElement(ObjectConditionsDefinition.HaveAttributeWithArguments(attribute.FullName, _ => attribute, argumentValues)); + public TNextElement HaveAttributeWithArguments(Type attribute, IEnumerable argumentValues) => CreateNextElement(ObjectConditionsDefinition.HaveAttributeWithArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), argumentValues)); + + public TNextElement HaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectConditionsDefinition.HaveAnyAttributesWithNamedArguments(attributeArguments)); + public TNextElement HaveAnyAttributesWithNamedArguments(params (string, object)[] attributeArguments) => HaveAnyAttributesWithNamedArguments((IEnumerable<(string, object)>)attributeArguments); + + public TNextElement HaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectConditionsDefinition.HaveAttributeWithNamedArguments(attribute.FullName, _ => attribute, attributeArguments)); + public TNextElement HaveAttributeWithNamedArguments(Attribute attribute, params (string, object)[] attributeArguments) => HaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); + public TNextElement HaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectConditionsDefinition.HaveAttributeWithNamedArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), attributeArguments)); + public TNextElement HaveAttributeWithNamedArguments(Type attribute, params (string, object)[] attributeArguments) => HaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); + + public TNextElement HaveName(string name) => CreateNextElement(ObjectConditionsDefinition.HaveName(name)); + public TNextElement HaveNameMatching(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveNameMatching(pattern)); + public TNextElement HaveNameStartingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveNameStartingWith(pattern)); + public TNextElement HaveNameEndingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveNameEndingWith(pattern)); + public TNextElement HaveNameContaining(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveNameContaining(pattern)); + + public TNextElement HaveFullName(string fullName) => CreateNextElement(ObjectConditionsDefinition.HaveFullName(fullName)); + public TNextElement HaveFullNameMatching(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveFullNameMatching(pattern)); + public TNextElement HaveFullNameStartingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveFullNameStartingWith(pattern)); + public TNextElement HaveFullNameEndingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveFullNameEndingWith(pattern)); + public TNextElement HaveFullNameContaining(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveFullNameContaining(pattern)); + + public TNextElement HaveAssemblyQualifiedName(string assemblyQualifiedName) => CreateNextElement(ObjectConditionsDefinition.HaveAssemblyQualifiedName(assemblyQualifiedName)); + public TNextElement HaveAssemblyQualifiedNameMatching(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveAssemblyQualifiedNameMatching(pattern)); + public TNextElement HaveAssemblyQualifiedNameStartingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveAssemblyQualifiedNameStartingWith(pattern)); + public TNextElement HaveAssemblyQualifiedNameEndingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveAssemblyQualifiedNameEndingWith(pattern)); + public TNextElement HaveAssemblyQualifiedNameContaining(string pattern) => CreateNextElement(ObjectConditionsDefinition.HaveAssemblyQualifiedNameContaining(pattern)); + + public TNextElement BePrivate() => CreateNextElement(ObjectConditionsDefinition.BePrivate()); + public TNextElement BePublic() => CreateNextElement(ObjectConditionsDefinition.BePublic()); + public TNextElement BeProtected() => CreateNextElement(ObjectConditionsDefinition.BeProtected()); + public TNextElement BeInternal() => CreateNextElement(ObjectConditionsDefinition.BeInternal()); + public TNextElement BeProtectedInternal() => CreateNextElement(ObjectConditionsDefinition.BeProtectedInternal()); + public TNextElement BePrivateProtected() => CreateNextElement(ObjectConditionsDefinition.BePrivateProtected()); // Relation Conditions - public ShouldRelateToTypesThat DependOnAnyTypesThat() => BeginComplexTypeCondition(ObjectConditionsDefinition.DependOnAnyTypesThat()); - public ShouldRelateToTypesThat OnlyDependOnTypesThat() => BeginComplexTypeCondition(ObjectConditionsDefinition.OnlyDependOnTypesThat()); + public ShouldRelateToTypesThat DependOnAnyTypesThat() => BeginComplexTypeCondition(ObjectConditionsDefinition.DependOnAnyTypesThat()); + public ShouldRelateToTypesThat OnlyDependOnTypesThat() => BeginComplexTypeCondition(ObjectConditionsDefinition.OnlyDependOnTypesThat()); - public ShouldRelateToAttributesThat HaveAnyAttributesThat() => BeginComplexAttributeCondition(ObjectConditionsDefinition.HaveAnyAttributesThat()); - public ShouldRelateToAttributesThat OnlyHaveAttributesThat() => BeginComplexAttributeCondition(ObjectConditionsDefinition.OnlyHaveAttributesThat()); + public ShouldRelateToAttributesThat HaveAnyAttributesThat() => BeginComplexAttributeCondition(ObjectConditionsDefinition.HaveAnyAttributesThat()); + public ShouldRelateToAttributesThat OnlyHaveAttributesThat() => BeginComplexAttributeCondition(ObjectConditionsDefinition.OnlyHaveAttributesThat()); // Negations - public TRuleTypeShouldConjunction NotExist() + public TNextElement NotExist() { _ruleCreator.RequirePositiveResults = false; return CreateNextElement(ObjectConditionsDefinition.NotExist()); } - public TRuleTypeShouldConjunction NotBe(params ICanBeAnalyzed[] objects) => NotBe(new ObjectProvider(objects)); - public TRuleTypeShouldConjunction NotBe(IEnumerable objects) => NotBe(new ObjectProvider(objects)); - public TRuleTypeShouldConjunction NotBe(IObjectProvider objects) => CreateNextElement(ObjectConditionsDefinition.NotBe(objects)); - - public TRuleTypeShouldConjunction NotCallAny(params MethodMember[] methods) => NotCallAny(new ObjectProvider(methods)); - public TRuleTypeShouldConjunction NotCallAny(IEnumerable methods) => NotCallAny(new ObjectProvider(methods)); - public TRuleTypeShouldConjunction NotCallAny(IObjectProvider methods) => CreateNextElement(ObjectConditionsDefinition.NotCallAny(methods)); - - public TRuleTypeShouldConjunction NotDependOnAny() => NotDependOnAny(new ObjectProvider()); - public TRuleTypeShouldConjunction NotDependOnAny(params IType[] types) => NotDependOnAny(new ObjectProvider(types)); - public TRuleTypeShouldConjunction NotDependOnAny(params Type[] types) => NotDependOnAny(new SystemTypeObjectProvider(types)); - public TRuleTypeShouldConjunction NotDependOnAny(IObjectProvider types) => CreateNextElement(ObjectConditionsDefinition.NotDependOnAny(types)); - public TRuleTypeShouldConjunction NotDependOnAny(IEnumerable types) => NotDependOnAny(new ObjectProvider(types)); - public TRuleTypeShouldConjunction NotDependOnAny(IEnumerable types) => NotDependOnAny(new SystemTypeObjectProvider(types)); - - public TRuleTypeShouldConjunction NotHaveAnyAttributes() => NotHaveAnyAttributes(new ObjectProvider()); - public TRuleTypeShouldConjunction NotHaveAnyAttributes(params Attribute[] attributes) => NotHaveAnyAttributes(new ObjectProvider(attributes)); - public TRuleTypeShouldConjunction NotHaveAnyAttributes(params Type[] attributes) => NotHaveAnyAttributes(new SystemTypeObjectProvider(attributes)); - public TRuleTypeShouldConjunction NotHaveAnyAttributes(IObjectProvider attributes) => CreateNextElement(ObjectConditionsDefinition.NotHaveAnyAttributes(attributes)); - public TRuleTypeShouldConjunction NotHaveAnyAttributes(IEnumerable attributes) => NotHaveAnyAttributes(new ObjectProvider(attributes)); - public TRuleTypeShouldConjunction NotHaveAnyAttributes(IEnumerable attributes) => NotHaveAnyAttributes(new SystemTypeObjectProvider(attributes)); - - public TRuleTypeShouldConjunction NotHaveAnyAttributesWithArguments(IEnumerable argumentValues) => CreateNextElement(ObjectConditionsDefinition.NotHaveAnyAttributesWithArguments(argumentValues)); - - public TRuleTypeShouldConjunction NotHaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues) => CreateNextElement(ObjectConditionsDefinition.NotHaveAttributeWithArguments(attribute.FullName, _ => attribute, argumentValues)); - public TRuleTypeShouldConjunction NotHaveAttributeWithArguments(Type attribute, IEnumerable argumentValues) => CreateNextElement(ObjectConditionsDefinition.NotHaveAttributeWithArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), argumentValues)); - - public TRuleTypeShouldConjunction NotHaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectConditionsDefinition.NotHaveAnyAttributesWithNamedArguments(attributeArguments)); - public TRuleTypeShouldConjunction NotHaveAnyAttributesWithNamedArguments(params (string, object)[] attributeArguments) => NotHaveAnyAttributesWithNamedArguments((IEnumerable<(string, object)>)attributeArguments); - - public TRuleTypeShouldConjunction NotHaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectConditionsDefinition.NotHaveAttributeWithNamedArguments(attribute.FullName, _ => attribute, attributeArguments)); - public TRuleTypeShouldConjunction NotHaveAttributeWithNamedArguments(Attribute attribute, params (string, object)[] attributeArguments) => NotHaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); - public TRuleTypeShouldConjunction NotHaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectConditionsDefinition.NotHaveAttributeWithNamedArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), attributeArguments)); - public TRuleTypeShouldConjunction NotHaveAttributeWithNamedArguments(Type attribute, params (string, object)[] attributeArguments) => NotHaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); - - public TRuleTypeShouldConjunction NotHaveName(string name) => CreateNextElement(ObjectConditionsDefinition.NotHaveName(name)); - public TRuleTypeShouldConjunction NotHaveNameMatching(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveNameMatching(pattern)); - public TRuleTypeShouldConjunction NotHaveNameStartingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveNameStartingWith(pattern)); - public TRuleTypeShouldConjunction NotHaveNameEndingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveNameEndingWith(pattern)); - public TRuleTypeShouldConjunction NotHaveNameContaining(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveNameContaining(pattern)); - - public TRuleTypeShouldConjunction NotHaveFullName(string fullName) => CreateNextElement(ObjectConditionsDefinition.NotHaveFullName(fullName)); - public TRuleTypeShouldConjunction NotHaveFullNameMatching(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveFullNameMatching(pattern)); - public TRuleTypeShouldConjunction NotHaveFullNameStartingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveFullNameStartingWith(pattern)); - public TRuleTypeShouldConjunction NotHaveFullNameEndingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveFullNameEndingWith(pattern)); - public TRuleTypeShouldConjunction NotHaveFullNameContaining(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveFullNameContaining(pattern)); - - public TRuleTypeShouldConjunction NotHaveAssemblyQualifiedName(string assemblyQualifiedName) => CreateNextElement(ObjectConditionsDefinition.NotHaveAssemblyQualifiedName(assemblyQualifiedName)); - public TRuleTypeShouldConjunction NotHaveAssemblyQualifiedNameMatching(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveAssemblyQualifiedNameMatching(pattern)); - public TRuleTypeShouldConjunction NotHaveAssemblyQualifiedNameStartingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveAssemblyQualifiedNameStartingWith(pattern)); - public TRuleTypeShouldConjunction NotHaveAssemblyQualifiedNameEndingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveAssemblyQualifiedNameEndingWith(pattern)); - public TRuleTypeShouldConjunction NotHaveAssemblyQualifiedNameContaining(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveAssemblyQualifiedNameContaining(pattern)); - - public TRuleTypeShouldConjunction NotBePrivate() => CreateNextElement(ObjectConditionsDefinition.NotBePrivate()); - public TRuleTypeShouldConjunction NotBePublic() => CreateNextElement(ObjectConditionsDefinition.NotBePublic()); - public TRuleTypeShouldConjunction NotBeProtected() => CreateNextElement(ObjectConditionsDefinition.NotBeProtected()); - public TRuleTypeShouldConjunction NotBeInternal() => CreateNextElement(ObjectConditionsDefinition.NotBeInternal()); - public TRuleTypeShouldConjunction NotBeProtectedInternal() => CreateNextElement(ObjectConditionsDefinition.NotBeProtectedInternal()); - public TRuleTypeShouldConjunction NotBePrivateProtected() => CreateNextElement(ObjectConditionsDefinition.NotBePrivateProtected()); + public TNextElement NotBe(params ICanBeAnalyzed[] objects) => NotBe(new ObjectProvider(objects)); + public TNextElement NotBe(IEnumerable objects) => NotBe(new ObjectProvider(objects)); + public TNextElement NotBe(IObjectProvider objects) => CreateNextElement(ObjectConditionsDefinition.NotBe(objects)); + + public TNextElement NotCallAny(params MethodMember[] methods) => NotCallAny(new ObjectProvider(methods)); + public TNextElement NotCallAny(IEnumerable methods) => NotCallAny(new ObjectProvider(methods)); + public TNextElement NotCallAny(IObjectProvider methods) => CreateNextElement(ObjectConditionsDefinition.NotCallAny(methods)); + + public TNextElement NotDependOnAny() => NotDependOnAny(new ObjectProvider()); + public TNextElement NotDependOnAny(params IType[] types) => NotDependOnAny(new ObjectProvider(types)); + public TNextElement NotDependOnAny(params Type[] types) => NotDependOnAny(new SystemTypeObjectProvider(types)); + public TNextElement NotDependOnAny(IObjectProvider types) => CreateNextElement(ObjectConditionsDefinition.NotDependOnAny(types)); + public TNextElement NotDependOnAny(IEnumerable types) => NotDependOnAny(new ObjectProvider(types)); + public TNextElement NotDependOnAny(IEnumerable types) => NotDependOnAny(new SystemTypeObjectProvider(types)); + + public TNextElement NotHaveAnyAttributes() => NotHaveAnyAttributes(new ObjectProvider()); + public TNextElement NotHaveAnyAttributes(params Attribute[] attributes) => NotHaveAnyAttributes(new ObjectProvider(attributes)); + public TNextElement NotHaveAnyAttributes(params Type[] attributes) => NotHaveAnyAttributes(new SystemTypeObjectProvider(attributes)); + public TNextElement NotHaveAnyAttributes(IObjectProvider attributes) => CreateNextElement(ObjectConditionsDefinition.NotHaveAnyAttributes(attributes)); + public TNextElement NotHaveAnyAttributes(IEnumerable attributes) => NotHaveAnyAttributes(new ObjectProvider(attributes)); + public TNextElement NotHaveAnyAttributes(IEnumerable attributes) => NotHaveAnyAttributes(new SystemTypeObjectProvider(attributes)); + + public TNextElement NotHaveAnyAttributesWithArguments(IEnumerable argumentValues) => CreateNextElement(ObjectConditionsDefinition.NotHaveAnyAttributesWithArguments(argumentValues)); + + public TNextElement NotHaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues) => CreateNextElement(ObjectConditionsDefinition.NotHaveAttributeWithArguments(attribute.FullName, _ => attribute, argumentValues)); + public TNextElement NotHaveAttributeWithArguments(Type attribute, IEnumerable argumentValues) => CreateNextElement(ObjectConditionsDefinition.NotHaveAttributeWithArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), argumentValues)); + + public TNextElement NotHaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectConditionsDefinition.NotHaveAnyAttributesWithNamedArguments(attributeArguments)); + public TNextElement NotHaveAnyAttributesWithNamedArguments(params (string, object)[] attributeArguments) => NotHaveAnyAttributesWithNamedArguments((IEnumerable<(string, object)>)attributeArguments); + + public TNextElement NotHaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectConditionsDefinition.NotHaveAttributeWithNamedArguments(attribute.FullName, _ => attribute, attributeArguments)); + public TNextElement NotHaveAttributeWithNamedArguments(Attribute attribute, params (string, object)[] attributeArguments) => NotHaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); + public TNextElement NotHaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectConditionsDefinition.NotHaveAttributeWithNamedArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), attributeArguments)); + public TNextElement NotHaveAttributeWithNamedArguments(Type attribute, params (string, object)[] attributeArguments) => NotHaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); + + public TNextElement NotHaveName(string name) => CreateNextElement(ObjectConditionsDefinition.NotHaveName(name)); + public TNextElement NotHaveNameMatching(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveNameMatching(pattern)); + public TNextElement NotHaveNameStartingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveNameStartingWith(pattern)); + public TNextElement NotHaveNameEndingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveNameEndingWith(pattern)); + public TNextElement NotHaveNameContaining(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveNameContaining(pattern)); + + public TNextElement NotHaveFullName(string fullName) => CreateNextElement(ObjectConditionsDefinition.NotHaveFullName(fullName)); + public TNextElement NotHaveFullNameMatching(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveFullNameMatching(pattern)); + public TNextElement NotHaveFullNameStartingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveFullNameStartingWith(pattern)); + public TNextElement NotHaveFullNameEndingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveFullNameEndingWith(pattern)); + public TNextElement NotHaveFullNameContaining(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveFullNameContaining(pattern)); + + public TNextElement NotHaveAssemblyQualifiedName(string assemblyQualifiedName) => CreateNextElement(ObjectConditionsDefinition.NotHaveAssemblyQualifiedName(assemblyQualifiedName)); + public TNextElement NotHaveAssemblyQualifiedNameMatching(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveAssemblyQualifiedNameMatching(pattern)); + public TNextElement NotHaveAssemblyQualifiedNameStartingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveAssemblyQualifiedNameStartingWith(pattern)); + public TNextElement NotHaveAssemblyQualifiedNameEndingWith(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveAssemblyQualifiedNameEndingWith(pattern)); + public TNextElement NotHaveAssemblyQualifiedNameContaining(string pattern) => CreateNextElement(ObjectConditionsDefinition.NotHaveAssemblyQualifiedNameContaining(pattern)); + + public TNextElement NotBePrivate() => CreateNextElement(ObjectConditionsDefinition.NotBePrivate()); + public TNextElement NotBePublic() => CreateNextElement(ObjectConditionsDefinition.NotBePublic()); + public TNextElement NotBeProtected() => CreateNextElement(ObjectConditionsDefinition.NotBeProtected()); + public TNextElement NotBeInternal() => CreateNextElement(ObjectConditionsDefinition.NotBeInternal()); + public TNextElement NotBeProtectedInternal() => CreateNextElement(ObjectConditionsDefinition.NotBeProtectedInternal()); + public TNextElement NotBePrivateProtected() => CreateNextElement(ObjectConditionsDefinition.NotBePrivateProtected()); // Relation Condition Negations - public ShouldRelateToTypesThat NotDependOnAnyTypesThat() => BeginComplexTypeCondition(ObjectConditionsDefinition.NotDependOnAnyTypesThat()); - public ShouldRelateToAttributesThat NotHaveAnyAttributesThat() => BeginComplexAttributeCondition(ObjectConditionsDefinition.NotHaveAnyAttributesThat()); + public ShouldRelateToTypesThat NotDependOnAnyTypesThat() => BeginComplexTypeCondition(ObjectConditionsDefinition.NotDependOnAnyTypesThat()); + public ShouldRelateToAttributesThat NotHaveAnyAttributesThat() => BeginComplexAttributeCondition(ObjectConditionsDefinition.NotHaveAnyAttributesThat()); // csharpier-ignore-end - protected abstract TRuleTypeShouldConjunction CreateNextElement(IOrderedCondition condition); + protected abstract TNextElement CreateNextElement(IOrderedCondition condition); - protected ShouldRelateToTypesThat BeginComplexTypeCondition( + protected ShouldRelateToTypesThat BeginComplexTypeCondition( RelationCondition relationCondition ) { _ruleCreator.BeginComplexCondition(ArchRuleDefinition.Types(true), relationCondition); - return new ShouldRelateToTypesThat(_ruleCreator); + return new ShouldRelateToTypesThat(_ruleCreator); } protected ShouldRelateToAttributesThat< - TRuleTypeShouldConjunction, + TNextElement, TRuleType > BeginComplexAttributeCondition(RelationCondition relationCondition) { @@ -205,11 +205,11 @@ protected ShouldRelateToAttributesThat< ArchRuleDefinition.Attributes(true), relationCondition ); - return new ShouldRelateToAttributesThat(_ruleCreator); + return new ShouldRelateToAttributesThat(_ruleCreator); } protected ShouldRelateToInterfacesThat< - TRuleTypeShouldConjunction, + TNextElement, TRuleType > BeginComplexInterfaceCondition(RelationCondition relationCondition) { @@ -217,11 +217,11 @@ protected ShouldRelateToInterfacesThat< ArchRuleDefinition.Interfaces(true), relationCondition ); - return new ShouldRelateToInterfacesThat(_ruleCreator); + return new ShouldRelateToInterfacesThat(_ruleCreator); } protected ShouldRelateToMethodMembersThat< - TRuleTypeShouldConjunction, + TNextElement, TRuleType > BeginComplexMethodMemberCondition( RelationCondition relationCondition @@ -231,7 +231,7 @@ RelationCondition relationCondition ArchRuleDefinition.MethodMembers(), relationCondition ); - return new ShouldRelateToMethodMembersThat(_ruleCreator); + return new ShouldRelateToMethodMembersThat(_ruleCreator); } } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/AddObjectPredicate.cs b/ArchUnitNET/Fluent/Syntax/Elements/AddObjectPredicate.cs index 92f94328c..0598e4e9c 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/AddObjectPredicate.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/AddObjectPredicate.cs @@ -8,9 +8,9 @@ namespace ArchUnitNET.Fluent.Syntax.Elements { - public abstract class AddObjectPredicate + public abstract class AddObjectPredicate : SyntaxElement, - IAddObjectPredicate + IAddObjectPredicate where TRuleType : ICanBeAnalyzed where TRelatedType : ICanBeAnalyzed { @@ -18,147 +18,147 @@ internal AddObjectPredicate(IArchRuleCreator archRuleCreator) : base(archRuleCreator) { } // csharpier-ignore-start - public TGivenRuleTypeConjunction FollowCustomPredicate(IPredicate predicate) => CreateNextElement(predicate); - public TGivenRuleTypeConjunction FollowCustomPredicate(Func predicate, string description) => CreateNextElement(ObjectPredicatesDefinition.FollowCustomPredicate(predicate, description)); - - public TGivenRuleTypeConjunction Are(params ICanBeAnalyzed[] objects) => Are(new ObjectProvider(objects)); - public TGivenRuleTypeConjunction Are(IEnumerable objects) => Are(new ObjectProvider(objects)); - public TGivenRuleTypeConjunction Are(IObjectProvider objects) => CreateNextElement(ObjectPredicatesDefinition.Are(objects)); - - public TGivenRuleTypeConjunction CallAny(params MethodMember[] methods) => CallAny(new ObjectProvider(methods)); - public TGivenRuleTypeConjunction CallAny(IEnumerable methods) => CallAny(new ObjectProvider(methods)); - public TGivenRuleTypeConjunction CallAny(IObjectProvider methods) => CreateNextElement(ObjectPredicatesDefinition.CallAny(methods)); - - public TGivenRuleTypeConjunction DependOnAny() => DependOnAny(new ObjectProvider()); - public TGivenRuleTypeConjunction DependOnAny(params IType[] types) => DependOnAny(new ObjectProvider(types)); - public TGivenRuleTypeConjunction DependOnAny(params Type[] types) => DependOnAny(new SystemTypeObjectProvider(types)); - public TGivenRuleTypeConjunction DependOnAny(IObjectProvider types) => CreateNextElement(ObjectPredicatesDefinition.DependOnAny(types)); - public TGivenRuleTypeConjunction DependOnAny(IEnumerable types) => DependOnAny(new ObjectProvider(types)); - public TGivenRuleTypeConjunction DependOnAny(IEnumerable types) => DependOnAny(new SystemTypeObjectProvider(types)); - - public TGivenRuleTypeConjunction OnlyDependOn() => OnlyDependOn(new ObjectProvider()); - public TGivenRuleTypeConjunction OnlyDependOn(params IType[] types) => OnlyDependOn(new ObjectProvider(types)); - public TGivenRuleTypeConjunction OnlyDependOn(params Type[] types) => OnlyDependOn(new SystemTypeObjectProvider(types)); - public TGivenRuleTypeConjunction OnlyDependOn(IObjectProvider types) => CreateNextElement(ObjectPredicatesDefinition.OnlyDependOn(types)); - public TGivenRuleTypeConjunction OnlyDependOn(IEnumerable types) => OnlyDependOn(new ObjectProvider(types)); - public TGivenRuleTypeConjunction OnlyDependOn(IEnumerable types) => OnlyDependOn(new SystemTypeObjectProvider(types)); - - public TGivenRuleTypeConjunction HaveAnyAttributes() => HaveAnyAttributes(new ObjectProvider()); - public TGivenRuleTypeConjunction HaveAnyAttributes(params Attribute[] attributes) => HaveAnyAttributes(new ObjectProvider(attributes)); - public TGivenRuleTypeConjunction HaveAnyAttributes(params Type[] attributes) => HaveAnyAttributes(new SystemTypeObjectProvider(attributes)); - public TGivenRuleTypeConjunction HaveAnyAttributes(IObjectProvider attributes) => CreateNextElement(ObjectPredicatesDefinition.HaveAnyAttributes(attributes)); - public TGivenRuleTypeConjunction HaveAnyAttributes(IEnumerable attributes) => HaveAnyAttributes(new ObjectProvider(attributes)); - public TGivenRuleTypeConjunction HaveAnyAttributes(IEnumerable attributes) => HaveAnyAttributes(new SystemTypeObjectProvider(attributes)); - - public TGivenRuleTypeConjunction OnlyHaveAttributes() => OnlyHaveAttributes(new ObjectProvider()); - public TGivenRuleTypeConjunction OnlyHaveAttributes(params Attribute[] attributes) => OnlyHaveAttributes(new ObjectProvider(attributes)); - public TGivenRuleTypeConjunction OnlyHaveAttributes(params Type[] attributes) => OnlyHaveAttributes(new SystemTypeObjectProvider(attributes)); - public TGivenRuleTypeConjunction OnlyHaveAttributes(IObjectProvider attributes) => CreateNextElement(ObjectPredicatesDefinition.OnlyHaveAttributes(attributes)); - public TGivenRuleTypeConjunction OnlyHaveAttributes(IEnumerable attributes) => OnlyHaveAttributes(new ObjectProvider(attributes)); - public TGivenRuleTypeConjunction OnlyHaveAttributes(IEnumerable attributes) => OnlyHaveAttributes(new SystemTypeObjectProvider(attributes)); - - public TGivenRuleTypeConjunction HaveAnyAttributesWithArguments(IEnumerable argumentValues) => CreateNextElement(ObjectPredicatesDefinition.HaveAnyAttributesWithArguments(argumentValues)); - public TGivenRuleTypeConjunction HaveAnyAttributesWithArguments(object firstArgumentValue, params object[] moreArgumentValues) => CreateNextElement(ObjectPredicatesDefinition.HaveAnyAttributesWithArguments(new[] { firstArgumentValue }.Concat(moreArgumentValues))); - - public TGivenRuleTypeConjunction HaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues) => CreateNextElement(ObjectPredicatesDefinition.HaveAttributeWithArguments(attribute.FullName, _ => attribute, argumentValues)); - public TGivenRuleTypeConjunction HaveAttributeWithArguments(Type attribute, IEnumerable argumentValues) => CreateNextElement(ObjectPredicatesDefinition.HaveAttributeWithArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), argumentValues)); - - public TGivenRuleTypeConjunction HaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectPredicatesDefinition.HaveAnyAttributesWithNamedArguments(attributeArguments)); - public TGivenRuleTypeConjunction HaveAnyAttributesWithNamedArguments(params (string, object)[] attributeArguments) => HaveAnyAttributesWithNamedArguments((IEnumerable<(string, object)>)attributeArguments); - - public TGivenRuleTypeConjunction HaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectPredicatesDefinition.HaveAttributeWithNamedArguments(attribute.FullName, _ => attribute, attributeArguments)); - public TGivenRuleTypeConjunction HaveAttributeWithNamedArguments(Attribute attribute, params (string, object)[] attributeArguments) => HaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); - public TGivenRuleTypeConjunction HaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectPredicatesDefinition.HaveAttributeWithNamedArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), attributeArguments)); - public TGivenRuleTypeConjunction HaveAttributeWithNamedArguments(Type attribute, params (string, object)[] attributeArguments) => HaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); - - public TGivenRuleTypeConjunction HaveName(string name) => CreateNextElement(ObjectPredicatesDefinition.HaveName(name)); - public TGivenRuleTypeConjunction HaveNameMatching(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveNameMatching(pattern)); - public TGivenRuleTypeConjunction HaveNameStartingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveNameStartingWith(pattern)); - public TGivenRuleTypeConjunction HaveNameEndingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveNameEndingWith(pattern)); - public TGivenRuleTypeConjunction HaveNameContaining(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveNameContaining(pattern)); - - public TGivenRuleTypeConjunction HaveFullName(string fullName) => CreateNextElement(ObjectPredicatesDefinition.HaveFullName(fullName)); - public TGivenRuleTypeConjunction HaveFullNameMatching(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveFullNameMatching(pattern)); - public TGivenRuleTypeConjunction HaveFullNameStartingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveFullNameStartingWith(pattern)); - public TGivenRuleTypeConjunction HaveFullNameEndingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveFullNameEndingWith(pattern)); - public TGivenRuleTypeConjunction HaveFullNameContaining(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveFullNameContaining(pattern)); - - public TGivenRuleTypeConjunction HaveAssemblyQualifiedName(string assemblyQualifiedName) => CreateNextElement(ObjectPredicatesDefinition.HaveAssemblyQualifiedName(assemblyQualifiedName)); - public TGivenRuleTypeConjunction HaveAssemblyQualifiedNameMatching(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveAssemblyQualifiedNameMatching(pattern)); - public TGivenRuleTypeConjunction HaveAssemblyQualifiedNameStartingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveAssemblyQualifiedNameStartingWith(pattern)); - public TGivenRuleTypeConjunction HaveAssemblyQualifiedNameEndingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveAssemblyQualifiedNameEndingWith(pattern)); - public TGivenRuleTypeConjunction HaveAssemblyQualifiedNameContaining(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveAssemblyQualifiedNameContaining(pattern)); - - public TGivenRuleTypeConjunction ArePrivate() => CreateNextElement(ObjectPredicatesDefinition.ArePrivate()); - public TGivenRuleTypeConjunction ArePublic() => CreateNextElement(ObjectPredicatesDefinition.ArePublic()); - public TGivenRuleTypeConjunction AreProtected() => CreateNextElement(ObjectPredicatesDefinition.AreProtected()); - public TGivenRuleTypeConjunction AreInternal() => CreateNextElement(ObjectPredicatesDefinition.AreInternal()); - public TGivenRuleTypeConjunction AreProtectedInternal() => CreateNextElement(ObjectPredicatesDefinition.AreProtectedInternal()); - public TGivenRuleTypeConjunction ArePrivateProtected() => CreateNextElement(ObjectPredicatesDefinition.ArePrivateProtected()); + public TNextElement FollowCustomPredicate(IPredicate predicate) => CreateNextElement(predicate); + public TNextElement FollowCustomPredicate(Func predicate, string description) => CreateNextElement(ObjectPredicatesDefinition.FollowCustomPredicate(predicate, description)); + + public TNextElement Are(params ICanBeAnalyzed[] objects) => Are(new ObjectProvider(objects)); + public TNextElement Are(IEnumerable objects) => Are(new ObjectProvider(objects)); + public TNextElement Are(IObjectProvider objects) => CreateNextElement(ObjectPredicatesDefinition.Are(objects)); + + public TNextElement CallAny(params MethodMember[] methods) => CallAny(new ObjectProvider(methods)); + public TNextElement CallAny(IEnumerable methods) => CallAny(new ObjectProvider(methods)); + public TNextElement CallAny(IObjectProvider methods) => CreateNextElement(ObjectPredicatesDefinition.CallAny(methods)); + + public TNextElement DependOnAny() => DependOnAny(new ObjectProvider()); + public TNextElement DependOnAny(params IType[] types) => DependOnAny(new ObjectProvider(types)); + public TNextElement DependOnAny(params Type[] types) => DependOnAny(new SystemTypeObjectProvider(types)); + public TNextElement DependOnAny(IObjectProvider types) => CreateNextElement(ObjectPredicatesDefinition.DependOnAny(types)); + public TNextElement DependOnAny(IEnumerable types) => DependOnAny(new ObjectProvider(types)); + public TNextElement DependOnAny(IEnumerable types) => DependOnAny(new SystemTypeObjectProvider(types)); + + public TNextElement OnlyDependOn() => OnlyDependOn(new ObjectProvider()); + public TNextElement OnlyDependOn(params IType[] types) => OnlyDependOn(new ObjectProvider(types)); + public TNextElement OnlyDependOn(params Type[] types) => OnlyDependOn(new SystemTypeObjectProvider(types)); + public TNextElement OnlyDependOn(IObjectProvider types) => CreateNextElement(ObjectPredicatesDefinition.OnlyDependOn(types)); + public TNextElement OnlyDependOn(IEnumerable types) => OnlyDependOn(new ObjectProvider(types)); + public TNextElement OnlyDependOn(IEnumerable types) => OnlyDependOn(new SystemTypeObjectProvider(types)); + + public TNextElement HaveAnyAttributes() => HaveAnyAttributes(new ObjectProvider()); + public TNextElement HaveAnyAttributes(params Attribute[] attributes) => HaveAnyAttributes(new ObjectProvider(attributes)); + public TNextElement HaveAnyAttributes(params Type[] attributes) => HaveAnyAttributes(new SystemTypeObjectProvider(attributes)); + public TNextElement HaveAnyAttributes(IObjectProvider attributes) => CreateNextElement(ObjectPredicatesDefinition.HaveAnyAttributes(attributes)); + public TNextElement HaveAnyAttributes(IEnumerable attributes) => HaveAnyAttributes(new ObjectProvider(attributes)); + public TNextElement HaveAnyAttributes(IEnumerable attributes) => HaveAnyAttributes(new SystemTypeObjectProvider(attributes)); + + public TNextElement OnlyHaveAttributes() => OnlyHaveAttributes(new ObjectProvider()); + public TNextElement OnlyHaveAttributes(params Attribute[] attributes) => OnlyHaveAttributes(new ObjectProvider(attributes)); + public TNextElement OnlyHaveAttributes(params Type[] attributes) => OnlyHaveAttributes(new SystemTypeObjectProvider(attributes)); + public TNextElement OnlyHaveAttributes(IObjectProvider attributes) => CreateNextElement(ObjectPredicatesDefinition.OnlyHaveAttributes(attributes)); + public TNextElement OnlyHaveAttributes(IEnumerable attributes) => OnlyHaveAttributes(new ObjectProvider(attributes)); + public TNextElement OnlyHaveAttributes(IEnumerable attributes) => OnlyHaveAttributes(new SystemTypeObjectProvider(attributes)); + + public TNextElement HaveAnyAttributesWithArguments(IEnumerable argumentValues) => CreateNextElement(ObjectPredicatesDefinition.HaveAnyAttributesWithArguments(argumentValues)); + public TNextElement HaveAnyAttributesWithArguments(object firstArgumentValue, params object[] moreArgumentValues) => CreateNextElement(ObjectPredicatesDefinition.HaveAnyAttributesWithArguments(new[] { firstArgumentValue }.Concat(moreArgumentValues))); + + public TNextElement HaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues) => CreateNextElement(ObjectPredicatesDefinition.HaveAttributeWithArguments(attribute.FullName, _ => attribute, argumentValues)); + public TNextElement HaveAttributeWithArguments(Type attribute, IEnumerable argumentValues) => CreateNextElement(ObjectPredicatesDefinition.HaveAttributeWithArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), argumentValues)); + + public TNextElement HaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectPredicatesDefinition.HaveAnyAttributesWithNamedArguments(attributeArguments)); + public TNextElement HaveAnyAttributesWithNamedArguments(params (string, object)[] attributeArguments) => HaveAnyAttributesWithNamedArguments((IEnumerable<(string, object)>)attributeArguments); + + public TNextElement HaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectPredicatesDefinition.HaveAttributeWithNamedArguments(attribute.FullName, _ => attribute, attributeArguments)); + public TNextElement HaveAttributeWithNamedArguments(Attribute attribute, params (string, object)[] attributeArguments) => HaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); + public TNextElement HaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectPredicatesDefinition.HaveAttributeWithNamedArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), attributeArguments)); + public TNextElement HaveAttributeWithNamedArguments(Type attribute, params (string, object)[] attributeArguments) => HaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); + + public TNextElement HaveName(string name) => CreateNextElement(ObjectPredicatesDefinition.HaveName(name)); + public TNextElement HaveNameMatching(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveNameMatching(pattern)); + public TNextElement HaveNameStartingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveNameStartingWith(pattern)); + public TNextElement HaveNameEndingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveNameEndingWith(pattern)); + public TNextElement HaveNameContaining(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveNameContaining(pattern)); + + public TNextElement HaveFullName(string fullName) => CreateNextElement(ObjectPredicatesDefinition.HaveFullName(fullName)); + public TNextElement HaveFullNameMatching(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveFullNameMatching(pattern)); + public TNextElement HaveFullNameStartingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveFullNameStartingWith(pattern)); + public TNextElement HaveFullNameEndingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveFullNameEndingWith(pattern)); + public TNextElement HaveFullNameContaining(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveFullNameContaining(pattern)); + + public TNextElement HaveAssemblyQualifiedName(string assemblyQualifiedName) => CreateNextElement(ObjectPredicatesDefinition.HaveAssemblyQualifiedName(assemblyQualifiedName)); + public TNextElement HaveAssemblyQualifiedNameMatching(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveAssemblyQualifiedNameMatching(pattern)); + public TNextElement HaveAssemblyQualifiedNameStartingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveAssemblyQualifiedNameStartingWith(pattern)); + public TNextElement HaveAssemblyQualifiedNameEndingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveAssemblyQualifiedNameEndingWith(pattern)); + public TNextElement HaveAssemblyQualifiedNameContaining(string pattern) => CreateNextElement(ObjectPredicatesDefinition.HaveAssemblyQualifiedNameContaining(pattern)); + + public TNextElement ArePrivate() => CreateNextElement(ObjectPredicatesDefinition.ArePrivate()); + public TNextElement ArePublic() => CreateNextElement(ObjectPredicatesDefinition.ArePublic()); + public TNextElement AreProtected() => CreateNextElement(ObjectPredicatesDefinition.AreProtected()); + public TNextElement AreInternal() => CreateNextElement(ObjectPredicatesDefinition.AreInternal()); + public TNextElement AreProtectedInternal() => CreateNextElement(ObjectPredicatesDefinition.AreProtectedInternal()); + public TNextElement ArePrivateProtected() => CreateNextElement(ObjectPredicatesDefinition.ArePrivateProtected()); // Negations - public TGivenRuleTypeConjunction AreNot(params ICanBeAnalyzed[] objects) => AreNot(new ObjectProvider(objects)); - public TGivenRuleTypeConjunction AreNot(IEnumerable objects) => AreNot(new ObjectProvider(objects)); - public TGivenRuleTypeConjunction AreNot(IObjectProvider objects) => CreateNextElement(ObjectPredicatesDefinition.AreNot(objects)); - - public TGivenRuleTypeConjunction DoNotCallAny(params MethodMember[] methods) => DoNotCallAny(new ObjectProvider(methods)); - public TGivenRuleTypeConjunction DoNotCallAny(IEnumerable methods) => DoNotCallAny(new ObjectProvider(methods)); - public TGivenRuleTypeConjunction DoNotCallAny(IObjectProvider methods) => CreateNextElement(ObjectPredicatesDefinition.DoNotCallAny(methods)); - - public TGivenRuleTypeConjunction DoNotDependOnAny() => DoNotDependOnAny(new ObjectProvider()); - public TGivenRuleTypeConjunction DoNotDependOnAny(params IType[] types) => DoNotDependOnAny(new ObjectProvider(types)); - public TGivenRuleTypeConjunction DoNotDependOnAny(params Type[] types) => DoNotDependOnAny(new SystemTypeObjectProvider(types)); - public TGivenRuleTypeConjunction DoNotDependOnAny(IObjectProvider types) => CreateNextElement(ObjectPredicatesDefinition.DoNotDependOnAny(types)); - public TGivenRuleTypeConjunction DoNotDependOnAny(IEnumerable types) => DoNotDependOnAny(new ObjectProvider(types)); - public TGivenRuleTypeConjunction DoNotDependOnAny(IEnumerable types) => DoNotDependOnAny(new SystemTypeObjectProvider(types)); - - public TGivenRuleTypeConjunction DoNotHaveAnyAttributes() => DoNotHaveAnyAttributes(new ObjectProvider()); - public TGivenRuleTypeConjunction DoNotHaveAnyAttributes(params Attribute[] attributes) => DoNotHaveAnyAttributes(new ObjectProvider(attributes)); - public TGivenRuleTypeConjunction DoNotHaveAnyAttributes(params Type[] attributes) => DoNotHaveAnyAttributes(new SystemTypeObjectProvider(attributes)); - public TGivenRuleTypeConjunction DoNotHaveAnyAttributes(IObjectProvider attributes) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAnyAttributes(attributes)); - public TGivenRuleTypeConjunction DoNotHaveAnyAttributes(IEnumerable attributes) => DoNotHaveAnyAttributes(new ObjectProvider(attributes)); - public TGivenRuleTypeConjunction DoNotHaveAnyAttributes(IEnumerable attributes) => DoNotHaveAnyAttributes(new SystemTypeObjectProvider(attributes)); - - public TGivenRuleTypeConjunction DoNotHaveAnyAttributesWithArguments(IEnumerable argumentValues) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAnyAttributesWithArguments(argumentValues)); - - public TGivenRuleTypeConjunction DoNotHaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAttributeWithArguments(attribute.FullName, _ => attribute, argumentValues)); - public TGivenRuleTypeConjunction DoNotHaveAttributeWithArguments(Type attribute, IEnumerable argumentValues) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAttributeWithArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), argumentValues)); - - public TGivenRuleTypeConjunction DoNotHaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAnyAttributesWithNamedArguments(attributeArguments)); - public TGivenRuleTypeConjunction DoNotHaveAnyAttributesWithNamedArguments(params (string, object)[] attributeArguments) => DoNotHaveAnyAttributesWithNamedArguments((IEnumerable<(string, object)>)attributeArguments); - - public TGivenRuleTypeConjunction DoNotHaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAttributeWithNamedArguments(attribute.FullName, _ => attribute, attributeArguments)); - public TGivenRuleTypeConjunction DoNotHaveAttributeWithNamedArguments(Attribute attribute, params (string, object)[] attributeArguments) => DoNotHaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); - public TGivenRuleTypeConjunction DoNotHaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAttributeWithNamedArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), attributeArguments)); - public TGivenRuleTypeConjunction DoNotHaveAttributeWithNamedArguments(Type attribute, params (string, object)[] attributeArguments) => DoNotHaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); - - public TGivenRuleTypeConjunction DoNotHaveName(string name) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveName(name)); - public TGivenRuleTypeConjunction DoNotHaveNameMatching(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveNameMatching(pattern)); - public TGivenRuleTypeConjunction DoNotHaveNameStartingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveNameStartingWith(pattern)); - public TGivenRuleTypeConjunction DoNotHaveNameEndingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveNameEndingWith(pattern)); - public TGivenRuleTypeConjunction DoNotHaveNameContaining(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveNameContaining(pattern)); - - public TGivenRuleTypeConjunction DoNotHaveFullName(string fullName) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveFullName(fullName)); - public TGivenRuleTypeConjunction DoNotHaveFullNameMatching(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveFullNameMatching(pattern)); - public TGivenRuleTypeConjunction DoNotHaveFullNameStartingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveFullNameStartingWith(pattern)); - public TGivenRuleTypeConjunction DoNotHaveFullNameEndingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveFullNameEndingWith(pattern)); - public TGivenRuleTypeConjunction DoNotHaveFullNameContaining(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveFullNameContaining(pattern)); - - public TGivenRuleTypeConjunction DoNotHaveAssemblyQualifiedName(string assemblyQualifiedName) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedName(assemblyQualifiedName)); - public TGivenRuleTypeConjunction DoNotHaveAssemblyQualifiedNameMatching(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedNameMatching(pattern)); - public TGivenRuleTypeConjunction DoNotHaveAssemblyQualifiedNameStartingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedNameStartingWith(pattern)); - public TGivenRuleTypeConjunction DoNotHaveAssemblyQualifiedNameEndingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedNameEndingWith(pattern)); - public TGivenRuleTypeConjunction DoNotHaveAssemblyQualifiedNameContaining(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedNameContaining(pattern)); - - public TGivenRuleTypeConjunction AreNotPrivate() => CreateNextElement(ObjectPredicatesDefinition.AreNotPrivate()); - public TGivenRuleTypeConjunction AreNotPublic() => CreateNextElement(ObjectPredicatesDefinition.AreNotPublic()); - public TGivenRuleTypeConjunction AreNotProtected() => CreateNextElement(ObjectPredicatesDefinition.AreNotProtected()); - public TGivenRuleTypeConjunction AreNotInternal() => CreateNextElement(ObjectPredicatesDefinition.AreNotInternal()); - public TGivenRuleTypeConjunction AreNotProtectedInternal() => CreateNextElement(ObjectPredicatesDefinition.AreNotProtectedInternal()); - public TGivenRuleTypeConjunction AreNotPrivateProtected() => CreateNextElement(ObjectPredicatesDefinition.AreNotPrivateProtected()); + public TNextElement AreNot(params ICanBeAnalyzed[] objects) => AreNot(new ObjectProvider(objects)); + public TNextElement AreNot(IEnumerable objects) => AreNot(new ObjectProvider(objects)); + public TNextElement AreNot(IObjectProvider objects) => CreateNextElement(ObjectPredicatesDefinition.AreNot(objects)); + + public TNextElement DoNotCallAny(params MethodMember[] methods) => DoNotCallAny(new ObjectProvider(methods)); + public TNextElement DoNotCallAny(IEnumerable methods) => DoNotCallAny(new ObjectProvider(methods)); + public TNextElement DoNotCallAny(IObjectProvider methods) => CreateNextElement(ObjectPredicatesDefinition.DoNotCallAny(methods)); + + public TNextElement DoNotDependOnAny() => DoNotDependOnAny(new ObjectProvider()); + public TNextElement DoNotDependOnAny(params IType[] types) => DoNotDependOnAny(new ObjectProvider(types)); + public TNextElement DoNotDependOnAny(params Type[] types) => DoNotDependOnAny(new SystemTypeObjectProvider(types)); + public TNextElement DoNotDependOnAny(IObjectProvider types) => CreateNextElement(ObjectPredicatesDefinition.DoNotDependOnAny(types)); + public TNextElement DoNotDependOnAny(IEnumerable types) => DoNotDependOnAny(new ObjectProvider(types)); + public TNextElement DoNotDependOnAny(IEnumerable types) => DoNotDependOnAny(new SystemTypeObjectProvider(types)); + + public TNextElement DoNotHaveAnyAttributes() => DoNotHaveAnyAttributes(new ObjectProvider()); + public TNextElement DoNotHaveAnyAttributes(params Attribute[] attributes) => DoNotHaveAnyAttributes(new ObjectProvider(attributes)); + public TNextElement DoNotHaveAnyAttributes(params Type[] attributes) => DoNotHaveAnyAttributes(new SystemTypeObjectProvider(attributes)); + public TNextElement DoNotHaveAnyAttributes(IObjectProvider attributes) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAnyAttributes(attributes)); + public TNextElement DoNotHaveAnyAttributes(IEnumerable attributes) => DoNotHaveAnyAttributes(new ObjectProvider(attributes)); + public TNextElement DoNotHaveAnyAttributes(IEnumerable attributes) => DoNotHaveAnyAttributes(new SystemTypeObjectProvider(attributes)); + + public TNextElement DoNotHaveAnyAttributesWithArguments(IEnumerable argumentValues) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAnyAttributesWithArguments(argumentValues)); + + public TNextElement DoNotHaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAttributeWithArguments(attribute.FullName, _ => attribute, argumentValues)); + public TNextElement DoNotHaveAttributeWithArguments(Type attribute, IEnumerable argumentValues) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAttributeWithArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), argumentValues)); + + public TNextElement DoNotHaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAnyAttributesWithNamedArguments(attributeArguments)); + public TNextElement DoNotHaveAnyAttributesWithNamedArguments(params (string, object)[] attributeArguments) => DoNotHaveAnyAttributesWithNamedArguments((IEnumerable<(string, object)>)attributeArguments); + + public TNextElement DoNotHaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAttributeWithNamedArguments(attribute.FullName, _ => attribute, attributeArguments)); + public TNextElement DoNotHaveAttributeWithNamedArguments(Attribute attribute, params (string, object)[] attributeArguments) => DoNotHaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); + public TNextElement DoNotHaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAttributeWithNamedArguments(attribute.FullName, architecture => architecture.GetAttributeOfType(attribute), attributeArguments)); + public TNextElement DoNotHaveAttributeWithNamedArguments(Type attribute, params (string, object)[] attributeArguments) => DoNotHaveAttributeWithNamedArguments(attribute, (IEnumerable<(string, object)>)attributeArguments); + + public TNextElement DoNotHaveName(string name) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveName(name)); + public TNextElement DoNotHaveNameMatching(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveNameMatching(pattern)); + public TNextElement DoNotHaveNameStartingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveNameStartingWith(pattern)); + public TNextElement DoNotHaveNameEndingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveNameEndingWith(pattern)); + public TNextElement DoNotHaveNameContaining(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveNameContaining(pattern)); + + public TNextElement DoNotHaveFullName(string fullName) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveFullName(fullName)); + public TNextElement DoNotHaveFullNameMatching(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveFullNameMatching(pattern)); + public TNextElement DoNotHaveFullNameStartingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveFullNameStartingWith(pattern)); + public TNextElement DoNotHaveFullNameEndingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveFullNameEndingWith(pattern)); + public TNextElement DoNotHaveFullNameContaining(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveFullNameContaining(pattern)); + + public TNextElement DoNotHaveAssemblyQualifiedName(string assemblyQualifiedName) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedName(assemblyQualifiedName)); + public TNextElement DoNotHaveAssemblyQualifiedNameMatching(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedNameMatching(pattern)); + public TNextElement DoNotHaveAssemblyQualifiedNameStartingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedNameStartingWith(pattern)); + public TNextElement DoNotHaveAssemblyQualifiedNameEndingWith(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedNameEndingWith(pattern)); + public TNextElement DoNotHaveAssemblyQualifiedNameContaining(string pattern) => CreateNextElement(ObjectPredicatesDefinition.DoNotHaveAssemblyQualifiedNameContaining(pattern)); + + public TNextElement AreNotPrivate() => CreateNextElement(ObjectPredicatesDefinition.AreNotPrivate()); + public TNextElement AreNotPublic() => CreateNextElement(ObjectPredicatesDefinition.AreNotPublic()); + public TNextElement AreNotProtected() => CreateNextElement(ObjectPredicatesDefinition.AreNotProtected()); + public TNextElement AreNotInternal() => CreateNextElement(ObjectPredicatesDefinition.AreNotInternal()); + public TNextElement AreNotProtectedInternal() => CreateNextElement(ObjectPredicatesDefinition.AreNotProtectedInternal()); + public TNextElement AreNotPrivateProtected() => CreateNextElement(ObjectPredicatesDefinition.AreNotPrivateProtected()); // csharpier-ignore-end - protected abstract TGivenRuleTypeConjunction CreateNextElement(IPredicate predicate); + protected abstract TNextElement CreateNextElement(IPredicate predicate); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/IAddObjectCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/IAddObjectCondition.cs index c1c39ac6b..7ab419ed5 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/IAddObjectCondition.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/IAddObjectCondition.cs @@ -8,160 +8,160 @@ namespace ArchUnitNET.Fluent.Syntax.Elements { - public interface IAddObjectCondition + public interface IAddObjectCondition where TRuleType : ICanBeAnalyzed { // csharpier-ignore-start - TReturnType Exist(); - - TReturnType Be(params ICanBeAnalyzed[] objects); - TReturnType Be(IEnumerable objects); - TReturnType Be(IObjectProvider objects); - - TReturnType CallAny(params MethodMember[] methods); - TReturnType CallAny(IEnumerable methods); - TReturnType CallAny(IObjectProvider methods); - - TReturnType DependOnAny(); - TReturnType DependOnAny(params IType[] types); - TReturnType DependOnAny(params Type[] types); - TReturnType DependOnAny(IObjectProvider types); - TReturnType DependOnAny(IEnumerable types); - TReturnType DependOnAny(IEnumerable types); - ShouldRelateToTypesThat DependOnAnyTypesThat(); - - TReturnType FollowCustomCondition(ICondition condition); - TReturnType FollowCustomCondition(Func condition, string description); - TReturnType FollowCustomCondition(Func condition, string description, string failDescription); - - TReturnType OnlyDependOn(); - TReturnType OnlyDependOn(params IType[] types); - TReturnType OnlyDependOn(params Type[] types); - TReturnType OnlyDependOn(IObjectProvider types); - TReturnType OnlyDependOn(IEnumerable types); - TReturnType OnlyDependOn(IEnumerable types); - ShouldRelateToTypesThat OnlyDependOnTypesThat(); - - TReturnType HaveAnyAttributes(); - TReturnType HaveAnyAttributes(params Attribute[] attributes); - TReturnType HaveAnyAttributes(params Type[] attributes); - TReturnType HaveAnyAttributes(IObjectProvider attributes); - TReturnType HaveAnyAttributes(IEnumerable attributes); - TReturnType HaveAnyAttributes(IEnumerable attributes); - ShouldRelateToAttributesThat HaveAnyAttributesThat(); - - TReturnType OnlyHaveAttributes(); - TReturnType OnlyHaveAttributes(params Attribute[] attributes); - TReturnType OnlyHaveAttributes(params Type[] attributes); - TReturnType OnlyHaveAttributes(IObjectProvider attributes); - TReturnType OnlyHaveAttributes(IEnumerable attributes); - TReturnType OnlyHaveAttributes(IEnumerable attributes); - ShouldRelateToAttributesThat OnlyHaveAttributesThat(); - - TReturnType HaveAnyAttributesWithArguments(IEnumerable argumentValues); - - TReturnType HaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues); - TReturnType HaveAttributeWithArguments(Type attribute, IEnumerable argumentValues); - - TReturnType HaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments); - TReturnType HaveAnyAttributesWithNamedArguments(params (string, object)[] attributeArguments); - - TReturnType HaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments); - TReturnType HaveAttributeWithNamedArguments(Attribute attribute, params (string, object)[] attributeArguments); - TReturnType HaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments); - TReturnType HaveAttributeWithNamedArguments(Type attribute, params (string, object)[] attributeArguments); - - TReturnType HaveName(string name); - TReturnType HaveNameMatching(string pattern); - TReturnType HaveNameStartingWith(string pattern); - TReturnType HaveNameEndingWith(string pattern); - TReturnType HaveNameContaining(string pattern); - - TReturnType HaveFullName(string fullName); - TReturnType HaveFullNameMatching(string pattern); - TReturnType HaveFullNameStartingWith(string pattern); - TReturnType HaveFullNameEndingWith(string pattern); - TReturnType HaveFullNameContaining(string pattern); - - TReturnType HaveAssemblyQualifiedName(string assemblyQualifiedName); - TReturnType HaveAssemblyQualifiedNameMatching(string pattern); - TReturnType HaveAssemblyQualifiedNameStartingWith(string pattern); - TReturnType HaveAssemblyQualifiedNameEndingWith(string pattern); - TReturnType HaveAssemblyQualifiedNameContaining(string pattern); - - TReturnType BePrivate(); - TReturnType BePublic(); - TReturnType BeProtected(); - TReturnType BeInternal(); - TReturnType BeProtectedInternal(); - TReturnType BePrivateProtected(); + TNextElement Exist(); + + TNextElement Be(params ICanBeAnalyzed[] objects); + TNextElement Be(IEnumerable objects); + TNextElement Be(IObjectProvider objects); + + TNextElement CallAny(params MethodMember[] methods); + TNextElement CallAny(IEnumerable methods); + TNextElement CallAny(IObjectProvider methods); + + TNextElement DependOnAny(); + TNextElement DependOnAny(params IType[] types); + TNextElement DependOnAny(params Type[] types); + TNextElement DependOnAny(IObjectProvider types); + TNextElement DependOnAny(IEnumerable types); + TNextElement DependOnAny(IEnumerable types); + ShouldRelateToTypesThat DependOnAnyTypesThat(); + + TNextElement FollowCustomCondition(ICondition condition); + TNextElement FollowCustomCondition(Func condition, string description); + TNextElement FollowCustomCondition(Func condition, string description, string failDescription); + + TNextElement OnlyDependOn(); + TNextElement OnlyDependOn(params IType[] types); + TNextElement OnlyDependOn(params Type[] types); + TNextElement OnlyDependOn(IObjectProvider types); + TNextElement OnlyDependOn(IEnumerable types); + TNextElement OnlyDependOn(IEnumerable types); + ShouldRelateToTypesThat OnlyDependOnTypesThat(); + + TNextElement HaveAnyAttributes(); + TNextElement HaveAnyAttributes(params Attribute[] attributes); + TNextElement HaveAnyAttributes(params Type[] attributes); + TNextElement HaveAnyAttributes(IObjectProvider attributes); + TNextElement HaveAnyAttributes(IEnumerable attributes); + TNextElement HaveAnyAttributes(IEnumerable attributes); + ShouldRelateToAttributesThat HaveAnyAttributesThat(); + + TNextElement OnlyHaveAttributes(); + TNextElement OnlyHaveAttributes(params Attribute[] attributes); + TNextElement OnlyHaveAttributes(params Type[] attributes); + TNextElement OnlyHaveAttributes(IObjectProvider attributes); + TNextElement OnlyHaveAttributes(IEnumerable attributes); + TNextElement OnlyHaveAttributes(IEnumerable attributes); + ShouldRelateToAttributesThat OnlyHaveAttributesThat(); + + TNextElement HaveAnyAttributesWithArguments(IEnumerable argumentValues); + + TNextElement HaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues); + TNextElement HaveAttributeWithArguments(Type attribute, IEnumerable argumentValues); + + TNextElement HaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments); + TNextElement HaveAnyAttributesWithNamedArguments(params (string, object)[] attributeArguments); + + TNextElement HaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments); + TNextElement HaveAttributeWithNamedArguments(Attribute attribute, params (string, object)[] attributeArguments); + TNextElement HaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments); + TNextElement HaveAttributeWithNamedArguments(Type attribute, params (string, object)[] attributeArguments); + + TNextElement HaveName(string name); + TNextElement HaveNameMatching(string pattern); + TNextElement HaveNameStartingWith(string pattern); + TNextElement HaveNameEndingWith(string pattern); + TNextElement HaveNameContaining(string pattern); + + TNextElement HaveFullName(string fullName); + TNextElement HaveFullNameMatching(string pattern); + TNextElement HaveFullNameStartingWith(string pattern); + TNextElement HaveFullNameEndingWith(string pattern); + TNextElement HaveFullNameContaining(string pattern); + + TNextElement HaveAssemblyQualifiedName(string assemblyQualifiedName); + TNextElement HaveAssemblyQualifiedNameMatching(string pattern); + TNextElement HaveAssemblyQualifiedNameStartingWith(string pattern); + TNextElement HaveAssemblyQualifiedNameEndingWith(string pattern); + TNextElement HaveAssemblyQualifiedNameContaining(string pattern); + + TNextElement BePrivate(); + TNextElement BePublic(); + TNextElement BeProtected(); + TNextElement BeInternal(); + TNextElement BeProtectedInternal(); + TNextElement BePrivateProtected(); //Negations - TReturnType NotExist(); - - TReturnType NotBe(params ICanBeAnalyzed[] objects); - TReturnType NotBe(IEnumerable objects); - TReturnType NotBe(IObjectProvider objects); - - TReturnType NotCallAny(params MethodMember[] methods); - TReturnType NotCallAny(IEnumerable methods); - TReturnType NotCallAny(IObjectProvider methods); - - TReturnType NotDependOnAny(); - TReturnType NotDependOnAny(params IType[] types); - TReturnType NotDependOnAny(params Type[] types); - TReturnType NotDependOnAny(IObjectProvider types); - TReturnType NotDependOnAny(IEnumerable types); - TReturnType NotDependOnAny(IEnumerable types); - ShouldRelateToTypesThat NotDependOnAnyTypesThat(); - - TReturnType NotHaveAnyAttributes(); - TReturnType NotHaveAnyAttributes(params Attribute[] attributes); - TReturnType NotHaveAnyAttributes(params Type[] attributes); - TReturnType NotHaveAnyAttributes(IObjectProvider attributes); - TReturnType NotHaveAnyAttributes(IEnumerable attributes); - TReturnType NotHaveAnyAttributes(IEnumerable attributes); - ShouldRelateToAttributesThat NotHaveAnyAttributesThat(); - - TReturnType NotHaveAnyAttributesWithArguments(IEnumerable argumentValues); - - TReturnType NotHaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues); - TReturnType NotHaveAttributeWithArguments(Type attribute, IEnumerable argumentValues); - - TReturnType NotHaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments); - TReturnType NotHaveAnyAttributesWithNamedArguments(params (string, object)[] attributeArguments); - - TReturnType NotHaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments); - TReturnType NotHaveAttributeWithNamedArguments(Attribute attribute, params (string, object)[] attributeArguments); - TReturnType NotHaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments); - TReturnType NotHaveAttributeWithNamedArguments(Type attribute, params (string, object)[] attributeArguments); - - TReturnType NotHaveName(string name); - TReturnType NotHaveNameMatching(string pattern); - TReturnType NotHaveNameStartingWith(string pattern); - TReturnType NotHaveNameEndingWith(string pattern); - TReturnType NotHaveNameContaining(string pattern); - - TReturnType NotHaveFullName(string fullName); - TReturnType NotHaveFullNameMatching(string pattern); - TReturnType NotHaveFullNameStartingWith(string pattern); - TReturnType NotHaveFullNameEndingWith(string pattern); - TReturnType NotHaveFullNameContaining(string pattern); - - TReturnType NotHaveAssemblyQualifiedName(string assemblyQualifiedName); - TReturnType NotHaveAssemblyQualifiedNameMatching(string pattern); - TReturnType NotHaveAssemblyQualifiedNameStartingWith(string pattern); - TReturnType NotHaveAssemblyQualifiedNameEndingWith(string pattern); - TReturnType NotHaveAssemblyQualifiedNameContaining(string pattern); - - TReturnType NotBePrivate(); - TReturnType NotBePublic(); - TReturnType NotBeProtected(); - TReturnType NotBeInternal(); - TReturnType NotBeProtectedInternal(); - TReturnType NotBePrivateProtected(); + TNextElement NotExist(); + + TNextElement NotBe(params ICanBeAnalyzed[] objects); + TNextElement NotBe(IEnumerable objects); + TNextElement NotBe(IObjectProvider objects); + + TNextElement NotCallAny(params MethodMember[] methods); + TNextElement NotCallAny(IEnumerable methods); + TNextElement NotCallAny(IObjectProvider methods); + + TNextElement NotDependOnAny(); + TNextElement NotDependOnAny(params IType[] types); + TNextElement NotDependOnAny(params Type[] types); + TNextElement NotDependOnAny(IObjectProvider types); + TNextElement NotDependOnAny(IEnumerable types); + TNextElement NotDependOnAny(IEnumerable types); + ShouldRelateToTypesThat NotDependOnAnyTypesThat(); + + TNextElement NotHaveAnyAttributes(); + TNextElement NotHaveAnyAttributes(params Attribute[] attributes); + TNextElement NotHaveAnyAttributes(params Type[] attributes); + TNextElement NotHaveAnyAttributes(IObjectProvider attributes); + TNextElement NotHaveAnyAttributes(IEnumerable attributes); + TNextElement NotHaveAnyAttributes(IEnumerable attributes); + ShouldRelateToAttributesThat NotHaveAnyAttributesThat(); + + TNextElement NotHaveAnyAttributesWithArguments(IEnumerable argumentValues); + + TNextElement NotHaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues); + TNextElement NotHaveAttributeWithArguments(Type attribute, IEnumerable argumentValues); + + TNextElement NotHaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments); + TNextElement NotHaveAnyAttributesWithNamedArguments(params (string, object)[] attributeArguments); + + TNextElement NotHaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments); + TNextElement NotHaveAttributeWithNamedArguments(Attribute attribute, params (string, object)[] attributeArguments); + TNextElement NotHaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments); + TNextElement NotHaveAttributeWithNamedArguments(Type attribute, params (string, object)[] attributeArguments); + + TNextElement NotHaveName(string name); + TNextElement NotHaveNameMatching(string pattern); + TNextElement NotHaveNameStartingWith(string pattern); + TNextElement NotHaveNameEndingWith(string pattern); + TNextElement NotHaveNameContaining(string pattern); + + TNextElement NotHaveFullName(string fullName); + TNextElement NotHaveFullNameMatching(string pattern); + TNextElement NotHaveFullNameStartingWith(string pattern); + TNextElement NotHaveFullNameEndingWith(string pattern); + TNextElement NotHaveFullNameContaining(string pattern); + + TNextElement NotHaveAssemblyQualifiedName(string assemblyQualifiedName); + TNextElement NotHaveAssemblyQualifiedNameMatching(string pattern); + TNextElement NotHaveAssemblyQualifiedNameStartingWith(string pattern); + TNextElement NotHaveAssemblyQualifiedNameEndingWith(string pattern); + TNextElement NotHaveAssemblyQualifiedNameContaining(string pattern); + + TNextElement NotBePrivate(); + TNextElement NotBePublic(); + TNextElement NotBeProtected(); + TNextElement NotBeInternal(); + TNextElement NotBeProtectedInternal(); + TNextElement NotBePrivateProtected(); // csharpier-ignore-end } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/IAddObjectPredicate.cs b/ArchUnitNET/Fluent/Syntax/Elements/IAddObjectPredicate.cs index 1fbbf2a11..a904e218b 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/IAddObjectPredicate.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/IAddObjectPredicate.cs @@ -6,149 +6,149 @@ namespace ArchUnitNET.Fluent.Syntax.Elements { - public interface IAddObjectPredicate + public interface IAddObjectPredicate where TRuleType : ICanBeAnalyzed { // csharpier-ignore-start - TReturnType FollowCustomPredicate(IPredicate predicate); - TReturnType FollowCustomPredicate(Func predicate, string description); - - TReturnType Are(params ICanBeAnalyzed[] objects); - TReturnType Are(IEnumerable objects); - TReturnType Are(IObjectProvider objects); - - TReturnType CallAny(params MethodMember[] methods); - TReturnType CallAny(IEnumerable methods); - TReturnType CallAny(IObjectProvider methods); - - TReturnType DependOnAny(); - TReturnType DependOnAny(params IType[] types); - TReturnType DependOnAny(params Type[] types); - TReturnType DependOnAny(IEnumerable types); - TReturnType DependOnAny(IEnumerable types); - TReturnType DependOnAny(IObjectProvider types); - - TReturnType OnlyDependOn(); - TReturnType OnlyDependOn(params IType[] types); - TReturnType OnlyDependOn(params Type[] types); - TReturnType OnlyDependOn(IEnumerable types); - TReturnType OnlyDependOn(IEnumerable types); - TReturnType OnlyDependOn(IObjectProvider types); - - TReturnType HaveAnyAttributes(); - TReturnType HaveAnyAttributes(params Attribute[] attributes); - TReturnType HaveAnyAttributes(params Type[] attributes); - TReturnType HaveAnyAttributes(IEnumerable attributes); - TReturnType HaveAnyAttributes(IEnumerable attributes); - TReturnType HaveAnyAttributes(IObjectProvider attributes); - - TReturnType OnlyHaveAttributes(); - TReturnType OnlyHaveAttributes(params Attribute[] attributes); - TReturnType OnlyHaveAttributes(params Type[] attributes); - TReturnType OnlyHaveAttributes(IEnumerable attributes); - TReturnType OnlyHaveAttributes(IEnumerable attributes); - TReturnType OnlyHaveAttributes(IObjectProvider attributes); - - TReturnType HaveAnyAttributesWithArguments(IEnumerable argumentValues); - - TReturnType HaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues); - TReturnType HaveAttributeWithArguments(Type attribute, IEnumerable argumentValues); - - TReturnType HaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments); - TReturnType HaveAnyAttributesWithNamedArguments(params (string, object)[] attributeArguments); - - TReturnType HaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments); - TReturnType HaveAttributeWithNamedArguments(Attribute attribute, params (string, object)[] attributeArguments); - TReturnType HaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments); - TReturnType HaveAttributeWithNamedArguments(Type attribute, params (string, object)[] attributeArguments); - - TReturnType HaveName(string name); - TReturnType HaveNameMatching(string pattern); - TReturnType HaveNameStartingWith(string pattern); - TReturnType HaveNameEndingWith(string pattern); - TReturnType HaveNameContaining(string pattern); - - TReturnType HaveFullName(string fullName); - TReturnType HaveFullNameMatching(string pattern); - TReturnType HaveFullNameStartingWith(string pattern); - TReturnType HaveFullNameEndingWith(string pattern); - TReturnType HaveFullNameContaining(string pattern); - - TReturnType HaveAssemblyQualifiedName(string assemblyQualifiedName); - TReturnType HaveAssemblyQualifiedNameMatching(string pattern); - TReturnType HaveAssemblyQualifiedNameStartingWith(string pattern); - TReturnType HaveAssemblyQualifiedNameEndingWith(string pattern); - TReturnType HaveAssemblyQualifiedNameContaining(string pattern); - - TReturnType ArePrivate(); - TReturnType ArePublic(); - TReturnType AreProtected(); - TReturnType AreInternal(); - TReturnType AreProtectedInternal(); - TReturnType ArePrivateProtected(); + TNextElement FollowCustomPredicate(IPredicate predicate); + TNextElement FollowCustomPredicate(Func predicate, string description); + + TNextElement Are(params ICanBeAnalyzed[] objects); + TNextElement Are(IEnumerable objects); + TNextElement Are(IObjectProvider objects); + + TNextElement CallAny(params MethodMember[] methods); + TNextElement CallAny(IEnumerable methods); + TNextElement CallAny(IObjectProvider methods); + + TNextElement DependOnAny(); + TNextElement DependOnAny(params IType[] types); + TNextElement DependOnAny(params Type[] types); + TNextElement DependOnAny(IEnumerable types); + TNextElement DependOnAny(IEnumerable types); + TNextElement DependOnAny(IObjectProvider types); + + TNextElement OnlyDependOn(); + TNextElement OnlyDependOn(params IType[] types); + TNextElement OnlyDependOn(params Type[] types); + TNextElement OnlyDependOn(IEnumerable types); + TNextElement OnlyDependOn(IEnumerable types); + TNextElement OnlyDependOn(IObjectProvider types); + + TNextElement HaveAnyAttributes(); + TNextElement HaveAnyAttributes(params Attribute[] attributes); + TNextElement HaveAnyAttributes(params Type[] attributes); + TNextElement HaveAnyAttributes(IEnumerable attributes); + TNextElement HaveAnyAttributes(IEnumerable attributes); + TNextElement HaveAnyAttributes(IObjectProvider attributes); + + TNextElement OnlyHaveAttributes(); + TNextElement OnlyHaveAttributes(params Attribute[] attributes); + TNextElement OnlyHaveAttributes(params Type[] attributes); + TNextElement OnlyHaveAttributes(IEnumerable attributes); + TNextElement OnlyHaveAttributes(IEnumerable attributes); + TNextElement OnlyHaveAttributes(IObjectProvider attributes); + + TNextElement HaveAnyAttributesWithArguments(IEnumerable argumentValues); + + TNextElement HaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues); + TNextElement HaveAttributeWithArguments(Type attribute, IEnumerable argumentValues); + + TNextElement HaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments); + TNextElement HaveAnyAttributesWithNamedArguments(params (string, object)[] attributeArguments); + + TNextElement HaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments); + TNextElement HaveAttributeWithNamedArguments(Attribute attribute, params (string, object)[] attributeArguments); + TNextElement HaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments); + TNextElement HaveAttributeWithNamedArguments(Type attribute, params (string, object)[] attributeArguments); + + TNextElement HaveName(string name); + TNextElement HaveNameMatching(string pattern); + TNextElement HaveNameStartingWith(string pattern); + TNextElement HaveNameEndingWith(string pattern); + TNextElement HaveNameContaining(string pattern); + + TNextElement HaveFullName(string fullName); + TNextElement HaveFullNameMatching(string pattern); + TNextElement HaveFullNameStartingWith(string pattern); + TNextElement HaveFullNameEndingWith(string pattern); + TNextElement HaveFullNameContaining(string pattern); + + TNextElement HaveAssemblyQualifiedName(string assemblyQualifiedName); + TNextElement HaveAssemblyQualifiedNameMatching(string pattern); + TNextElement HaveAssemblyQualifiedNameStartingWith(string pattern); + TNextElement HaveAssemblyQualifiedNameEndingWith(string pattern); + TNextElement HaveAssemblyQualifiedNameContaining(string pattern); + + TNextElement ArePrivate(); + TNextElement ArePublic(); + TNextElement AreProtected(); + TNextElement AreInternal(); + TNextElement AreProtectedInternal(); + TNextElement ArePrivateProtected(); //Negations - TReturnType AreNot(params ICanBeAnalyzed[] objects); - TReturnType AreNot(IEnumerable objects); - TReturnType AreNot(IObjectProvider objects); - - TReturnType DoNotCallAny(params MethodMember[] methods); - TReturnType DoNotCallAny(IEnumerable methods); - TReturnType DoNotCallAny(IObjectProvider methods); - - TReturnType DoNotDependOnAny(); - TReturnType DoNotDependOnAny(params IType[] types); - TReturnType DoNotDependOnAny(params Type[] types); - TReturnType DoNotDependOnAny(IObjectProvider types); - TReturnType DoNotDependOnAny(IEnumerable types); - TReturnType DoNotDependOnAny(IEnumerable types); - - TReturnType DoNotHaveAnyAttributes(); - TReturnType DoNotHaveAnyAttributes(params Attribute[] attributes); - TReturnType DoNotHaveAnyAttributes(params Type[] attributes); - TReturnType DoNotHaveAnyAttributes(IObjectProvider attributes); - TReturnType DoNotHaveAnyAttributes(IEnumerable attributes); - TReturnType DoNotHaveAnyAttributes(IEnumerable attributes); - - TReturnType DoNotHaveAnyAttributesWithArguments(IEnumerable argumentValues); - - TReturnType DoNotHaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues); - TReturnType DoNotHaveAttributeWithArguments(Type attribute, IEnumerable argumentValues); - - TReturnType DoNotHaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments); - TReturnType DoNotHaveAnyAttributesWithNamedArguments(params (string, object)[] attributeArguments); - - TReturnType DoNotHaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments); - TReturnType DoNotHaveAttributeWithNamedArguments(Attribute attribute, params (string, object)[] attributeArguments); - TReturnType DoNotHaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments); - TReturnType DoNotHaveAttributeWithNamedArguments(Type attribute, params (string, object)[] attributeArguments); - - TReturnType DoNotHaveName(string name); - TReturnType DoNotHaveNameMatching(string pattern); - TReturnType DoNotHaveNameStartingWith(string pattern); - TReturnType DoNotHaveNameEndingWith(string pattern); - TReturnType DoNotHaveNameContaining(string pattern); - - TReturnType DoNotHaveFullName(string fullName); - TReturnType DoNotHaveFullNameMatching(string pattern); - TReturnType DoNotHaveFullNameStartingWith(string pattern); - TReturnType DoNotHaveFullNameEndingWith(string pattern); - TReturnType DoNotHaveFullNameContaining(string pattern); - - TReturnType DoNotHaveAssemblyQualifiedName(string assemblyQualifiedName); - TReturnType DoNotHaveAssemblyQualifiedNameMatching(string pattern); - TReturnType DoNotHaveAssemblyQualifiedNameStartingWith(string pattern); - TReturnType DoNotHaveAssemblyQualifiedNameEndingWith(string pattern); - TReturnType DoNotHaveAssemblyQualifiedNameContaining(string pattern); - - TReturnType AreNotPrivate(); - TReturnType AreNotPublic(); - TReturnType AreNotProtected(); - TReturnType AreNotInternal(); - TReturnType AreNotProtectedInternal(); - TReturnType AreNotPrivateProtected(); + TNextElement AreNot(params ICanBeAnalyzed[] objects); + TNextElement AreNot(IEnumerable objects); + TNextElement AreNot(IObjectProvider objects); + + TNextElement DoNotCallAny(params MethodMember[] methods); + TNextElement DoNotCallAny(IEnumerable methods); + TNextElement DoNotCallAny(IObjectProvider methods); + + TNextElement DoNotDependOnAny(); + TNextElement DoNotDependOnAny(params IType[] types); + TNextElement DoNotDependOnAny(params Type[] types); + TNextElement DoNotDependOnAny(IObjectProvider types); + TNextElement DoNotDependOnAny(IEnumerable types); + TNextElement DoNotDependOnAny(IEnumerable types); + + TNextElement DoNotHaveAnyAttributes(); + TNextElement DoNotHaveAnyAttributes(params Attribute[] attributes); + TNextElement DoNotHaveAnyAttributes(params Type[] attributes); + TNextElement DoNotHaveAnyAttributes(IObjectProvider attributes); + TNextElement DoNotHaveAnyAttributes(IEnumerable attributes); + TNextElement DoNotHaveAnyAttributes(IEnumerable attributes); + + TNextElement DoNotHaveAnyAttributesWithArguments(IEnumerable argumentValues); + + TNextElement DoNotHaveAttributeWithArguments(Attribute attribute, IEnumerable argumentValues); + TNextElement DoNotHaveAttributeWithArguments(Type attribute, IEnumerable argumentValues); + + TNextElement DoNotHaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments); + TNextElement DoNotHaveAnyAttributesWithNamedArguments(params (string, object)[] attributeArguments); + + TNextElement DoNotHaveAttributeWithNamedArguments(Attribute attribute, IEnumerable<(string, object)> attributeArguments); + TNextElement DoNotHaveAttributeWithNamedArguments(Attribute attribute, params (string, object)[] attributeArguments); + TNextElement DoNotHaveAttributeWithNamedArguments(Type attribute, IEnumerable<(string, object)> attributeArguments); + TNextElement DoNotHaveAttributeWithNamedArguments(Type attribute, params (string, object)[] attributeArguments); + + TNextElement DoNotHaveName(string name); + TNextElement DoNotHaveNameMatching(string pattern); + TNextElement DoNotHaveNameStartingWith(string pattern); + TNextElement DoNotHaveNameEndingWith(string pattern); + TNextElement DoNotHaveNameContaining(string pattern); + + TNextElement DoNotHaveFullName(string fullName); + TNextElement DoNotHaveFullNameMatching(string pattern); + TNextElement DoNotHaveFullNameStartingWith(string pattern); + TNextElement DoNotHaveFullNameEndingWith(string pattern); + TNextElement DoNotHaveFullNameContaining(string pattern); + + TNextElement DoNotHaveAssemblyQualifiedName(string assemblyQualifiedName); + TNextElement DoNotHaveAssemblyQualifiedNameMatching(string pattern); + TNextElement DoNotHaveAssemblyQualifiedNameStartingWith(string pattern); + TNextElement DoNotHaveAssemblyQualifiedNameEndingWith(string pattern); + TNextElement DoNotHaveAssemblyQualifiedNameContaining(string pattern); + + TNextElement AreNotPrivate(); + TNextElement AreNotPublic(); + TNextElement AreNotProtected(); + TNextElement AreNotInternal(); + TNextElement AreNotProtectedInternal(); + TNextElement AreNotPrivateProtected(); // csharpier-ignore-end } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IAddFieldMemberCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IAddFieldMemberCondition.cs index 9f6fdd305..a3f30e00a 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IAddFieldMemberCondition.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IAddFieldMemberCondition.cs @@ -2,7 +2,7 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Members.FieldMembers { - public interface IAddFieldMemberCondition - : IAddMemberCondition + public interface IAddFieldMemberCondition + : IAddMemberCondition where TRuleType : ICanBeAnalyzed { } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IAddFieldMemberPredicate.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IAddFieldMemberPredicate.cs index ce9d562d1..7820b5a2d 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IAddFieldMemberPredicate.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/FieldMembers/IAddFieldMemberPredicate.cs @@ -2,7 +2,7 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Members.FieldMembers { - public interface IAddFieldMemberPredicate - : IAddMemberPredicate + public interface IAddFieldMemberPredicate + : IAddMemberPredicate where TRuleType : ICanBeAnalyzed { } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/IAddMemberCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/IAddMemberCondition.cs index 4674f5fcc..bb8d18fd0 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/IAddMemberCondition.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/IAddMemberCondition.cs @@ -5,29 +5,29 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Members { - public interface IAddMemberCondition - : IAddObjectCondition + public interface IAddMemberCondition + : IAddObjectCondition where TRuleType : ICanBeAnalyzed { - TReturnType BeDeclaredIn(IType firstType, params IType[] moreTypes); - TReturnType BeDeclaredIn(Type firstType, params Type[] moreTypes); - TReturnType BeDeclaredIn(IObjectProvider types); - TReturnType BeDeclaredIn(IEnumerable types); - TReturnType BeDeclaredIn(IEnumerable types); - ShouldRelateToTypesThat BeDeclaredInTypesThat(); + TNextElement BeDeclaredIn(IType firstType, params IType[] moreTypes); + TNextElement BeDeclaredIn(Type firstType, params Type[] moreTypes); + TNextElement BeDeclaredIn(IObjectProvider types); + TNextElement BeDeclaredIn(IEnumerable types); + TNextElement BeDeclaredIn(IEnumerable types); + ShouldRelateToTypesThat BeDeclaredInTypesThat(); - TReturnType BeStatic(); - TReturnType BeImmutable(); + TNextElement BeStatic(); + TNextElement BeImmutable(); //Negations - TReturnType NotBeDeclaredIn(IType firstType, params IType[] moreTypes); - TReturnType NotBeDeclaredIn(Type firstType, params Type[] moreTypes); - TReturnType NotBeDeclaredIn(IObjectProvider types); - TReturnType NotBeDeclaredIn(IEnumerable types); - TReturnType NotBeDeclaredIn(IEnumerable types); - ShouldRelateToTypesThat NotBeDeclaredInTypesThat(); + TNextElement NotBeDeclaredIn(IType firstType, params IType[] moreTypes); + TNextElement NotBeDeclaredIn(Type firstType, params Type[] moreTypes); + TNextElement NotBeDeclaredIn(IObjectProvider types); + TNextElement NotBeDeclaredIn(IEnumerable types); + TNextElement NotBeDeclaredIn(IEnumerable types); + ShouldRelateToTypesThat NotBeDeclaredInTypesThat(); - TReturnType NotBeStatic(); - TReturnType NotBeImmutable(); + TNextElement NotBeStatic(); + TNextElement NotBeImmutable(); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/IAddMemberPredicate.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/IAddMemberPredicate.cs index a69761a0a..b7a9f4efd 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/IAddMemberPredicate.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/IAddMemberPredicate.cs @@ -4,26 +4,26 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Members { - public interface IAddMemberPredicate - : IAddObjectPredicate + public interface IAddMemberPredicate + : IAddObjectPredicate where TRuleType : ICanBeAnalyzed { - TRuleTypeConjunction AreDeclaredIn(IType firstType, params IType[] moreTypes); - TRuleTypeConjunction AreDeclaredIn(Type firstType, params Type[] moreTypes); - TRuleTypeConjunction AreDeclaredIn(IObjectProvider types); - TRuleTypeConjunction AreDeclaredIn(IEnumerable types); - TRuleTypeConjunction AreDeclaredIn(IEnumerable types); - TRuleTypeConjunction AreStatic(); - TRuleTypeConjunction AreImmutable(); + TNextElement AreDeclaredIn(IType firstType, params IType[] moreTypes); + TNextElement AreDeclaredIn(Type firstType, params Type[] moreTypes); + TNextElement AreDeclaredIn(IObjectProvider types); + TNextElement AreDeclaredIn(IEnumerable types); + TNextElement AreDeclaredIn(IEnumerable types); + TNextElement AreStatic(); + TNextElement AreImmutable(); //Negations - TRuleTypeConjunction AreNotDeclaredIn(IType firstType, params IType[] moreTypes); - TRuleTypeConjunction AreNotDeclaredIn(Type firstType, params Type[] moreTypes); - TRuleTypeConjunction AreNotDeclaredIn(IObjectProvider types); - TRuleTypeConjunction AreNotDeclaredIn(IEnumerable types); - TRuleTypeConjunction AreNotDeclaredIn(IEnumerable types); - TRuleTypeConjunction AreNotStatic(); - TRuleTypeConjunction AreNotImmutable(); + TNextElement AreNotDeclaredIn(IType firstType, params IType[] moreTypes); + TNextElement AreNotDeclaredIn(Type firstType, params Type[] moreTypes); + TNextElement AreNotDeclaredIn(IObjectProvider types); + TNextElement AreNotDeclaredIn(IEnumerable types); + TNextElement AreNotDeclaredIn(IEnumerable types); + TNextElement AreNotStatic(); + TNextElement AreNotImmutable(); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IAddMethodMemberCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IAddMethodMemberCondition.cs index 0dd1894f3..cc559b773 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IAddMethodMemberCondition.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IAddMethodMemberCondition.cs @@ -4,52 +4,52 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Members.MethodMembers { - public interface IAddMethodMemberCondition - : IAddMemberCondition + public interface IAddMethodMemberCondition + : IAddMemberCondition where TRuleType : ICanBeAnalyzed { - TReturnType BeConstructor(); - TReturnType BeVirtual(); - - TReturnType BeCalledBy(IType firstType, params IType[] moreTypes); - TReturnType BeCalledBy(Type type, params Type[] moreTypes); - TReturnType BeCalledBy(IObjectProvider types); - TReturnType BeCalledBy(IEnumerable types); - TReturnType BeCalledBy(IEnumerable types); - - TReturnType HaveDependencyInMethodBodyTo(IType firstType, params IType[] moreTypes); - TReturnType HaveDependencyInMethodBodyTo(Type type, params Type[] moreTypes); - TReturnType HaveDependencyInMethodBodyTo(IObjectProvider types); - TReturnType HaveDependencyInMethodBodyTo(IEnumerable types); - TReturnType HaveDependencyInMethodBodyTo(IEnumerable types); - - TReturnType HaveReturnType(IType firstType, params IType[] moreTypes); - TReturnType HaveReturnType(IEnumerable types); - TReturnType HaveReturnType(IObjectProvider types); - TReturnType HaveReturnType(Type type, params Type[] moreTypes); - TReturnType HaveReturnType(IEnumerable types); + TNextElement BeConstructor(); + TNextElement BeVirtual(); + + TNextElement BeCalledBy(IType firstType, params IType[] moreTypes); + TNextElement BeCalledBy(Type type, params Type[] moreTypes); + TNextElement BeCalledBy(IObjectProvider types); + TNextElement BeCalledBy(IEnumerable types); + TNextElement BeCalledBy(IEnumerable types); + + TNextElement HaveDependencyInMethodBodyTo(IType firstType, params IType[] moreTypes); + TNextElement HaveDependencyInMethodBodyTo(Type type, params Type[] moreTypes); + TNextElement HaveDependencyInMethodBodyTo(IObjectProvider types); + TNextElement HaveDependencyInMethodBodyTo(IEnumerable types); + TNextElement HaveDependencyInMethodBodyTo(IEnumerable types); + + TNextElement HaveReturnType(IType firstType, params IType[] moreTypes); + TNextElement HaveReturnType(IEnumerable types); + TNextElement HaveReturnType(IObjectProvider types); + TNextElement HaveReturnType(Type type, params Type[] moreTypes); + TNextElement HaveReturnType(IEnumerable types); //Negations - TReturnType BeNoConstructor(); - TReturnType NotBeVirtual(); - - TReturnType NotBeCalledBy(IType firstType, params IType[] moreTypes); - TReturnType NotBeCalledBy(Type type, params Type[] moreTypes); - TReturnType NotBeCalledBy(IObjectProvider types); - TReturnType NotBeCalledBy(IEnumerable types); - TReturnType NotBeCalledBy(IEnumerable types); - - TReturnType NotHaveDependencyInMethodBodyTo(IType firstType, params IType[] moreTypes); - TReturnType NotHaveDependencyInMethodBodyTo(Type type, params Type[] moreTypes); - TReturnType NotHaveDependencyInMethodBodyTo(IObjectProvider types); - TReturnType NotHaveDependencyInMethodBodyTo(IEnumerable types); - TReturnType NotHaveDependencyInMethodBodyTo(IEnumerable types); - - TReturnType NotHaveReturnType(IType firstType, params IType[] moreTypes); - TReturnType NotHaveReturnType(IEnumerable types); - TReturnType NotHaveReturnType(IObjectProvider types); - TReturnType NotHaveReturnType(Type type, params Type[] moreTypes); - TReturnType NotHaveReturnType(IEnumerable types); + TNextElement BeNoConstructor(); + TNextElement NotBeVirtual(); + + TNextElement NotBeCalledBy(IType firstType, params IType[] moreTypes); + TNextElement NotBeCalledBy(Type type, params Type[] moreTypes); + TNextElement NotBeCalledBy(IObjectProvider types); + TNextElement NotBeCalledBy(IEnumerable types); + TNextElement NotBeCalledBy(IEnumerable types); + + TNextElement NotHaveDependencyInMethodBodyTo(IType firstType, params IType[] moreTypes); + TNextElement NotHaveDependencyInMethodBodyTo(Type type, params Type[] moreTypes); + TNextElement NotHaveDependencyInMethodBodyTo(IObjectProvider types); + TNextElement NotHaveDependencyInMethodBodyTo(IEnumerable types); + TNextElement NotHaveDependencyInMethodBodyTo(IEnumerable types); + + TNextElement NotHaveReturnType(IType firstType, params IType[] moreTypes); + TNextElement NotHaveReturnType(IEnumerable types); + TNextElement NotHaveReturnType(IObjectProvider types); + TNextElement NotHaveReturnType(Type type, params Type[] moreTypes); + TNextElement NotHaveReturnType(IEnumerable types); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IAddMethodMemberPredicate.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IAddMethodMemberPredicate.cs index f39ed4cca..4e81ced73 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IAddMethodMemberPredicate.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IAddMethodMemberPredicate.cs @@ -4,52 +4,52 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Members.MethodMembers { - public interface IAddMethodMemberPredicate - : IAddMemberPredicate + public interface IAddMethodMemberPredicate + : IAddMemberPredicate where TRuleType : ICanBeAnalyzed { - TRuleTypeConjunction AreConstructors(); - TRuleTypeConjunction AreVirtual(); - - TRuleTypeConjunction AreCalledBy(IType firstType, params IType[] moreTypes); - TRuleTypeConjunction AreCalledBy(Type type, params Type[] moreTypes); - TRuleTypeConjunction AreCalledBy(IObjectProvider types); - TRuleTypeConjunction AreCalledBy(IEnumerable types); - TRuleTypeConjunction AreCalledBy(IEnumerable types); - - TRuleTypeConjunction HaveDependencyInMethodBodyTo(IType firstType, params IType[] moreTypes); - TRuleTypeConjunction HaveDependencyInMethodBodyTo(Type type, params Type[] moreTypes); - TRuleTypeConjunction HaveDependencyInMethodBodyTo(IObjectProvider types); - TRuleTypeConjunction HaveDependencyInMethodBodyTo(IEnumerable types); - TRuleTypeConjunction HaveDependencyInMethodBodyTo(IEnumerable types); - - TRuleTypeConjunction HaveReturnType(IType firstType, params IType[] moreTypes); - TRuleTypeConjunction HaveReturnType(IEnumerable types); - TRuleTypeConjunction HaveReturnType(IObjectProvider types); - TRuleTypeConjunction HaveReturnType(Type type, params Type[] moreTypes); - TRuleTypeConjunction HaveReturnType(IEnumerable types); + TNextElement AreConstructors(); + TNextElement AreVirtual(); + + TNextElement AreCalledBy(IType firstType, params IType[] moreTypes); + TNextElement AreCalledBy(Type type, params Type[] moreTypes); + TNextElement AreCalledBy(IObjectProvider types); + TNextElement AreCalledBy(IEnumerable types); + TNextElement AreCalledBy(IEnumerable types); + + TNextElement HaveDependencyInMethodBodyTo(IType firstType, params IType[] moreTypes); + TNextElement HaveDependencyInMethodBodyTo(Type type, params Type[] moreTypes); + TNextElement HaveDependencyInMethodBodyTo(IObjectProvider types); + TNextElement HaveDependencyInMethodBodyTo(IEnumerable types); + TNextElement HaveDependencyInMethodBodyTo(IEnumerable types); + + TNextElement HaveReturnType(IType firstType, params IType[] moreTypes); + TNextElement HaveReturnType(IEnumerable types); + TNextElement HaveReturnType(IObjectProvider types); + TNextElement HaveReturnType(Type type, params Type[] moreTypes); + TNextElement HaveReturnType(IEnumerable types); //Negations - TRuleTypeConjunction AreNoConstructors(); - TRuleTypeConjunction AreNotVirtual(); - - TRuleTypeConjunction AreNotCalledBy(IType firstType, params IType[] moreTypes); - TRuleTypeConjunction AreNotCalledBy(Type type, params Type[] moreTypes); - TRuleTypeConjunction AreNotCalledBy(IObjectProvider types); - TRuleTypeConjunction AreNotCalledBy(IEnumerable types); - TRuleTypeConjunction AreNotCalledBy(IEnumerable types); - - TRuleTypeConjunction DoNotHaveDependencyInMethodBodyTo(IType firstType, params IType[] moreTypes); - TRuleTypeConjunction DoNotHaveDependencyInMethodBodyTo(Type type, params Type[] moreTypes); - TRuleTypeConjunction DoNotHaveDependencyInMethodBodyTo(IObjectProvider types); - TRuleTypeConjunction DoNotHaveDependencyInMethodBodyTo(IEnumerable types); - TRuleTypeConjunction DoNotHaveDependencyInMethodBodyTo(IEnumerable types); - - TRuleTypeConjunction DoNotHaveReturnType(IType firstType, params IType[] moreTypes); - TRuleTypeConjunction DoNotHaveReturnType(IEnumerable types); - TRuleTypeConjunction DoNotHaveReturnType(IObjectProvider types); - TRuleTypeConjunction DoNotHaveReturnType(Type type, params Type[] moreTypes); - TRuleTypeConjunction DoNotHaveReturnType(IEnumerable types); + TNextElement AreNoConstructors(); + TNextElement AreNotVirtual(); + + TNextElement AreNotCalledBy(IType firstType, params IType[] moreTypes); + TNextElement AreNotCalledBy(Type type, params Type[] moreTypes); + TNextElement AreNotCalledBy(IObjectProvider types); + TNextElement AreNotCalledBy(IEnumerable types); + TNextElement AreNotCalledBy(IEnumerable types); + + TNextElement DoNotHaveDependencyInMethodBodyTo(IType firstType, params IType[] moreTypes); + TNextElement DoNotHaveDependencyInMethodBodyTo(Type type, params Type[] moreTypes); + TNextElement DoNotHaveDependencyInMethodBodyTo(IObjectProvider types); + TNextElement DoNotHaveDependencyInMethodBodyTo(IEnumerable types); + TNextElement DoNotHaveDependencyInMethodBodyTo(IEnumerable types); + + TNextElement DoNotHaveReturnType(IType firstType, params IType[] moreTypes); + TNextElement DoNotHaveReturnType(IEnumerable types); + TNextElement DoNotHaveReturnType(IObjectProvider types); + TNextElement DoNotHaveReturnType(Type type, params Type[] moreTypes); + TNextElement DoNotHaveReturnType(IEnumerable types); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IAddPropertyMemberCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IAddPropertyMemberCondition.cs index 4dcd17f6c..f6e89929b 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IAddPropertyMemberCondition.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IAddPropertyMemberCondition.cs @@ -2,44 +2,44 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Members.PropertyMembers { - public interface IAddPropertyMemberCondition - : IAddMemberCondition + public interface IAddPropertyMemberCondition + : IAddMemberCondition where TRuleType : ICanBeAnalyzed { - TReturnType HaveGetter(); - TReturnType HavePrivateGetter(); - TReturnType HavePublicGetter(); - TReturnType HaveProtectedGetter(); - TReturnType HaveInternalGetter(); - TReturnType HaveProtectedInternalGetter(); - TReturnType HavePrivateProtectedGetter(); - TReturnType HaveSetter(); - TReturnType HavePrivateSetter(); - TReturnType HavePublicSetter(); - TReturnType HaveProtectedSetter(); - TReturnType HaveInternalSetter(); - TReturnType HaveProtectedInternalSetter(); - TReturnType HavePrivateProtectedSetter(); - TReturnType HaveInitOnlySetter(); - TReturnType BeVirtual(); + TNextElement HaveGetter(); + TNextElement HavePrivateGetter(); + TNextElement HavePublicGetter(); + TNextElement HaveProtectedGetter(); + TNextElement HaveInternalGetter(); + TNextElement HaveProtectedInternalGetter(); + TNextElement HavePrivateProtectedGetter(); + TNextElement HaveSetter(); + TNextElement HavePrivateSetter(); + TNextElement HavePublicSetter(); + TNextElement HaveProtectedSetter(); + TNextElement HaveInternalSetter(); + TNextElement HaveProtectedInternalSetter(); + TNextElement HavePrivateProtectedSetter(); + TNextElement HaveInitOnlySetter(); + TNextElement BeVirtual(); //Negations - TReturnType NotHaveGetter(); - TReturnType NotHavePrivateGetter(); - TReturnType NotHavePublicGetter(); - TReturnType NotHaveProtectedGetter(); - TReturnType NotHaveInternalGetter(); - TReturnType NotHaveProtectedInternalGetter(); - TReturnType NotHavePrivateProtectedGetter(); - TReturnType NotHaveSetter(); - TReturnType NotHavePrivateSetter(); - TReturnType NotHavePublicSetter(); - TReturnType NotHaveProtectedSetter(); - TReturnType NotHaveInternalSetter(); - TReturnType NotHaveProtectedInternalSetter(); - TReturnType NotHavePrivateProtectedSetter(); - TReturnType NotHaveInitOnlySetter(); - TReturnType NotBeVirtual(); + TNextElement NotHaveGetter(); + TNextElement NotHavePrivateGetter(); + TNextElement NotHavePublicGetter(); + TNextElement NotHaveProtectedGetter(); + TNextElement NotHaveInternalGetter(); + TNextElement NotHaveProtectedInternalGetter(); + TNextElement NotHavePrivateProtectedGetter(); + TNextElement NotHaveSetter(); + TNextElement NotHavePrivateSetter(); + TNextElement NotHavePublicSetter(); + TNextElement NotHaveProtectedSetter(); + TNextElement NotHaveInternalSetter(); + TNextElement NotHaveProtectedInternalSetter(); + TNextElement NotHavePrivateProtectedSetter(); + TNextElement NotHaveInitOnlySetter(); + TNextElement NotBeVirtual(); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IAddPropertyMemberPredicate.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IAddPropertyMemberPredicate.cs index 4a9d244d3..fb6e76ff6 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IAddPropertyMemberPredicate.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IAddPropertyMemberPredicate.cs @@ -2,44 +2,44 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Members.PropertyMembers { - public interface IAddPropertyMemberPredicate - : IAddMemberPredicate + public interface IAddPropertyMemberPredicate + : IAddMemberPredicate where TRuleType : ICanBeAnalyzed { - TRuleTypeConjunction HaveGetter(); - TRuleTypeConjunction HavePrivateGetter(); - TRuleTypeConjunction HavePublicGetter(); - TRuleTypeConjunction HaveProtectedGetter(); - TRuleTypeConjunction HaveInternalGetter(); - TRuleTypeConjunction HaveProtectedInternalGetter(); - TRuleTypeConjunction HavePrivateProtectedGetter(); - TRuleTypeConjunction HaveSetter(); - TRuleTypeConjunction HavePrivateSetter(); - TRuleTypeConjunction HavePublicSetter(); - TRuleTypeConjunction HaveProtectedSetter(); - TRuleTypeConjunction HaveInternalSetter(); - TRuleTypeConjunction HaveProtectedInternalSetter(); - TRuleTypeConjunction HavePrivateProtectedSetter(); - TRuleTypeConjunction HaveInitOnlySetter(); - TRuleTypeConjunction AreVirtual(); + TNextElement HaveGetter(); + TNextElement HavePrivateGetter(); + TNextElement HavePublicGetter(); + TNextElement HaveProtectedGetter(); + TNextElement HaveInternalGetter(); + TNextElement HaveProtectedInternalGetter(); + TNextElement HavePrivateProtectedGetter(); + TNextElement HaveSetter(); + TNextElement HavePrivateSetter(); + TNextElement HavePublicSetter(); + TNextElement HaveProtectedSetter(); + TNextElement HaveInternalSetter(); + TNextElement HaveProtectedInternalSetter(); + TNextElement HavePrivateProtectedSetter(); + TNextElement HaveInitOnlySetter(); + TNextElement AreVirtual(); //Negations - TRuleTypeConjunction HaveNoGetter(); - TRuleTypeConjunction DoNotHavePrivateGetter(); - TRuleTypeConjunction DoNotHavePublicGetter(); - TRuleTypeConjunction DoNotHaveProtectedGetter(); - TRuleTypeConjunction DoNotHaveInternalGetter(); - TRuleTypeConjunction DoNotHaveProtectedInternalGetter(); - TRuleTypeConjunction DoNotHavePrivateProtectedGetter(); - TRuleTypeConjunction HaveNoSetter(); - TRuleTypeConjunction DoNotHavePrivateSetter(); - TRuleTypeConjunction DoNotHavePublicSetter(); - TRuleTypeConjunction DoNotHaveProtectedSetter(); - TRuleTypeConjunction DoNotHaveInternalSetter(); - TRuleTypeConjunction DoNotHaveProtectedInternalSetter(); - TRuleTypeConjunction DoNotHavePrivateProtectedSetter(); - TRuleTypeConjunction DoNotHaveInitOnlySetter(); - TRuleTypeConjunction AreNotVirtual(); + TNextElement HaveNoGetter(); + TNextElement DoNotHavePrivateGetter(); + TNextElement DoNotHavePublicGetter(); + TNextElement DoNotHaveProtectedGetter(); + TNextElement DoNotHaveInternalGetter(); + TNextElement DoNotHaveProtectedInternalGetter(); + TNextElement DoNotHavePrivateProtectedGetter(); + TNextElement HaveNoSetter(); + TNextElement DoNotHavePrivateSetter(); + TNextElement DoNotHavePublicSetter(); + TNextElement DoNotHaveProtectedSetter(); + TNextElement DoNotHaveInternalSetter(); + TNextElement DoNotHaveProtectedInternalSetter(); + TNextElement DoNotHavePrivateProtectedSetter(); + TNextElement DoNotHaveInitOnlySetter(); + TNextElement AreNotVirtual(); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAddAttributeCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAddAttributeCondition.cs index 57ee6d8bf..fb059a249 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAddAttributeCondition.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAddAttributeCondition.cs @@ -2,16 +2,16 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Attributes { - public interface IAddAttributeCondition - : IAddTypeCondition + public interface IAddAttributeCondition + : IAddTypeCondition where TRuleType : ICanBeAnalyzed { - TReturnType BeAbstract(); - TReturnType BeSealed(); + TNextElement BeAbstract(); + TNextElement BeSealed(); //Negations - TReturnType NotBeAbstract(); - TReturnType NotBeSealed(); + TNextElement NotBeAbstract(); + TNextElement NotBeSealed(); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAddAttributePredicate.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAddAttributePredicate.cs index 3685cf673..3ca07c1c1 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAddAttributePredicate.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAddAttributePredicate.cs @@ -2,16 +2,16 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Attributes { - public interface IAddAttributePredicate - : IAddTypePredicate + public interface IAddAttributePredicate + : IAddTypePredicate where TRuleType : ICanBeAnalyzed { - TReturnType AreAbstract(); - TReturnType AreSealed(); + TNextElement AreAbstract(); + TNextElement AreSealed(); //Negations - TReturnType AreNotAbstract(); - TReturnType AreNotSealed(); + TNextElement AreNotAbstract(); + TNextElement AreNotSealed(); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IAddClassCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IAddClassCondition.cs index 1d431534d..337fa7193 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IAddClassCondition.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IAddClassCondition.cs @@ -2,18 +2,18 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Classes { - public interface IAddClassCondition - : IAddTypeCondition + public interface IAddClassCondition + : IAddTypeCondition where TRuleType : ICanBeAnalyzed { - TReturnType BeAbstract(); - TReturnType BeSealed(); - TReturnType BeImmutable(); + TNextElement BeAbstract(); + TNextElement BeSealed(); + TNextElement BeImmutable(); //Negations - TReturnType NotBeAbstract(); - TReturnType NotBeSealed(); - TReturnType NotBeImmutable(); + TNextElement NotBeAbstract(); + TNextElement NotBeSealed(); + TNextElement NotBeImmutable(); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IAddClassPredicate.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IAddClassPredicate.cs index 855a31bf6..957be5c3b 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IAddClassPredicate.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IAddClassPredicate.cs @@ -2,18 +2,18 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Classes { - public interface IAddClassPredicate - : IAddTypePredicate + public interface IAddClassPredicate + : IAddTypePredicate where TRuleType : ICanBeAnalyzed { - TReturnType AreAbstract(); - TReturnType AreSealed(); - TReturnType AreImmutable(); + TNextElement AreAbstract(); + TNextElement AreSealed(); + TNextElement AreImmutable(); //Negations - TReturnType AreNotAbstract(); - TReturnType AreNotSealed(); - TReturnType AreNotImmutable(); + TNextElement AreNotAbstract(); + TNextElement AreNotSealed(); + TNextElement AreNotImmutable(); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/IAddTypeCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/IAddTypeCondition.cs index 76c10ed40..c4a26a6e5 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/IAddTypeCondition.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/IAddTypeCondition.cs @@ -6,95 +6,95 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types { - public interface IAddTypeCondition - : IAddObjectCondition + public interface IAddTypeCondition + : IAddObjectCondition where TRuleType : ICanBeAnalyzed { - TReturnType Be(Type firstType, params Type[] moreTypes); - TReturnType Be(IEnumerable types); - - TReturnType BeAssignableTo(IType firstType, params IType[] moreTypes); - TReturnType BeAssignableTo(Type type, params Type[] moreTypes); - TReturnType BeAssignableTo(IObjectProvider types); - TReturnType BeAssignableTo(IEnumerable types); - TReturnType BeAssignableTo(IEnumerable types); - ShouldRelateToTypesThat BeAssignableToTypesThat(); - - TReturnType BeValueTypes(); - TReturnType BeEnums(); - TReturnType BeStructs(); - - TReturnType ImplementInterface(Interface intf); - TReturnType ImplementInterface(Type intf); - - TReturnType ImplementAnyInterfaces(); - TReturnType ImplementAnyInterfaces(params Interface[] interfaces); - TReturnType ImplementAnyInterfaces(params Type[] interfaces); - TReturnType ImplementAnyInterfaces(IEnumerable interfaces); - TReturnType ImplementAnyInterfaces(IEnumerable interfaces); - TReturnType ImplementAnyInterfaces(IObjectProvider interfaces); - ShouldRelateToInterfacesThat ImplementAnyInterfacesThat(); - - TReturnType ResideInNamespace(string fullName); - TReturnType ResideInNamespaceMatching(string pattern); - - TReturnType ResideInAssembly(string fullName); - TReturnType ResideInAssemblyMatching(string pattern); - TReturnType ResideInAssembly(Assembly assembly, params Assembly[] moreAssemblies); - TReturnType ResideInAssembly( + TNextElement Be(Type firstType, params Type[] moreTypes); + TNextElement Be(IEnumerable types); + + TNextElement BeAssignableTo(IType firstType, params IType[] moreTypes); + TNextElement BeAssignableTo(Type type, params Type[] moreTypes); + TNextElement BeAssignableTo(IObjectProvider types); + TNextElement BeAssignableTo(IEnumerable types); + TNextElement BeAssignableTo(IEnumerable types); + ShouldRelateToTypesThat BeAssignableToTypesThat(); + + TNextElement BeValueTypes(); + TNextElement BeEnums(); + TNextElement BeStructs(); + + TNextElement ImplementInterface(Interface intf); + TNextElement ImplementInterface(Type intf); + + TNextElement ImplementAnyInterfaces(); + TNextElement ImplementAnyInterfaces(params Interface[] interfaces); + TNextElement ImplementAnyInterfaces(params Type[] interfaces); + TNextElement ImplementAnyInterfaces(IEnumerable interfaces); + TNextElement ImplementAnyInterfaces(IEnumerable interfaces); + TNextElement ImplementAnyInterfaces(IObjectProvider interfaces); + ShouldRelateToInterfacesThat ImplementAnyInterfacesThat(); + + TNextElement ResideInNamespace(string fullName); + TNextElement ResideInNamespaceMatching(string pattern); + + TNextElement ResideInAssembly(string fullName); + TNextElement ResideInAssemblyMatching(string pattern); + TNextElement ResideInAssembly(Assembly assembly, params Assembly[] moreAssemblies); + TNextElement ResideInAssembly( Domain.Assembly assembly, params Domain.Assembly[] moreAssemblies ); - TReturnType HavePropertyMemberWithName(string name); - TReturnType HaveFieldMemberWithName(string name); - TReturnType HaveMethodMemberWithName(string name); - TReturnType HaveMemberWithName(string name); + TNextElement HavePropertyMemberWithName(string name); + TNextElement HaveFieldMemberWithName(string name); + TNextElement HaveMethodMemberWithName(string name); + TNextElement HaveMemberWithName(string name); - TReturnType BeNested(); + TNextElement BeNested(); //Negations - TReturnType NotBe(Type firstType, params Type[] moreTypes); - TReturnType NotBe(IEnumerable types); - - TReturnType NotBeAssignableTo(IType type, params IType[] moreTypes); - TReturnType NotBeAssignableTo(Type type, params Type[] moreTypes); - TReturnType NotBeAssignableTo(IObjectProvider types); - TReturnType NotBeAssignableTo(IEnumerable types); - TReturnType NotBeAssignableTo(IEnumerable types); - ShouldRelateToTypesThat NotBeAssignableToTypesThat(); - - TReturnType NotBeValueTypes(); - TReturnType NotBeEnums(); - TReturnType NotBeStructs(); - - TReturnType NotImplementInterface(Interface intf); - TReturnType NotImplementInterface(Type intf); - - TReturnType NotImplementAnyInterfaces(); - TReturnType NotImplementAnyInterfaces(params Interface[] interfaces); - TReturnType NotImplementAnyInterfaces(params Type[] interfaces); - TReturnType NotImplementAnyInterfaces(IEnumerable interfaces); - TReturnType NotImplementAnyInterfaces(IEnumerable interfaces); - TReturnType NotImplementAnyInterfaces(IObjectProvider interfaces); - ShouldRelateToInterfacesThat NotImplementAnyInterfacesThat(); - - TReturnType NotResideInNamespace(string fullName); - TReturnType NotResideInNamespaceMatching(string pattern); - - TReturnType NotResideInAssemblyMatching(string pattern); - TReturnType NotResideInAssembly(Assembly assembly, params Assembly[] moreAssemblies); - TReturnType NotResideInAssembly( + TNextElement NotBe(Type firstType, params Type[] moreTypes); + TNextElement NotBe(IEnumerable types); + + TNextElement NotBeAssignableTo(IType type, params IType[] moreTypes); + TNextElement NotBeAssignableTo(Type type, params Type[] moreTypes); + TNextElement NotBeAssignableTo(IObjectProvider types); + TNextElement NotBeAssignableTo(IEnumerable types); + TNextElement NotBeAssignableTo(IEnumerable types); + ShouldRelateToTypesThat NotBeAssignableToTypesThat(); + + TNextElement NotBeValueTypes(); + TNextElement NotBeEnums(); + TNextElement NotBeStructs(); + + TNextElement NotImplementInterface(Interface intf); + TNextElement NotImplementInterface(Type intf); + + TNextElement NotImplementAnyInterfaces(); + TNextElement NotImplementAnyInterfaces(params Interface[] interfaces); + TNextElement NotImplementAnyInterfaces(params Type[] interfaces); + TNextElement NotImplementAnyInterfaces(IEnumerable interfaces); + TNextElement NotImplementAnyInterfaces(IEnumerable interfaces); + TNextElement NotImplementAnyInterfaces(IObjectProvider interfaces); + ShouldRelateToInterfacesThat NotImplementAnyInterfacesThat(); + + TNextElement NotResideInNamespace(string fullName); + TNextElement NotResideInNamespaceMatching(string pattern); + + TNextElement NotResideInAssemblyMatching(string pattern); + TNextElement NotResideInAssembly(Assembly assembly, params Assembly[] moreAssemblies); + TNextElement NotResideInAssembly( Domain.Assembly assembly, params Domain.Assembly[] moreAssemblies ); - TReturnType NotHavePropertyMemberWithName(string name); - TReturnType NotHaveFieldMemberWithName(string name); - TReturnType NotHaveMethodMemberWithName(string name); - TReturnType NotHaveMemberWithName(string name); + TNextElement NotHavePropertyMemberWithName(string name); + TNextElement NotHaveFieldMemberWithName(string name); + TNextElement NotHaveMethodMemberWithName(string name); + TNextElement NotHaveMemberWithName(string name); - TReturnType NotBeNested(); + TNextElement NotBeNested(); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/IAddTypePredicate.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/IAddTypePredicate.cs index 026c513e8..c7c56703e 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/IAddTypePredicate.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/IAddTypePredicate.cs @@ -5,85 +5,85 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types { - public interface IAddTypePredicate - : IAddObjectPredicate + public interface IAddTypePredicate + : IAddObjectPredicate where TRuleType : ICanBeAnalyzed { - TReturnType Are(Type firstType, params Type[] moreTypes); - TReturnType Are(IEnumerable types); + TNextElement Are(Type firstType, params Type[] moreTypes); + TNextElement Are(IEnumerable types); - TReturnType AreAssignableTo(IType firstType, params IType[] moreTypes); - TReturnType AreAssignableTo(Type type, params Type[] moreTypes); - TReturnType AreAssignableTo(IObjectProvider types); - TReturnType AreAssignableTo(IEnumerable types); - TReturnType AreAssignableTo(IEnumerable types); - TReturnType AreValueTypes(); - TReturnType AreEnums(); - TReturnType AreStructs(); + TNextElement AreAssignableTo(IType firstType, params IType[] moreTypes); + TNextElement AreAssignableTo(Type type, params Type[] moreTypes); + TNextElement AreAssignableTo(IObjectProvider types); + TNextElement AreAssignableTo(IEnumerable types); + TNextElement AreAssignableTo(IEnumerable types); + TNextElement AreValueTypes(); + TNextElement AreEnums(); + TNextElement AreStructs(); - TReturnType ImplementInterface(Interface intf); - TReturnType ImplementInterface(Type intf); + TNextElement ImplementInterface(Interface intf); + TNextElement ImplementInterface(Type intf); - TReturnType ImplementAnyInterfaces(); - TReturnType ImplementAnyInterfaces(params Interface[] interfaces); - TReturnType ImplementAnyInterfaces(params Type[] interfaces); - TReturnType ImplementAnyInterfaces(IEnumerable interfaces); - TReturnType ImplementAnyInterfaces(IEnumerable interfaces); - TReturnType ImplementAnyInterfaces(IObjectProvider interfaces); + TNextElement ImplementAnyInterfaces(); + TNextElement ImplementAnyInterfaces(params Interface[] interfaces); + TNextElement ImplementAnyInterfaces(params Type[] interfaces); + TNextElement ImplementAnyInterfaces(IEnumerable interfaces); + TNextElement ImplementAnyInterfaces(IEnumerable interfaces); + TNextElement ImplementAnyInterfaces(IObjectProvider interfaces); - TReturnType ResideInNamespace(string fullName); - TReturnType ResideInNamespaceMatching(string pattern); + TNextElement ResideInNamespace(string fullName); + TNextElement ResideInNamespaceMatching(string pattern); - TReturnType ResideInAssembly(string fullName); - TReturnType ResideInAssemblyMatching(string pattern); - TReturnType ResideInAssembly(Assembly assembly, params Assembly[] moreAssemblies); - TReturnType ResideInAssembly( + TNextElement ResideInAssembly(string fullName); + TNextElement ResideInAssemblyMatching(string pattern); + TNextElement ResideInAssembly(Assembly assembly, params Assembly[] moreAssemblies); + TNextElement ResideInAssembly( Domain.Assembly assembly, params Domain.Assembly[] moreAssemblies ); - TReturnType HavePropertyMemberWithName(string name); - TReturnType HaveFieldMemberWithName(string name); - TReturnType HaveMethodMemberWithName(string name); - TReturnType HaveMemberWithName(string name); - TReturnType AreNested(); + TNextElement HavePropertyMemberWithName(string name); + TNextElement HaveFieldMemberWithName(string name); + TNextElement HaveMethodMemberWithName(string name); + TNextElement HaveMemberWithName(string name); + TNextElement AreNested(); //Negations - TReturnType AreNot(Type firstType, params Type[] moreTypes); - TReturnType AreNot(IEnumerable types); + TNextElement AreNot(Type firstType, params Type[] moreTypes); + TNextElement AreNot(IEnumerable types); - TReturnType AreNotAssignableTo(IType type, params IType[] moreTypes); - TReturnType AreNotAssignableTo(Type type, params Type[] moreTypes); - TReturnType AreNotAssignableTo(IObjectProvider types); - TReturnType AreNotAssignableTo(IEnumerable types); - TReturnType AreNotAssignableTo(IEnumerable types); - TReturnType AreNotValueTypes(); - TReturnType AreNotEnums(); - TReturnType AreNotStructs(); + TNextElement AreNotAssignableTo(IType type, params IType[] moreTypes); + TNextElement AreNotAssignableTo(Type type, params Type[] moreTypes); + TNextElement AreNotAssignableTo(IObjectProvider types); + TNextElement AreNotAssignableTo(IEnumerable types); + TNextElement AreNotAssignableTo(IEnumerable types); + TNextElement AreNotValueTypes(); + TNextElement AreNotEnums(); + TNextElement AreNotStructs(); - TReturnType DoNotImplementInterface(Interface intf); - TReturnType DoNotImplementInterface(Type intf); + TNextElement DoNotImplementInterface(Interface intf); + TNextElement DoNotImplementInterface(Type intf); - TReturnType DoNotImplementAnyInterfaces(); - TReturnType DoNotImplementAnyInterfaces(params Interface[] interfaces); - TReturnType DoNotImplementAnyInterfaces(params Type[] interfaces); - TReturnType DoNotImplementAnyInterfaces(IEnumerable interfaces); - TReturnType DoNotImplementAnyInterfaces(IEnumerable interfaces); - TReturnType DoNotImplementAnyInterfaces(IObjectProvider interfaces); + TNextElement DoNotImplementAnyInterfaces(); + TNextElement DoNotImplementAnyInterfaces(params Interface[] interfaces); + TNextElement DoNotImplementAnyInterfaces(params Type[] interfaces); + TNextElement DoNotImplementAnyInterfaces(IEnumerable interfaces); + TNextElement DoNotImplementAnyInterfaces(IEnumerable interfaces); + TNextElement DoNotImplementAnyInterfaces(IObjectProvider interfaces); - TReturnType DoNotResideInNamespace(string fullName); + TNextElement DoNotResideInNamespace(string fullName); - TReturnType DoNotResideInAssembly(string fullName); - TReturnType DoNotResideInAssemblyMatching(string pattern); - TReturnType DoNotResideInAssembly(Assembly assembly, params Assembly[] moreAssemblies); - TReturnType DoNotResideInAssembly( + TNextElement DoNotResideInAssembly(string fullName); + TNextElement DoNotResideInAssemblyMatching(string pattern); + TNextElement DoNotResideInAssembly(Assembly assembly, params Assembly[] moreAssemblies); + TNextElement DoNotResideInAssembly( Domain.Assembly assembly, params Domain.Assembly[] moreAssemblies ); - TReturnType DoNotHavePropertyMemberWithName(string name); - TReturnType DoNotHaveFieldMemberWithName(string name); - TReturnType DoNotHaveMethodMemberWithName(string name); - TReturnType DoNotHaveMemberWithName(string name); - TReturnType AreNotNested(); + TNextElement DoNotHavePropertyMemberWithName(string name); + TNextElement DoNotHaveFieldMemberWithName(string name); + TNextElement DoNotHaveMethodMemberWithName(string name); + TNextElement DoNotHaveMemberWithName(string name); + TNextElement AreNotNested(); } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IAddInterfaceCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IAddInterfaceCondition.cs index 1000e53a4..10bae0a4c 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IAddInterfaceCondition.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IAddInterfaceCondition.cs @@ -2,7 +2,7 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Interfaces { - public interface IAddInterfaceCondition - : IAddTypeCondition + public interface IAddInterfaceCondition + : IAddTypeCondition where TRuleType : ICanBeAnalyzed { } } diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IAddInterfacePredicate.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IAddInterfacePredicate.cs index 447258ef8..f223c7b36 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IAddInterfacePredicate.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IAddInterfacePredicate.cs @@ -2,7 +2,7 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Interfaces { - public interface IAddInterfacePredicate - : IAddTypePredicate + public interface IAddInterfacePredicate + : IAddTypePredicate where TRuleType : ICanBeAnalyzed { } }