diff --git a/ArchUnitNET/Fluent/Syntax/Elements/AddObjectCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/AddObjectCondition.cs new file mode 100644 index 000000000..eb16eb0ba --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/AddObjectCondition.cs @@ -0,0 +1,237 @@ +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 ArchUnitNET.Fluent.Syntax.Elements.Types.Interfaces; +using Attribute = ArchUnitNET.Domain.Attribute; + +namespace ArchUnitNET.Fluent.Syntax.Elements +{ + public abstract class AddObjectCondition + : SyntaxElement, + IAddObjectCondition + where TRuleType : ICanBeAnalyzed + { + internal AddObjectCondition(IArchRuleCreator ruleCreator) + : base(ruleCreator) { } + + public TNextElement Exist() + { + _ruleCreator.RequirePositiveResults = false; + return CreateNextElement(ObjectConditionsDefinition.Exist()); + } + + // csharpier-ignore-start + 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 ShouldRelateToAttributesThat HaveAnyAttributesThat() => BeginComplexAttributeCondition(ObjectConditionsDefinition.HaveAnyAttributesThat()); + public ShouldRelateToAttributesThat OnlyHaveAttributesThat() => BeginComplexAttributeCondition(ObjectConditionsDefinition.OnlyHaveAttributesThat()); + + // Negations + + public TNextElement NotExist() + { + _ruleCreator.RequirePositiveResults = false; + return CreateNextElement(ObjectConditionsDefinition.NotExist()); + } + + 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()); + // csharpier-ignore-end + + protected abstract TNextElement CreateNextElement(IOrderedCondition condition); + + protected ShouldRelateToTypesThat BeginComplexTypeCondition( + RelationCondition relationCondition + ) + { + _ruleCreator.BeginComplexCondition(ArchRuleDefinition.Types(true), relationCondition); + return new ShouldRelateToTypesThat(_ruleCreator); + } + + protected ShouldRelateToAttributesThat< + TNextElement, + TRuleType + > BeginComplexAttributeCondition(RelationCondition relationCondition) + { + _ruleCreator.BeginComplexCondition( + ArchRuleDefinition.Attributes(true), + relationCondition + ); + return new ShouldRelateToAttributesThat(_ruleCreator); + } + + protected ShouldRelateToInterfacesThat< + TNextElement, + TRuleType + > BeginComplexInterfaceCondition(RelationCondition relationCondition) + { + _ruleCreator.BeginComplexCondition( + ArchRuleDefinition.Interfaces(true), + relationCondition + ); + return new ShouldRelateToInterfacesThat(_ruleCreator); + } + + protected ShouldRelateToMethodMembersThat< + TNextElement, + TRuleType + > BeginComplexMethodMemberCondition( + RelationCondition relationCondition + ) + { + _ruleCreator.BeginComplexCondition( + ArchRuleDefinition.MethodMembers(), + relationCondition + ); + return new ShouldRelateToMethodMembersThat(_ruleCreator); + } + } +} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/AddObjectPredicate.cs b/ArchUnitNET/Fluent/Syntax/Elements/AddObjectPredicate.cs new file mode 100644 index 000000000..0598e4e9c --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/AddObjectPredicate.cs @@ -0,0 +1,164 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using ArchUnitNET.Domain; +using ArchUnitNET.Domain.Extensions; +using ArchUnitNET.Fluent.Predicates; +using Attribute = ArchUnitNET.Domain.Attribute; + +namespace ArchUnitNET.Fluent.Syntax.Elements +{ + public abstract class AddObjectPredicate + : SyntaxElement, + IAddObjectPredicate + where TRuleType : ICanBeAnalyzed + where TRelatedType : ICanBeAnalyzed + { + internal AddObjectPredicate(IArchRuleCreator archRuleCreator) + : base(archRuleCreator) { } + + // csharpier-ignore-start + 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 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 TNextElement CreateNextElement(IPredicate predicate); + } +} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/GivenObjectsThat.cs b/ArchUnitNET/Fluent/Syntax/Elements/GivenObjectsThat.cs deleted file mode 100644 index 2faa4f628..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/GivenObjectsThat.cs +++ /dev/null @@ -1,168 +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 abstract class GivenObjectsThat - : SyntaxElement, - IObjectPredicates - where TRuleType : ICanBeAnalyzed - { - protected GivenObjectsThat(IArchRuleCreator ruleCreator) - : base(ruleCreator) { } - - // csharpier-ignore-start - public TGivenRuleTypeConjunction FollowCustomPredicate(IPredicate predicate) => AddPredicate(predicate); - public TGivenRuleTypeConjunction FollowCustomPredicate(Func predicate, string description) => AddPredicate(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 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 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(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(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(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(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 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 HaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments) => AddPredicate(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, 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, 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()); - - // 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 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 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(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(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 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 DoNotHaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments) => AddPredicate(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, 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, 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()); - // csharpier-ignore-end - - private TGivenRuleTypeConjunction AddPredicate(IPredicate predicate) - { - _ruleCreator.AddPredicate(predicate); - return Create(_ruleCreator); - } - } -} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/IAddObjectCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/IAddObjectCondition.cs new file mode 100644 index 000000000..7ab419ed5 --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/IAddObjectCondition.cs @@ -0,0 +1,168 @@ +using System; +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 IAddObjectCondition + where TRuleType : ICanBeAnalyzed + { + // csharpier-ignore-start + + 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 + + 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 new file mode 100644 index 000000000..a904e218b --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/IAddObjectPredicate.cs @@ -0,0 +1,155 @@ +using System; +using System.Collections.Generic; +using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Predicates; +using Attribute = ArchUnitNET.Domain.Attribute; + +namespace ArchUnitNET.Fluent.Syntax.Elements +{ + public interface IAddObjectPredicate + where TRuleType : ICanBeAnalyzed + { + // csharpier-ignore-start + + 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 + + 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/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/IObjectConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/IObjectConditions.cs deleted file mode 100644 index a31b2f626..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/IObjectConditions.cs +++ /dev/null @@ -1,160 +0,0 @@ -using System; -using System.Collections.Generic; -using ArchUnitNET.Domain; -using ArchUnitNET.Fluent.Conditions; -using Attribute = ArchUnitNET.Domain.Attribute; - -namespace ArchUnitNET.Fluent.Syntax.Elements -{ - public interface IObjectConditions - 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); - - 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); - - TReturnType HaveAnyAttributes(); - TReturnType HaveAnyAttributes(params Attribute[] attributes); - TReturnType HaveAnyAttributes(params Type[] attributes); - TReturnType HaveAnyAttributes(IObjectProvider attributes); - TReturnType HaveAnyAttributes(IEnumerable attributes); - TReturnType HaveAnyAttributes(IEnumerable attributes); - - TReturnType OnlyHaveAttributes(); - TReturnType OnlyHaveAttributes(params Attribute[] attributes); - TReturnType OnlyHaveAttributes(params Type[] attributes); - TReturnType OnlyHaveAttributes(IObjectProvider attributes); - TReturnType OnlyHaveAttributes(IEnumerable attributes); - TReturnType OnlyHaveAttributes(IEnumerable 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 BePrivate(); - TReturnType BePublic(); - TReturnType BeProtected(); - TReturnType BeInternal(); - TReturnType BeProtectedInternal(); - TReturnType 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); - - TReturnType NotHaveAnyAttributes(); - TReturnType NotHaveAnyAttributes(params Attribute[] attributes); - TReturnType NotHaveAnyAttributes(params Type[] attributes); - TReturnType NotHaveAnyAttributes(IObjectProvider attributes); - TReturnType NotHaveAnyAttributes(IEnumerable attributes); - TReturnType NotHaveAnyAttributes(IEnumerable attributes); - - 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(); - - // csharpier-ignore-end - } -} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/IObjectPredicates.cs b/ArchUnitNET/Fluent/Syntax/Elements/IObjectPredicates.cs deleted file mode 100644 index 9378c26b2..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/IObjectPredicates.cs +++ /dev/null @@ -1,155 +0,0 @@ -using System; -using System.Collections.Generic; -using ArchUnitNET.Domain; -using ArchUnitNET.Fluent.Predicates; -using Attribute = ArchUnitNET.Domain.Attribute; - -namespace ArchUnitNET.Fluent.Syntax.Elements -{ - public interface IObjectPredicates - 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(); - - //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(); - - // 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..a3f30e00a 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..7820b5a2d 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/IAddMemberCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/IAddMemberCondition.cs new file mode 100644 index 000000000..bb8d18fd0 --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/IAddMemberCondition.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using ArchUnitNET.Domain; +using ArchUnitNET.Fluent.Syntax.Elements.Types; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Members +{ + public interface IAddMemberCondition + : IAddObjectCondition + where TRuleType : ICanBeAnalyzed + { + 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(); + + TNextElement BeStatic(); + TNextElement BeImmutable(); + + //Negations + 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(); + + TNextElement NotBeStatic(); + TNextElement NotBeImmutable(); + } +} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/IAddMemberPredicate.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/IAddMemberPredicate.cs new file mode 100644 index 000000000..b7a9f4efd --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/IAddMemberPredicate.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using ArchUnitNET.Domain; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Members +{ + public interface IAddMemberPredicate + : IAddObjectPredicate + where TRuleType : ICanBeAnalyzed + { + 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 + + 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/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/IMemberConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/IMemberConditions.cs deleted file mode 100644 index 370ec5df2..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/IMemberConditions.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using ArchUnitNET.Domain; - -namespace ArchUnitNET.Fluent.Syntax.Elements.Members -{ - public interface IMemberConditions - : IObjectConditions - 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); - TReturnType BeStatic(); - TReturnType 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); - TReturnType NotBeStatic(); - TReturnType NotBeImmutable(); - } -} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/IMemberPredicates.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/IMemberPredicates.cs deleted file mode 100644 index c98f5bb7d..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/IMemberPredicates.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using ArchUnitNET.Domain; - -namespace ArchUnitNET.Fluent.Syntax.Elements.Members -{ - public interface IMemberPredicates - : IObjectPredicates - 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(); - - //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(); - } -} 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/IAddMethodMemberCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IAddMethodMemberCondition.cs new file mode 100644 index 000000000..cc559b773 --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IAddMethodMemberCondition.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using ArchUnitNET.Domain; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Members.MethodMembers +{ + public interface IAddMethodMemberCondition + : IAddMemberCondition + where TRuleType : ICanBeAnalyzed + { + 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 + + 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 new file mode 100644 index 000000000..4e81ced73 --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IAddMethodMemberPredicate.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using ArchUnitNET.Domain; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Members.MethodMembers +{ + public interface IAddMethodMemberPredicate + : IAddMemberPredicate + where TRuleType : ICanBeAnalyzed + { + 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 + + 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/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/IMethodMemberConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IMethodMemberConditions.cs deleted file mode 100644 index c95b97342..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IMethodMemberConditions.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; -using System.Collections.Generic; -using ArchUnitNET.Domain; - -namespace ArchUnitNET.Fluent.Syntax.Elements.Members.MethodMembers -{ - public interface IMethodMemberConditions - : IMemberConditions - 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); - - //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); - } -} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IMethodMemberPredicates.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IMethodMemberPredicates.cs deleted file mode 100644 index 434fb7542..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/IMethodMemberPredicates.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using System.Collections.Generic; -using ArchUnitNET.Domain; - -namespace ArchUnitNET.Fluent.Syntax.Elements.Members.MethodMembers -{ - public interface IMethodMemberPredicates - : IMemberPredicates - 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); - - //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); - } -} 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/IAddPropertyMemberCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IAddPropertyMemberCondition.cs new file mode 100644 index 000000000..f6e89929b --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IAddPropertyMemberCondition.cs @@ -0,0 +1,45 @@ +using ArchUnitNET.Domain; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Members.PropertyMembers +{ + public interface IAddPropertyMemberCondition + : IAddMemberCondition + where TRuleType : ICanBeAnalyzed + { + 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 + + 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 new file mode 100644 index 000000000..fb6e76ff6 --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IAddPropertyMemberPredicate.cs @@ -0,0 +1,45 @@ +using ArchUnitNET.Domain; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Members.PropertyMembers +{ + public interface IAddPropertyMemberPredicate + : IAddMemberPredicate + where TRuleType : ICanBeAnalyzed + { + 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 + + 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/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/IPropertyMemberConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IPropertyMemberConditions.cs deleted file mode 100644 index 66e05f29d..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IPropertyMemberConditions.cs +++ /dev/null @@ -1,45 +0,0 @@ -using ArchUnitNET.Domain; - -namespace ArchUnitNET.Fluent.Syntax.Elements.Members.PropertyMembers -{ - public interface IPropertyMemberConditions - : IMemberConditions - 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(); - - //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(); - } -} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IPropertyMemberPredicates.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IPropertyMemberPredicates.cs deleted file mode 100644 index 067facc4d..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/IPropertyMemberPredicates.cs +++ /dev/null @@ -1,45 +0,0 @@ -using ArchUnitNET.Domain; - -namespace ArchUnitNET.Fluent.Syntax.Elements.Members.PropertyMembers -{ - public interface IPropertyMemberPredicates - : IMemberPredicates - 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(); - - //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(); - } -} 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/ObjectsShould.cs b/ArchUnitNET/Fluent/Syntax/Elements/ObjectsShould.cs deleted file mode 100644 index 036fa7642..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/ObjectsShould.cs +++ /dev/null @@ -1,221 +0,0 @@ -using System; -using System.Collections.Generic; -using ArchUnitNET.Domain; -using ArchUnitNET.Domain.Extensions; -using ArchUnitNET.Fluent.Conditions; -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 Attribute = ArchUnitNET.Domain.Attribute; - -namespace ArchUnitNET.Fluent.Syntax.Elements -{ - public abstract class ObjectsShould - : SyntaxElement, - IComplexObjectConditions - where TRuleType : ICanBeAnalyzed - where TRuleTypeShouldConjunction : SyntaxElement - { - protected ObjectsShould(IArchRuleCreator ruleCreator) - : base(ruleCreator) { } - - public TRuleTypeShouldConjunction Exist() - { - _ruleCreator.RequirePositiveResults = false; - _ruleCreator.AddCondition(ObjectConditionsDefinition.Exist()); - return Create(_ruleCreator); - } - - // 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 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 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(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 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(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(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(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 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 HaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments) => AddCondition(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, 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, 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()); - - // Relation Conditions - - public ShouldRelateToTypesThat DependOnAnyTypesThat() => BeginComplexTypeCondition(ObjectConditionsDefinition.DependOnAnyTypesThat()); - public ShouldRelateToTypesThat OnlyDependOnTypesThat() => BeginComplexTypeCondition(ObjectConditionsDefinition.OnlyDependOnTypesThat()); - - public ShouldRelateToAttributesThat HaveAnyAttributesThat() => BeginComplexAttributeCondition(ObjectConditionsDefinition.HaveAnyAttributesThat()); - public ShouldRelateToAttributesThat OnlyHaveAttributesThat() => BeginComplexAttributeCondition(ObjectConditionsDefinition.OnlyHaveAttributesThat()); - - // Negations - - public TRuleTypeShouldConjunction NotExist() - { - _ruleCreator.RequirePositiveResults = false; - _ruleCreator.AddCondition(ObjectConditionsDefinition.NotExist()); - return Create(_ruleCreator); - } - - 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 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 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(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(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 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 NotHaveAnyAttributesWithNamedArguments(IEnumerable<(string, object)> attributeArguments) => AddCondition(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, 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, 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()); - - // Relation Condition Negations - - public ShouldRelateToTypesThat NotDependOnAnyTypesThat() => BeginComplexTypeCondition(ObjectConditionsDefinition.NotDependOnAnyTypesThat()); - public ShouldRelateToAttributesThat NotHaveAnyAttributesThat() => BeginComplexAttributeCondition(ObjectConditionsDefinition.NotHaveAnyAttributesThat()); - // csharpier-ignore-end - - private TRuleTypeShouldConjunction AddCondition(IOrderedCondition condition) - { - _ruleCreator.AddCondition(condition); - return Create(_ruleCreator); - } - - private ShouldRelateToTypesThat< - TRuleTypeShouldConjunction, - IType, - TRuleType - > BeginComplexTypeCondition(RelationCondition relationCondition) - { - _ruleCreator.BeginComplexCondition(ArchRuleDefinition.Types(true), relationCondition); - return new ShouldRelateToTypesThat( - _ruleCreator - ); - } - - private ShouldRelateToAttributesThat< - TRuleTypeShouldConjunction, - TRuleType - > BeginComplexAttributeCondition(RelationCondition relationCondition) - { - _ruleCreator.BeginComplexCondition(Attributes(true), relationCondition); - return new ShouldRelateToAttributesThat( - _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/IAddAttributeCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAddAttributeCondition.cs new file mode 100644 index 000000000..fb059a249 --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAddAttributeCondition.cs @@ -0,0 +1,17 @@ +using ArchUnitNET.Domain; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Attributes +{ + public interface IAddAttributeCondition + : IAddTypeCondition + where TRuleType : ICanBeAnalyzed + { + TNextElement BeAbstract(); + TNextElement BeSealed(); + + //Negations + + TNextElement NotBeAbstract(); + TNextElement NotBeSealed(); + } +} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAddAttributePredicate.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAddAttributePredicate.cs new file mode 100644 index 000000000..3ca07c1c1 --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAddAttributePredicate.cs @@ -0,0 +1,17 @@ +using ArchUnitNET.Domain; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Attributes +{ + public interface IAddAttributePredicate + : IAddTypePredicate + where TRuleType : ICanBeAnalyzed + { + TNextElement AreAbstract(); + TNextElement AreSealed(); + + //Negations + + TNextElement AreNotAbstract(); + TNextElement AreNotSealed(); + } +} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAttributeConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAttributeConditions.cs deleted file mode 100644 index fe940f415..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAttributeConditions.cs +++ /dev/null @@ -1,17 +0,0 @@ -using ArchUnitNET.Domain; - -namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Attributes -{ - public interface IAttributeConditions - : ITypeConditions - where TRuleType : ICanBeAnalyzed - { - TReturnType BeAbstract(); - TReturnType BeSealed(); - - //Negations - - TReturnType NotBeAbstract(); - TReturnType NotBeSealed(); - } -} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAttributePredicates.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAttributePredicates.cs deleted file mode 100644 index e2b4cec0a..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/IAttributePredicates.cs +++ /dev/null @@ -1,17 +0,0 @@ -using ArchUnitNET.Domain; - -namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Attributes -{ - public interface IAttributePredicates - : ITypePredicates - where TRuleType : ICanBeAnalyzed - { - TReturnType AreAbstract(); - TReturnType AreSealed(); - - //Negations - - TReturnType AreNotAbstract(); - TReturnType AreNotSealed(); - } -} 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/IAddClassCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IAddClassCondition.cs new file mode 100644 index 000000000..337fa7193 --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IAddClassCondition.cs @@ -0,0 +1,19 @@ +using ArchUnitNET.Domain; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Classes +{ + public interface IAddClassCondition + : IAddTypeCondition + where TRuleType : ICanBeAnalyzed + { + TNextElement BeAbstract(); + TNextElement BeSealed(); + TNextElement BeImmutable(); + + //Negations + + 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 new file mode 100644 index 000000000..957be5c3b --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IAddClassPredicate.cs @@ -0,0 +1,19 @@ +using ArchUnitNET.Domain; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Classes +{ + public interface IAddClassPredicate + : IAddTypePredicate + where TRuleType : ICanBeAnalyzed + { + TNextElement AreAbstract(); + TNextElement AreSealed(); + TNextElement AreImmutable(); + + //Negations + + TNextElement AreNotAbstract(); + TNextElement AreNotSealed(); + TNextElement AreNotImmutable(); + } +} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IClassConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IClassConditions.cs deleted file mode 100644 index 1f43dd703..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IClassConditions.cs +++ /dev/null @@ -1,19 +0,0 @@ -using ArchUnitNET.Domain; - -namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Classes -{ - public interface IClassConditions - : ITypeConditions - where TRuleType : ICanBeAnalyzed - { - TReturnType BeAbstract(); - TReturnType BeSealed(); - TReturnType BeImmutable(); - - //Negations - - TReturnType NotBeAbstract(); - TReturnType NotBeSealed(); - TReturnType NotBeImmutable(); - } -} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IClassPredicates.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IClassPredicates.cs deleted file mode 100644 index 7249af1f8..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/IClassPredicates.cs +++ /dev/null @@ -1,19 +0,0 @@ -using ArchUnitNET.Domain; - -namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Classes -{ - public interface IClassPredicates - : ITypePredicates - where TRuleType : ICanBeAnalyzed - { - TReturnType AreAbstract(); - TReturnType AreSealed(); - TReturnType AreImmutable(); - - //Negations - - TReturnType AreNotAbstract(); - TReturnType AreNotSealed(); - TReturnType AreNotImmutable(); - } -} 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/IAddTypeCondition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/IAddTypeCondition.cs new file mode 100644 index 000000000..c4a26a6e5 --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/IAddTypeCondition.cs @@ -0,0 +1,100 @@ +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 IAddTypeCondition + : IAddObjectCondition + where TRuleType : ICanBeAnalyzed + { + 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 + ); + + TNextElement HavePropertyMemberWithName(string name); + TNextElement HaveFieldMemberWithName(string name); + TNextElement HaveMethodMemberWithName(string name); + TNextElement HaveMemberWithName(string name); + + TNextElement BeNested(); + + //Negations + + 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 + ); + + TNextElement NotHavePropertyMemberWithName(string name); + TNextElement NotHaveFieldMemberWithName(string name); + TNextElement NotHaveMethodMemberWithName(string name); + TNextElement NotHaveMemberWithName(string name); + + TNextElement NotBeNested(); + } +} diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/IAddTypePredicate.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/IAddTypePredicate.cs new file mode 100644 index 000000000..c7c56703e --- /dev/null +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/IAddTypePredicate.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections.Generic; +using ArchUnitNET.Domain; +using Assembly = System.Reflection.Assembly; + +namespace ArchUnitNET.Fluent.Syntax.Elements.Types +{ + public interface IAddTypePredicate + : IAddObjectPredicate + where TRuleType : ICanBeAnalyzed + { + TNextElement Are(Type firstType, params Type[] moreTypes); + TNextElement Are(IEnumerable types); + + 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(); + + 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); + + 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 + ); + TNextElement HavePropertyMemberWithName(string name); + TNextElement HaveFieldMemberWithName(string name); + TNextElement HaveMethodMemberWithName(string name); + TNextElement HaveMemberWithName(string name); + TNextElement AreNested(); + + //Negations + + TNextElement AreNot(Type firstType, params Type[] moreTypes); + TNextElement AreNot(IEnumerable types); + + 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(); + + TNextElement DoNotImplementInterface(Interface intf); + TNextElement DoNotImplementInterface(Type intf); + + TNextElement DoNotImplementAnyInterfaces(); + TNextElement DoNotImplementAnyInterfaces(params Interface[] interfaces); + TNextElement DoNotImplementAnyInterfaces(params Type[] interfaces); + TNextElement DoNotImplementAnyInterfaces(IEnumerable interfaces); + TNextElement DoNotImplementAnyInterfaces(IEnumerable interfaces); + TNextElement DoNotImplementAnyInterfaces(IObjectProvider interfaces); + + TNextElement DoNotResideInNamespace(string fullName); + + TNextElement DoNotResideInAssembly(string fullName); + TNextElement DoNotResideInAssemblyMatching(string pattern); + TNextElement DoNotResideInAssembly(Assembly assembly, params Assembly[] moreAssemblies); + TNextElement DoNotResideInAssembly( + Domain.Assembly assembly, + params Domain.Assembly[] moreAssemblies + ); + 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/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/ITypeConditions.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/ITypeConditions.cs deleted file mode 100644 index ef631f0e3..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/ITypeConditions.cs +++ /dev/null @@ -1,89 +0,0 @@ -using System; -using System.Collections.Generic; -using ArchUnitNET.Domain; -using Assembly = System.Reflection.Assembly; - -namespace ArchUnitNET.Fluent.Syntax.Elements.Types -{ - public interface ITypeConditions - : IObjectConditions - 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); - 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); - - 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( - 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 - - 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); - 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); - - TReturnType NotResideInNamespace(string fullName); - TReturnType NotResideInNamespaceMatching(string pattern); - - TReturnType NotResideInAssemblyMatching(string pattern); - TReturnType NotResideInAssembly(Assembly assembly, params Assembly[] moreAssemblies); - 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/ITypePredicates.cs deleted file mode 100644 index 03449a678..000000000 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/ITypePredicates.cs +++ /dev/null @@ -1,89 +0,0 @@ -using System; -using System.Collections.Generic; -using ArchUnitNET.Domain; -using Assembly = System.Reflection.Assembly; - -namespace ArchUnitNET.Fluent.Syntax.Elements.Types -{ - public interface ITypePredicates - : IObjectPredicates - where TRuleType : ICanBeAnalyzed - { - TReturnType Are(Type firstType, params Type[] moreTypes); - TReturnType 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(); - - 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); - - 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( - 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(); - - //Negations - - TReturnType AreNot(Type firstType, params Type[] moreTypes); - TReturnType 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(); - - TReturnType DoNotImplementInterface(Interface intf); - TReturnType 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); - - TReturnType DoNotResideInNamespace(string fullName); - - TReturnType DoNotResideInAssembly(string fullName); - TReturnType DoNotResideInAssemblyMatching(string pattern); - TReturnType DoNotResideInAssembly(Assembly assembly, params Assembly[] moreAssemblies); - TReturnType 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(); - } -} 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 53% rename from ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IInterfacePredicates.cs rename to ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IAddInterfaceCondition.cs index 5975ed995..10bae0a4c 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 52% rename from ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IInterfaceConditions.cs rename to ArchUnitNET/Fluent/Syntax/Elements/Types/Interfaces/IAddInterfacePredicate.cs index d095a1ad0..f223c7b36 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) { }