diff --git a/ArchUnitNET/Fluent/ArchRuleCreator.cs b/ArchUnitNET/Fluent/ArchRuleCreator.cs index c3d0d733f..68eae4f84 100644 --- a/ArchUnitNET/Fluent/ArchRuleCreator.cs +++ b/ArchUnitNET/Fluent/ArchRuleCreator.cs @@ -43,7 +43,7 @@ public void AddPredicateConjunction(LogicalConjunction logicalConjunction) _predicateManager.SetNextLogicalConjunction(logicalConjunction); } - public void AddCondition(ICondition condition) + public void AddCondition(IOrderedCondition condition) { _conditionManager.AddCondition(condition); } diff --git a/ArchUnitNET/Fluent/CombinedArchRuleCreator.cs b/ArchUnitNET/Fluent/CombinedArchRuleCreator.cs index ac9847b49..7dfedc516 100644 --- a/ArchUnitNET/Fluent/CombinedArchRuleCreator.cs +++ b/ArchUnitNET/Fluent/CombinedArchRuleCreator.cs @@ -59,7 +59,7 @@ public void AddPredicateConjunction(LogicalConjunction logicalConjunction) _currentArchRuleCreator.AddPredicateConjunction(logicalConjunction); } - public void AddCondition(ICondition condition) + public void AddCondition(IOrderedCondition condition) { _currentArchRuleCreator.AddCondition(condition); } diff --git a/ArchUnitNET/Fluent/ConditionManager.cs b/ArchUnitNET/Fluent/ConditionManager.cs index fa8b70996..4acf30bbe 100644 --- a/ArchUnitNET/Fluent/ConditionManager.cs +++ b/ArchUnitNET/Fluent/ConditionManager.cs @@ -66,7 +66,7 @@ public void ContinueComplexCondition(IPredicate filt } } - public void AddCondition(ICondition condition) + public void AddCondition(IOrderedCondition condition) { _conditionElements.Last().SetCondition(condition); } @@ -119,58 +119,19 @@ ICanBeEvaluated archRuleCreator }; } - if (_conditionElements.All(e => e.IsOrdered())) - { - var conditionResults = _conditionElements - .Select(conditionElement => - conditionElement.Check(filteredObjectsList, architecture).ToList() - ) - .ToList(); - return filteredObjectsList.Select( - (t, i) => - CreateEvaluationResult( - conditionResults.Select(results => results[i]), - architecture, - archRuleCreator - ) - ); - } - - //rough heuristic - if we have small number of comparisons, we are fine with sequential search - //but in large cases its quadratic behavior becomes too slow and building of a dictionary is justified - if (filteredObjectsList.Count * _conditionElements.Count > 256) - { - var conditionResults = _conditionElements - .Select(conditionElement => - conditionElement - .Check(filteredObjectsList, architecture) - .ToDictionary(x => x.ConditionResult.AnalyzedObject) - ) - .ToList(); - - return filteredObjectsList.Select(t => - CreateEvaluationResult( - FindResultsForObject(conditionResults, t), - architecture, - archRuleCreator - ) - ); - } - else - { - var conditionResults = _conditionElements - .Select(conditionElement => - conditionElement.Check(filteredObjectsList, architecture).ToList() - ) - .ToList(); - return filteredObjectsList.Select(t => + var conditionResults = _conditionElements + .Select(conditionElement => + conditionElement.Check(filteredObjectsList, architecture).ToList() + ) + .ToList(); + return filteredObjectsList.Select( + (t, i) => CreateEvaluationResult( - FindResultsForObject(conditionResults, t), + conditionResults.Select(results => results[i]), architecture, archRuleCreator ) - ); - } + ); } private IEnumerable FindResultsForObject( @@ -291,7 +252,7 @@ private class ConditionElement : IHasDescription where T : ICanBeAnalyzed { private readonly LogicalConjunction _logicalConjunction; - private ICondition _condition; + private IOrderedCondition _condition; [CanBeNull] private string _customDescription; @@ -338,7 +299,7 @@ public void AddReason(string reason) _reason = "because " + reason; } - public void SetCondition(ICondition condition) + public void SetCondition(IOrderedCondition condition) { _condition = condition; } @@ -365,11 +326,6 @@ Architecture architecture .Select(result => new ConditionElementResult(result, _logicalConjunction)); } - public bool IsOrdered() - { - return _condition is IOrderedCondition; - } - public bool CheckEmpty(bool currentResult) { if (_condition == null) diff --git a/ArchUnitNET/Fluent/Conditions/ComplexCondition.cs b/ArchUnitNET/Fluent/Conditions/ComplexCondition.cs index aba631d55..b070c1bc4 100644 --- a/ArchUnitNET/Fluent/Conditions/ComplexCondition.cs +++ b/ArchUnitNET/Fluent/Conditions/ComplexCondition.cs @@ -4,7 +4,7 @@ namespace ArchUnitNET.Fluent.Conditions { - public class ComplexCondition : ICondition + public class ComplexCondition : IOrderedCondition where TRuleType : ICanBeAnalyzed where TRelatedType : ICanBeAnalyzed { diff --git a/ArchUnitNET/Fluent/Conditions/ConditionExtensions.cs b/ArchUnitNET/Fluent/Conditions/ConditionExtensions.cs new file mode 100644 index 000000000..4c3f28274 --- /dev/null +++ b/ArchUnitNET/Fluent/Conditions/ConditionExtensions.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using ArchUnitNET.Domain; + +namespace ArchUnitNET.Fluent.Conditions +{ + public static class ConditionExtensions + { + private sealed class OrderedConditionWrapper : IOrderedCondition + where TRuleType : ICanBeAnalyzed + { + private readonly ICondition _condition; + + public OrderedConditionWrapper(ICondition condition) + { + _condition = condition; + } + + public string Description => _condition.Description; + + public IEnumerable Check( + IEnumerable objects, + Architecture architecture + ) + { + var objectCollection = objects as ICollection ?? objects.ToList(); + var results = Check(architecture, objectCollection, _condition); + return objectCollection.Select(ruleType => results(ruleType)); + } + + public bool CheckEmpty() => _condition.CheckEmpty(); + + private static Func Check( + Architecture architecture, + ICollection objects, + ICondition condition + ) + { + var conditionResults = condition.Check(objects, architecture); + if (objects.Count > 256) + { + var resultDictionary = conditionResults.ToDictionary(result => + result.AnalyzedObject + ); + return obj => resultDictionary[obj]; + } + var resultList = conditionResults.ToList(); + return obj => resultList.First(result => result.AnalyzedObject.Equals(obj)); + } + } + + /// + /// Wraps an ICondition as an IOrderedCondition if it is not already one, ensuring that the order of results + /// corresponds to the order of input objects. + /// + /// Condition to be wrapped. + /// Type of objects the condition applies to. + /// An IOrderedCondition that maintains the order of input objects. + public static IOrderedCondition AsOrderedCondition( + this ICondition condition + ) + where TRuleType : ICanBeAnalyzed + { + if (condition is IOrderedCondition orderedCondition) + { + return orderedCondition; + } + return new OrderedConditionWrapper(condition); + } + } +} diff --git a/ArchUnitNET/Fluent/Conditions/ICondition.cs b/ArchUnitNET/Fluent/Conditions/ICondition.cs index fc568729e..78cbdab4d 100644 --- a/ArchUnitNET/Fluent/Conditions/ICondition.cs +++ b/ArchUnitNET/Fluent/Conditions/ICondition.cs @@ -3,13 +3,24 @@ namespace ArchUnitNET.Fluent.Conditions { + /// + /// A condition that can be checked against objects of type TRuleType. + /// + /// Type of objects the condition can be checked against. public interface ICondition : IHasDescription where TRuleType : ICanBeAnalyzed { + /// + /// Checks the condition against the provided objects within the given architecture. + /// + /// Objects to check the condition against. + /// The architecture context for the check. + /// A collection of ConditionResults indicating the outcome for each object. IEnumerable Check( IEnumerable objects, Architecture architecture ); + bool CheckEmpty(); } } diff --git a/ArchUnitNET/Fluent/Conditions/IOrderedCondition.cs b/ArchUnitNET/Fluent/Conditions/IOrderedCondition.cs index f2e6b17b0..62d9640fd 100644 --- a/ArchUnitNET/Fluent/Conditions/IOrderedCondition.cs +++ b/ArchUnitNET/Fluent/Conditions/IOrderedCondition.cs @@ -2,6 +2,11 @@ namespace ArchUnitNET.Fluent.Conditions { + /// + /// An IOrderedCondition is a Condition that has the semantic requirement that the order of the results + /// corresponds to the order of the input objects. + /// + /// Type of objects the condition can be checked against. public interface IOrderedCondition : ICondition where TRuleType : ICanBeAnalyzed { } } diff --git a/ArchUnitNET/Fluent/Conditions/RelationCondition.cs b/ArchUnitNET/Fluent/Conditions/RelationCondition.cs index afce69393..29ef4ef63 100644 --- a/ArchUnitNET/Fluent/Conditions/RelationCondition.cs +++ b/ArchUnitNET/Fluent/Conditions/RelationCondition.cs @@ -9,10 +9,13 @@ public class RelationCondition : IHasDescription where TRuleType : ICanBeAnalyzed where TRelatedType : ICanBeAnalyzed { - private readonly Func, ICondition> _relation; + private readonly Func< + IObjectProvider, + IOrderedCondition + > _relation; public RelationCondition( - Func, ICondition> relation, + Func, IOrderedCondition> relation, string description, string failDescription ) @@ -26,7 +29,7 @@ string failDescription public string Description { get; } - public ICondition GetCondition(IEnumerable objects) + public IOrderedCondition GetCondition(IEnumerable objects) { return _relation(new ObjectProvider(objects.ToList())); } diff --git a/ArchUnitNET/Fluent/IArchRuleCreator.cs b/ArchUnitNET/Fluent/IArchRuleCreator.cs index 24d03757e..e0109b139 100644 --- a/ArchUnitNET/Fluent/IArchRuleCreator.cs +++ b/ArchUnitNET/Fluent/IArchRuleCreator.cs @@ -10,7 +10,7 @@ public interface IArchRuleCreator : ICanBeEvaluated { void AddPredicate(IPredicate predicate); void AddPredicateConjunction(LogicalConjunction logicalConjunction); - void AddCondition(ICondition condition); + void AddCondition(IOrderedCondition condition); void AddConditionConjunction(LogicalConjunction logicalConjunction); void AddConditionReason(string reason); void AddPredicateReason(string reason); diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/MemberConditionsDefinition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/MemberConditionsDefinition.cs index c27397554..5e6037aa2 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/MemberConditionsDefinition.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/MemberConditionsDefinition.cs @@ -11,21 +11,29 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Members public static class MemberConditionsDefinition where TRuleType : IMember { - public static ICondition BeDeclaredIn(IType firstType, params IType[] moreTypes) + public static IOrderedCondition BeDeclaredIn( + IType firstType, + params IType[] moreTypes + ) { var types = new List { firstType }; types.AddRange(moreTypes); return BeDeclaredIn(types); } - public static ICondition BeDeclaredIn(Type firstType, params Type[] moreTypes) + public static IOrderedCondition BeDeclaredIn( + Type firstType, + params Type[] moreTypes + ) { var types = new List { firstType }; types.AddRange(moreTypes); return BeDeclaredIn(types); } - public static ICondition BeDeclaredIn(IObjectProvider objectProvider) + public static IOrderedCondition BeDeclaredIn( + IObjectProvider objectProvider + ) { IEnumerable Condition( IEnumerable methods, @@ -50,10 +58,13 @@ Architecture architecture } var description = "be declared in " + objectProvider.Description; - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition BeDeclaredIn(IEnumerable types) + public static IOrderedCondition BeDeclaredIn(IEnumerable types) { var typeList = types.ToList(); @@ -92,10 +103,10 @@ IEnumerable Condition(IEnumerable methods) ); } - return new EnumerableCondition(Condition, description); + return new EnumerableCondition(Condition, description).AsOrderedCondition(); } - public static ICondition BeDeclaredIn(IEnumerable types) + public static IOrderedCondition BeDeclaredIn(IEnumerable types) { var typeList = types.ToList(); @@ -151,10 +162,13 @@ Architecture architecture ); } - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition BeStatic() + public static IOrderedCondition BeStatic() { return new SimpleCondition( member => !member.IsStatic.HasValue || member.IsStatic.Value, @@ -163,7 +177,7 @@ public static ICondition BeStatic() ); } - public static ICondition BeReadOnly() + public static IOrderedCondition BeReadOnly() { return new SimpleCondition( member => member.Writability == Writability.ReadOnly, @@ -172,7 +186,7 @@ public static ICondition BeReadOnly() ); } - public static ICondition BeImmutable() + public static IOrderedCondition BeImmutable() { return new SimpleCondition( member => member.Writability.IsImmutable(), @@ -194,7 +208,7 @@ public static RelationCondition BeDeclaredInTypesThat() //Negations - public static ICondition NotBeDeclaredIn( + public static IOrderedCondition NotBeDeclaredIn( IType firstType, params IType[] moreTypes ) @@ -204,14 +218,19 @@ params IType[] moreTypes return NotBeDeclaredIn(types); } - public static ICondition NotBeDeclaredIn(Type firstType, params Type[] moreTypes) + public static IOrderedCondition NotBeDeclaredIn( + Type firstType, + params Type[] moreTypes + ) { var types = new List { firstType }; types.AddRange(moreTypes); return NotBeDeclaredIn(types); } - public static ICondition NotBeDeclaredIn(IObjectProvider objectProvider) + public static IOrderedCondition NotBeDeclaredIn( + IObjectProvider objectProvider + ) { IEnumerable Condition( IEnumerable methods, @@ -236,10 +255,13 @@ Architecture architecture } var description = "not be declared in " + objectProvider.Description; - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition NotBeDeclaredIn(IEnumerable types) + public static IOrderedCondition NotBeDeclaredIn(IEnumerable types) { var typeList = types.ToList(); @@ -278,10 +300,10 @@ IEnumerable Condition(IEnumerable methods) ); } - return new EnumerableCondition(Condition, description); + return new EnumerableCondition(Condition, description).AsOrderedCondition(); } - public static ICondition NotBeDeclaredIn(IEnumerable types) + public static IOrderedCondition NotBeDeclaredIn(IEnumerable types) { var typeList = types.ToList(); @@ -337,10 +359,13 @@ Architecture architecture ); } - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition NotBeStatic() + public static IOrderedCondition NotBeStatic() { return new SimpleCondition( member => !member.IsStatic.HasValue || !member.IsStatic.Value, @@ -349,7 +374,7 @@ public static ICondition NotBeStatic() ); } - public static ICondition NotBeReadOnly() + public static IOrderedCondition NotBeReadOnly() { return new SimpleCondition( member => member.Writability != Writability.ReadOnly, @@ -358,7 +383,7 @@ public static ICondition NotBeReadOnly() ); } - public static ICondition NotBeImmutable() + public static IOrderedCondition NotBeImmutable() { return new SimpleCondition( member => !member.Writability.IsImmutable(), diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/MethodMemberConditionsDefinition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/MethodMemberConditionsDefinition.cs index 096b92a7a..b2739b35c 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/MethodMemberConditionsDefinition.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/MethodMembers/MethodMemberConditionsDefinition.cs @@ -19,7 +19,7 @@ public static RelationCondition BeMethodMembersThat( ); } - public static ICondition BeConstructor() + public static IOrderedCondition BeConstructor() { return new SimpleCondition( member => member.IsConstructor(), @@ -28,7 +28,7 @@ public static ICondition BeConstructor() ); } - public static ICondition BeVirtual() + public static IOrderedCondition BeVirtual() { return new SimpleCondition( member => member.IsVirtual, @@ -37,21 +37,29 @@ public static ICondition BeVirtual() ); } - public static ICondition BeCalledBy(IType firstType, params IType[] moreTypes) + public static IOrderedCondition BeCalledBy( + IType firstType, + params IType[] moreTypes + ) { var types = new List { firstType }; types.AddRange(moreTypes); return BeCalledBy(types); } - public static ICondition BeCalledBy(Type firstType, params Type[] moreTypes) + public static IOrderedCondition BeCalledBy( + Type firstType, + params Type[] moreTypes + ) { var types = new List { firstType }; types.AddRange(moreTypes); return BeCalledBy(types); } - public static ICondition BeCalledBy(IObjectProvider objectProvider) + public static IOrderedCondition BeCalledBy( + IObjectProvider objectProvider + ) { IEnumerable Condition( IEnumerable methodMembers, @@ -76,10 +84,13 @@ Architecture architecture } var description = "be called by " + objectProvider.Description; - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition BeCalledBy(IEnumerable types) + public static IOrderedCondition BeCalledBy(IEnumerable types) { var typeList = types.ToList(); var firstType = typeList.First(); @@ -133,10 +144,13 @@ IEnumerable Condition(IEnumerable methodMembers) ); } - return new EnumerableCondition(Condition, description); + return new EnumerableCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition BeCalledBy(IEnumerable types) + public static IOrderedCondition BeCalledBy(IEnumerable types) { var typeList = types.ToList(); var firstType = typeList.First(); @@ -208,10 +222,13 @@ Architecture architecture ); } - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition HaveDependencyInMethodBodyTo( + public static IOrderedCondition HaveDependencyInMethodBodyTo( IType firstType, params IType[] moreTypes ) @@ -221,7 +238,7 @@ params IType[] moreTypes return HaveDependencyInMethodBodyTo(types); } - public static ICondition HaveDependencyInMethodBodyTo( + public static IOrderedCondition HaveDependencyInMethodBodyTo( Type firstType, params Type[] moreTypes ) @@ -231,7 +248,7 @@ params Type[] moreTypes return HaveDependencyInMethodBodyTo(types); } - public static ICondition HaveDependencyInMethodBodyTo( + public static IOrderedCondition HaveDependencyInMethodBodyTo( IObjectProvider objectProvider ) { @@ -265,10 +282,13 @@ Architecture architecture } var description = "have dependencies in method body to " + objectProvider.Description; - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition HaveDependencyInMethodBodyTo( + public static IOrderedCondition HaveDependencyInMethodBodyTo( IEnumerable types ) { @@ -333,10 +353,15 @@ IEnumerable Condition(IEnumerable methodMembers) ); } - return new EnumerableCondition(Condition, description); + return new EnumerableCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition HaveDependencyInMethodBodyTo(IEnumerable types) + public static IOrderedCondition HaveDependencyInMethodBodyTo( + IEnumerable types + ) { var typeList = types.ToList(); var firstType = typeList.First(); @@ -415,10 +440,13 @@ Architecture architecture ); } - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition HaveReturnType( + public static IOrderedCondition HaveReturnType( IType firstType, params IType[] moreTypes ) @@ -428,7 +456,7 @@ params IType[] moreTypes return HaveReturnType(types); } - public static ICondition HaveReturnType(IEnumerable types) + public static IOrderedCondition HaveReturnType(IEnumerable types) { var typeList = types.ToList(); var typeStringList = typeList.Select(type => type.FullName).ToList(); @@ -447,7 +475,7 @@ bool Condition(MethodMember member) ); } - public static ICondition HaveReturnType(IObjectProvider types) + public static IOrderedCondition HaveReturnType(IObjectProvider types) { IEnumerable Condition( IEnumerable methodMembers, @@ -477,10 +505,13 @@ Architecture architecture } var description = "have return type " + types.Description; - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition HaveReturnType( + public static IOrderedCondition HaveReturnType( Type firstType, params Type[] moreTypes ) @@ -490,7 +521,7 @@ params Type[] moreTypes return HaveReturnType(types); } - public static ICondition HaveReturnType(IEnumerable types) + public static IOrderedCondition HaveReturnType(IEnumerable types) { var typeList = types.ToList(); var typeStringList = typeList.Select(type => type.ToString()).ToList(); @@ -511,7 +542,7 @@ bool Condition(MethodMember member) //Negations - public static ICondition BeNoConstructor() + public static IOrderedCondition BeNoConstructor() { return new SimpleCondition( member => !member.IsConstructor(), @@ -520,7 +551,7 @@ public static ICondition BeNoConstructor() ); } - public static ICondition NotBeVirtual() + public static IOrderedCondition NotBeVirtual() { return new SimpleCondition( member => !member.IsVirtual, @@ -529,7 +560,7 @@ public static ICondition NotBeVirtual() ); } - public static ICondition NotBeCalledBy( + public static IOrderedCondition NotBeCalledBy( IType firstType, params IType[] moreTypes ) @@ -539,7 +570,7 @@ params IType[] moreTypes return NotBeCalledBy(types); } - public static ICondition NotBeCalledBy( + public static IOrderedCondition NotBeCalledBy( Type firstType, params Type[] moreTypes ) @@ -549,7 +580,9 @@ params Type[] moreTypes return NotBeCalledBy(types); } - public static ICondition NotBeCalledBy(IObjectProvider objectProvider) + public static IOrderedCondition NotBeCalledBy( + IObjectProvider objectProvider + ) { IEnumerable Condition( IEnumerable methodMembers, @@ -574,10 +607,13 @@ Architecture architecture } var description = "not be called by " + objectProvider.Description; - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition NotBeCalledBy(IEnumerable types) + public static IOrderedCondition NotBeCalledBy(IEnumerable types) { var typeList = types.ToList(); var firstType = typeList.First(); @@ -631,10 +667,13 @@ IEnumerable Condition(IEnumerable methodMembers) ); } - return new EnumerableCondition(Condition, description); + return new EnumerableCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition NotBeCalledBy(IEnumerable types) + public static IOrderedCondition NotBeCalledBy(IEnumerable types) { var typeList = types.ToList(); var firstType = typeList.First(); @@ -706,10 +745,13 @@ Architecture architecture ); } - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition NotHaveDependencyInMethodBodyTo( + public static IOrderedCondition NotHaveDependencyInMethodBodyTo( IType firstType, params IType[] moreTypes ) @@ -719,7 +761,7 @@ params IType[] moreTypes return NotHaveDependencyInMethodBodyTo(types); } - public static ICondition NotHaveDependencyInMethodBodyTo( + public static IOrderedCondition NotHaveDependencyInMethodBodyTo( Type firstType, params Type[] moreTypes ) @@ -729,7 +771,7 @@ params Type[] moreTypes return NotHaveDependencyInMethodBodyTo(types); } - public static ICondition NotHaveDependencyInMethodBodyTo( + public static IOrderedCondition NotHaveDependencyInMethodBodyTo( IObjectProvider objectProvider ) { @@ -764,10 +806,13 @@ Architecture architecture var description = "not have dependencies in method body to " + objectProvider.Description; - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition NotHaveDependencyInMethodBodyTo( + public static IOrderedCondition NotHaveDependencyInMethodBodyTo( IEnumerable types ) { @@ -833,10 +878,13 @@ IEnumerable Condition(IEnumerable methodMembers) ); } - return new EnumerableCondition(Condition, description); + return new EnumerableCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition NotHaveDependencyInMethodBodyTo( + public static IOrderedCondition NotHaveDependencyInMethodBodyTo( IEnumerable types ) { @@ -918,10 +966,13 @@ Architecture architecture ); } - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition NotHaveReturnType( + public static IOrderedCondition NotHaveReturnType( IType firstType, params IType[] moreTypes ) @@ -931,7 +982,7 @@ params IType[] moreTypes return NotHaveReturnType(types); } - public static ICondition NotHaveReturnType(IEnumerable types) + public static IOrderedCondition NotHaveReturnType(IEnumerable types) { var typeList = types.ToList(); var typeStringList = typeList.Select(type => type.FullName).ToList(); @@ -950,7 +1001,9 @@ bool Condition(MethodMember member) ); } - public static ICondition NotHaveReturnType(IObjectProvider types) + public static IOrderedCondition NotHaveReturnType( + IObjectProvider types + ) { IEnumerable Condition( IEnumerable methodMembers, @@ -980,10 +1033,13 @@ Architecture architecture } var description = "not have return type " + types.Description; - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition NotHaveReturnType( + public static IOrderedCondition NotHaveReturnType( Type firstType, params Type[] moreTypes ) @@ -993,7 +1049,7 @@ params Type[] moreTypes return NotHaveReturnType(types); } - public static ICondition NotHaveReturnType(IEnumerable types) + public static IOrderedCondition NotHaveReturnType(IEnumerable types) { var typeList = types.ToList(); var typeStringList = typeList.Select(type => type.ToString()).ToList(); diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/PropertyMemberConditionsDefinition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/PropertyMemberConditionsDefinition.cs index 23dbd6014..c56b78386 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/PropertyMemberConditionsDefinition.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Members/PropertyMembers/PropertyMemberConditionsDefinition.cs @@ -6,7 +6,7 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Members.PropertyMembers { public static class PropertyMemberConditionsDefinition { - public static ICondition HaveGetter() + public static IOrderedCondition HaveGetter() { return new SimpleCondition( member => member.GetterVisibility != NotAccessible, @@ -15,7 +15,7 @@ public static ICondition HaveGetter() ); } - public static ICondition HavePrivateGetter() + public static IOrderedCondition HavePrivateGetter() { return new SimpleCondition( member => member.GetterVisibility == Private, @@ -27,7 +27,7 @@ public static ICondition HavePrivateGetter() ); } - public static ICondition HavePublicGetter() + public static IOrderedCondition HavePublicGetter() { return new SimpleCondition( member => member.GetterVisibility == Public, @@ -39,7 +39,7 @@ public static ICondition HavePublicGetter() ); } - public static ICondition HaveProtectedGetter() + public static IOrderedCondition HaveProtectedGetter() { return new SimpleCondition( member => member.GetterVisibility == Protected, @@ -51,7 +51,7 @@ public static ICondition HaveProtectedGetter() ); } - public static ICondition HaveInternalGetter() + public static IOrderedCondition HaveInternalGetter() { return new SimpleCondition( member => member.GetterVisibility == Internal, @@ -63,7 +63,7 @@ public static ICondition HaveInternalGetter() ); } - public static ICondition HaveProtectedInternalGetter() + public static IOrderedCondition HaveProtectedInternalGetter() { return new SimpleCondition( member => member.GetterVisibility == ProtectedInternal, @@ -75,7 +75,7 @@ public static ICondition HaveProtectedInternalGetter() ); } - public static ICondition HavePrivateProtectedGetter() + public static IOrderedCondition HavePrivateProtectedGetter() { return new SimpleCondition( member => member.GetterVisibility == PrivateProtected, @@ -85,7 +85,7 @@ public static ICondition HavePrivateProtectedGetter() ); } - public static ICondition HaveSetter() + public static IOrderedCondition HaveSetter() { return new SimpleCondition( member => member.SetterVisibility != NotAccessible, @@ -94,7 +94,7 @@ public static ICondition HaveSetter() ); } - public static ICondition HavePrivateSetter() + public static IOrderedCondition HavePrivateSetter() { return new SimpleCondition( member => member.SetterVisibility == Private, @@ -106,7 +106,7 @@ public static ICondition HavePrivateSetter() ); } - public static ICondition HavePublicSetter() + public static IOrderedCondition HavePublicSetter() { return new SimpleCondition( member => member.SetterVisibility == Public, @@ -118,7 +118,7 @@ public static ICondition HavePublicSetter() ); } - public static ICondition HaveProtectedSetter() + public static IOrderedCondition HaveProtectedSetter() { return new SimpleCondition( member => member.SetterVisibility == Protected, @@ -130,7 +130,7 @@ public static ICondition HaveProtectedSetter() ); } - public static ICondition HaveInternalSetter() + public static IOrderedCondition HaveInternalSetter() { return new SimpleCondition( member => member.SetterVisibility == Internal, @@ -142,7 +142,7 @@ public static ICondition HaveInternalSetter() ); } - public static ICondition HaveProtectedInternalSetter() + public static IOrderedCondition HaveProtectedInternalSetter() { return new SimpleCondition( member => member.SetterVisibility == ProtectedInternal, @@ -154,7 +154,7 @@ public static ICondition HaveProtectedInternalSetter() ); } - public static ICondition HavePrivateProtectedSetter() + public static IOrderedCondition HavePrivateProtectedSetter() { return new SimpleCondition( member => member.SetterVisibility == PrivateProtected, @@ -164,7 +164,7 @@ public static ICondition HavePrivateProtectedSetter() ); } - public static ICondition HaveInitSetter() + public static IOrderedCondition HaveInitSetter() { return new SimpleCondition( member => member.Writability == Writability.InitOnly, @@ -173,7 +173,7 @@ public static ICondition HaveInitSetter() ); } - public static ICondition BeVirtual() + public static IOrderedCondition BeVirtual() { return new SimpleCondition( member => member.IsVirtual, @@ -184,7 +184,7 @@ public static ICondition BeVirtual() //Negations - public static ICondition NotHaveGetter() + public static IOrderedCondition NotHaveGetter() { return new SimpleCondition( member => member.GetterVisibility == NotAccessible, @@ -193,7 +193,7 @@ public static ICondition NotHaveGetter() ); } - public static ICondition NotHavePrivateGetter() + public static IOrderedCondition NotHavePrivateGetter() { return new SimpleCondition( member => member.GetterVisibility != Private, @@ -202,7 +202,7 @@ public static ICondition NotHavePrivateGetter() ); } - public static ICondition NotHavePublicGetter() + public static IOrderedCondition NotHavePublicGetter() { return new SimpleCondition( member => member.GetterVisibility != Public, @@ -211,7 +211,7 @@ public static ICondition NotHavePublicGetter() ); } - public static ICondition NotHaveProtectedGetter() + public static IOrderedCondition NotHaveProtectedGetter() { return new SimpleCondition( member => member.GetterVisibility != Protected, @@ -220,7 +220,7 @@ public static ICondition NotHaveProtectedGetter() ); } - public static ICondition NotHaveInternalGetter() + public static IOrderedCondition NotHaveInternalGetter() { return new SimpleCondition( member => member.GetterVisibility != Internal, @@ -229,7 +229,7 @@ public static ICondition NotHaveInternalGetter() ); } - public static ICondition NotHaveProtectedInternalGetter() + public static IOrderedCondition NotHaveProtectedInternalGetter() { return new SimpleCondition( member => member.GetterVisibility != ProtectedInternal, @@ -238,7 +238,7 @@ public static ICondition NotHaveProtectedInternalGetter() ); } - public static ICondition NotHavePrivateProtectedGetter() + public static IOrderedCondition NotHavePrivateProtectedGetter() { return new SimpleCondition( member => member.GetterVisibility != PrivateProtected, @@ -247,7 +247,7 @@ public static ICondition NotHavePrivateProtectedGetter() ); } - public static ICondition NotHaveSetter() + public static IOrderedCondition NotHaveSetter() { return new SimpleCondition( member => member.SetterVisibility == NotAccessible, @@ -256,7 +256,7 @@ public static ICondition NotHaveSetter() ); } - public static ICondition NotHavePrivateSetter() + public static IOrderedCondition NotHavePrivateSetter() { return new SimpleCondition( member => member.SetterVisibility != Private, @@ -265,7 +265,7 @@ public static ICondition NotHavePrivateSetter() ); } - public static ICondition NotHavePublicSetter() + public static IOrderedCondition NotHavePublicSetter() { return new SimpleCondition( member => member.SetterVisibility != Public, @@ -274,7 +274,7 @@ public static ICondition NotHavePublicSetter() ); } - public static ICondition NotHaveProtectedSetter() + public static IOrderedCondition NotHaveProtectedSetter() { return new SimpleCondition( member => member.SetterVisibility != Protected, @@ -283,7 +283,7 @@ public static ICondition NotHaveProtectedSetter() ); } - public static ICondition NotHaveInternalSetter() + public static IOrderedCondition NotHaveInternalSetter() { return new SimpleCondition( member => member.SetterVisibility != Internal, @@ -292,7 +292,7 @@ public static ICondition NotHaveInternalSetter() ); } - public static ICondition NotHaveProtectedInternalSetter() + public static IOrderedCondition NotHaveProtectedInternalSetter() { return new SimpleCondition( member => member.SetterVisibility != ProtectedInternal, @@ -301,7 +301,7 @@ public static ICondition NotHaveProtectedInternalSetter() ); } - public static ICondition NotHavePrivateProtectedSetter() + public static IOrderedCondition NotHavePrivateProtectedSetter() { return new SimpleCondition( member => member.SetterVisibility != PrivateProtected, @@ -310,7 +310,7 @@ public static ICondition NotHavePrivateProtectedSetter() ); } - public static ICondition NotHaveInitSetter() + public static IOrderedCondition NotHaveInitSetter() { return new SimpleCondition( member => member.Writability != Writability.InitOnly, @@ -319,7 +319,7 @@ public static ICondition NotHaveInitSetter() ); } - public static ICondition NotBeVirtual() + public static IOrderedCondition NotBeVirtual() { return new SimpleCondition( member => !member.IsVirtual, diff --git a/ArchUnitNET/Fluent/Syntax/Elements/ObjectConditionsDefinition.cs b/ArchUnitNET/Fluent/Syntax/Elements/ObjectConditionsDefinition.cs index b4e7f928b..d84f03042 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/ObjectConditionsDefinition.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/ObjectConditionsDefinition.cs @@ -14,12 +14,14 @@ namespace ArchUnitNET.Fluent.Syntax.Elements internal static class ObjectConditionsDefinition where TRuleType : ICanBeAnalyzed { - public static ICondition Exist() + public static IOrderedCondition Exist() { return new ExistsCondition(true); } - public static ICondition Be(IObjectProvider objectProvider) + public static IOrderedCondition Be( + IObjectProvider objectProvider + ) { var sizedObjectProvider = objectProvider as ISizedObjectProvider; IEnumerable Condition( @@ -52,7 +54,9 @@ Architecture architecture return new OrderedArchitectureCondition(Condition, description); } - public static ICondition CallAny(IObjectProvider objectProvider) + public static IOrderedCondition CallAny( + IObjectProvider objectProvider + ) { IEnumerable Condition( IEnumerable ruleTypes, @@ -91,7 +95,9 @@ Architecture architecture return new OrderedArchitectureCondition(Condition, description); } - public static ICondition DependOnAny(IObjectProvider objectProvider) + public static IOrderedCondition DependOnAny( + IObjectProvider objectProvider + ) { IEnumerable Condition( IEnumerable ruleTypes, @@ -130,7 +136,7 @@ Architecture architecture return new OrderedArchitectureCondition(Condition, description); } - public static ICondition FollowCustomCondition( + public static IOrderedCondition FollowCustomCondition( Func condition, string description ) @@ -138,7 +144,7 @@ string description return new SimpleCondition(condition, description); } - public static ICondition FollowCustomCondition( + public static IOrderedCondition FollowCustomCondition( Func condition, string description, string failDescription @@ -147,7 +153,9 @@ string failDescription return new SimpleCondition(condition, description, failDescription); } - public static ICondition OnlyDependOn(IObjectProvider objectProvider) + public static IOrderedCondition OnlyDependOn( + IObjectProvider objectProvider + ) { IEnumerable Condition( IEnumerable ruleTypes, @@ -187,7 +195,7 @@ Architecture architecture return new OrderedArchitectureCondition(Condition, description); } - public static ICondition HaveAnyAttributes( + public static IOrderedCondition HaveAnyAttributes( IObjectProvider objectProvider ) { @@ -228,7 +236,7 @@ Architecture architecture return new OrderedArchitectureCondition(Condition, description); } - public static ICondition OnlyHaveAttributes( + public static IOrderedCondition OnlyHaveAttributes( IObjectProvider objectProvider ) { @@ -268,7 +276,7 @@ Architecture architecture return new OrderedArchitectureCondition(Condition, description); } - public static ICondition HaveAnyAttributesWithArguments( + public static IOrderedCondition HaveAnyAttributesWithArguments( IEnumerable argumentValues ) { @@ -326,7 +334,7 @@ Architecture architecture return new OrderedArchitectureCondition(Condition, description); } - public static ICondition HaveAttributeWithArguments( + public static IOrderedCondition HaveAttributeWithArguments( string attributeFullName, [NotNull] Func getAttribute, [NotNull] IEnumerable argumentValues @@ -390,7 +398,7 @@ Architecture architecture return new OrderedArchitectureCondition(Condition, description); } - public static ICondition HaveAnyAttributesWithNamedArguments( + public static IOrderedCondition HaveAnyAttributesWithNamedArguments( IEnumerable<(string, object)> namedArguments ) { @@ -451,7 +459,7 @@ Architecture architecture return new OrderedArchitectureCondition(Condition, description); } - public static ICondition HaveAttributeWithNamedArguments( + public static IOrderedCondition HaveAttributeWithNamedArguments( string attributeFullName, [NotNull] Func getAttribute, IEnumerable<(string, object)> namedArguments @@ -518,7 +526,7 @@ Architecture architecture return new OrderedArchitectureCondition(Condition, description); } - public static ICondition HaveName(string name) + public static IOrderedCondition HaveName(string name) { return new SimpleCondition( obj => obj.NameEquals(name), @@ -527,7 +535,7 @@ public static ICondition HaveName(string name) ); } - public static ICondition HaveNameMatching(string pattern) + public static IOrderedCondition HaveNameMatching(string pattern) { return new SimpleCondition( obj => obj.NameMatches(pattern), @@ -536,7 +544,7 @@ public static ICondition HaveNameMatching(string pattern) ); } - public static ICondition HaveNameStartingWith(string pattern) + public static IOrderedCondition HaveNameStartingWith(string pattern) { return new SimpleCondition( obj => obj.NameStartsWith(pattern), @@ -545,7 +553,7 @@ public static ICondition HaveNameStartingWith(string pattern) ); } - public static ICondition HaveNameEndingWith(string pattern) + public static IOrderedCondition HaveNameEndingWith(string pattern) { return new SimpleCondition( obj => obj.NameEndsWith(pattern), @@ -554,7 +562,7 @@ public static ICondition HaveNameEndingWith(string pattern) ); } - public static ICondition HaveNameContaining(string pattern) + public static IOrderedCondition HaveNameContaining(string pattern) { return new SimpleCondition( obj => obj.NameContains(pattern), @@ -563,7 +571,7 @@ public static ICondition HaveNameContaining(string pattern) ); } - public static ICondition HaveFullName(string name) + public static IOrderedCondition HaveFullName(string name) { return new SimpleCondition( obj => obj.FullNameEquals(name), @@ -572,7 +580,7 @@ public static ICondition HaveFullName(string name) ); } - public static ICondition HaveFullNameMatching(string pattern) + public static IOrderedCondition HaveFullNameMatching(string pattern) { return new SimpleCondition( obj => obj.FullNameMatches(pattern), @@ -581,7 +589,7 @@ public static ICondition HaveFullNameMatching(string pattern) ); } - public static ICondition HaveFullNameStartingWith(string pattern) + public static IOrderedCondition HaveFullNameStartingWith(string pattern) { return new SimpleCondition( obj => obj.FullNameStartsWith(pattern), @@ -590,7 +598,7 @@ public static ICondition HaveFullNameStartingWith(string pattern) ); } - public static ICondition HaveFullNameEndingWith(string pattern) + public static IOrderedCondition HaveFullNameEndingWith(string pattern) { return new SimpleCondition( obj => obj.FullNameEndsWith(pattern), @@ -599,7 +607,7 @@ public static ICondition HaveFullNameEndingWith(string pattern) ); } - public static ICondition HaveFullNameContaining(string pattern) + public static IOrderedCondition HaveFullNameContaining(string pattern) { return new SimpleCondition( obj => obj.FullNameContains(pattern), @@ -608,7 +616,9 @@ public static ICondition HaveFullNameContaining(string pattern) ); } - public static ICondition HaveAssemblyQualifiedName(string assemblyQualifiedName) + public static IOrderedCondition HaveAssemblyQualifiedName( + string assemblyQualifiedName + ) { return new SimpleCondition( obj => obj.AssemblyQualifiedNameEquals(assemblyQualifiedName), @@ -617,7 +627,7 @@ public static ICondition HaveAssemblyQualifiedName(string assemblyQua ); } - public static ICondition HaveAssemblyQualifiedNameMatching(string pattern) + public static IOrderedCondition HaveAssemblyQualifiedNameMatching(string pattern) { return new SimpleCondition( obj => obj.AssemblyQualifiedNameMatches(pattern), @@ -626,7 +636,9 @@ public static ICondition HaveAssemblyQualifiedNameMatching(string pat ); } - public static ICondition HaveAssemblyQualifiedNameStartingWith(string pattern) + public static IOrderedCondition HaveAssemblyQualifiedNameStartingWith( + string pattern + ) { return new SimpleCondition( obj => obj.AssemblyQualifiedNameStartsWith(pattern), @@ -635,7 +647,9 @@ public static ICondition HaveAssemblyQualifiedNameStartingWith(string ); } - public static ICondition HaveAssemblyQualifiedNameEndingWith(string pattern) + public static IOrderedCondition HaveAssemblyQualifiedNameEndingWith( + string pattern + ) { return new SimpleCondition( obj => obj.AssemblyQualifiedNameEndsWith(pattern), @@ -644,7 +658,9 @@ public static ICondition HaveAssemblyQualifiedNameEndingWith(string p ); } - public static ICondition HaveAssemblyQualifiedNameContaining(string pattern) + public static IOrderedCondition HaveAssemblyQualifiedNameContaining( + string pattern + ) { return new SimpleCondition( obj => obj.AssemblyQualifiedNameContains(pattern), @@ -653,7 +669,7 @@ public static ICondition HaveAssemblyQualifiedNameContaining(string p ); } - public static ICondition BePrivate() + public static IOrderedCondition BePrivate() { return new SimpleCondition( obj => obj.Visibility == Private, @@ -662,7 +678,7 @@ public static ICondition BePrivate() ); } - public static ICondition BePublic() + public static IOrderedCondition BePublic() { return new SimpleCondition( obj => obj.Visibility == Public, @@ -671,7 +687,7 @@ public static ICondition BePublic() ); } - public static ICondition BeProtected() + public static IOrderedCondition BeProtected() { return new SimpleCondition( obj => obj.Visibility == Protected, @@ -680,7 +696,7 @@ public static ICondition BeProtected() ); } - public static ICondition BeInternal() + public static IOrderedCondition BeInternal() { return new SimpleCondition( obj => obj.Visibility == Internal, @@ -689,7 +705,7 @@ public static ICondition BeInternal() ); } - public static ICondition BeProtectedInternal() + public static IOrderedCondition BeProtectedInternal() { return new SimpleCondition( obj => obj.Visibility == ProtectedInternal, @@ -698,7 +714,7 @@ public static ICondition BeProtectedInternal() ); } - public static ICondition BePrivateProtected() + public static IOrderedCondition BePrivateProtected() { return new SimpleCondition( obj => obj.Visibility == PrivateProtected, @@ -747,12 +763,14 @@ public static RelationCondition OnlyHaveAttributesThat() //Negations - public static ICondition NotExist() + public static IOrderedCondition NotExist() { return new ExistsCondition(false); } - public static ICondition NotBe(IObjectProvider objectProvider) + public static IOrderedCondition NotBe( + IObjectProvider objectProvider + ) { IEnumerable Condition( IEnumerable ruleTypes, @@ -785,7 +803,9 @@ Architecture architecture return new OrderedArchitectureCondition(Condition, description); } - public static ICondition NotCallAny(IObjectProvider objectProvider) + public static IOrderedCondition NotCallAny( + IObjectProvider objectProvider + ) { IEnumerable Condition( IEnumerable ruleTypes, @@ -821,7 +841,9 @@ Architecture architecture return new OrderedArchitectureCondition(Condition, description); } - public static ICondition NotDependOnAny(IObjectProvider objectProvider) + public static IOrderedCondition NotDependOnAny( + IObjectProvider objectProvider + ) { IEnumerable Condition( IEnumerable ruleTypes, @@ -858,7 +880,7 @@ Architecture architecture return new OrderedArchitectureCondition(Condition, description); } - public static ICondition NotHaveAnyAttributes( + public static IOrderedCondition NotHaveAnyAttributes( IObjectProvider objectProvider ) { @@ -897,7 +919,7 @@ Architecture architecture return new OrderedArchitectureCondition(Condition, description); } - public static ICondition NotHaveAnyAttributesWithArguments( + public static IOrderedCondition NotHaveAnyAttributesWithArguments( IEnumerable argumentValues ) { @@ -956,7 +978,7 @@ Architecture architecture return new OrderedArchitectureCondition(Condition, description); } - public static ICondition NotHaveAttributeWithArguments( + public static IOrderedCondition NotHaveAttributeWithArguments( string attributeFullName, [NotNull] Func getAttribute, IEnumerable argumentValues @@ -1004,7 +1026,7 @@ Architecture architecture return new OrderedArchitectureCondition(Condition, description); } - public static ICondition NotHaveAnyAttributesWithNamedArguments( + public static IOrderedCondition NotHaveAnyAttributesWithNamedArguments( IEnumerable<(string, object)> namedArguments ) { @@ -1066,7 +1088,7 @@ Architecture architecture return new OrderedArchitectureCondition(Condition, description); } - public static ICondition NotHaveAttributeWithNamedArguments( + public static IOrderedCondition NotHaveAttributeWithNamedArguments( string attributeFullName, [NotNull] Func getAttribute, IEnumerable<(string, object)> namedArguments @@ -1120,7 +1142,7 @@ Architecture architecture return new OrderedArchitectureCondition(Condition, description); } - public static ICondition NotHaveName(string name) + public static IOrderedCondition NotHaveName(string name) { return new SimpleCondition( obj => !obj.NameEquals(name), @@ -1129,7 +1151,7 @@ public static ICondition NotHaveName(string name) ); } - public static ICondition NotHaveNameMatching(string pattern) + public static IOrderedCondition NotHaveNameMatching(string pattern) { return new SimpleCondition( obj => !obj.NameMatches(pattern), @@ -1138,7 +1160,7 @@ public static ICondition NotHaveNameMatching(string pattern) ); } - public static ICondition NotHaveNameStartingWith(string pattern) + public static IOrderedCondition NotHaveNameStartingWith(string pattern) { return new SimpleCondition( obj => !obj.NameStartsWith(pattern), @@ -1147,7 +1169,7 @@ public static ICondition NotHaveNameStartingWith(string pattern) ); } - public static ICondition NotHaveNameEndingWith(string pattern) + public static IOrderedCondition NotHaveNameEndingWith(string pattern) { return new SimpleCondition( obj => !obj.NameEndsWith(pattern), @@ -1156,7 +1178,7 @@ public static ICondition NotHaveNameEndingWith(string pattern) ); } - public static ICondition NotHaveNameContaining(string pattern) + public static IOrderedCondition NotHaveNameContaining(string pattern) { return new SimpleCondition( obj => !obj.NameContains(pattern), @@ -1165,7 +1187,7 @@ public static ICondition NotHaveNameContaining(string pattern) ); } - public static ICondition NotHaveFullName(string fullName) + public static IOrderedCondition NotHaveFullName(string fullName) { return new SimpleCondition( obj => !obj.FullNameEquals(fullName), @@ -1174,7 +1196,7 @@ public static ICondition NotHaveFullName(string fullName) ); } - public static ICondition NotHaveFullNameMatching(string pattern) + public static IOrderedCondition NotHaveFullNameMatching(string pattern) { return new SimpleCondition( obj => !obj.FullNameMatches(pattern), @@ -1183,7 +1205,7 @@ public static ICondition NotHaveFullNameMatching(string pattern) ); } - public static ICondition NotHaveFullNameStartingWith(string pattern) + public static IOrderedCondition NotHaveFullNameStartingWith(string pattern) { return new SimpleCondition( obj => !obj.FullNameStartsWith(pattern), @@ -1192,7 +1214,7 @@ public static ICondition NotHaveFullNameStartingWith(string pattern) ); } - public static ICondition NotHaveFullNameEndingWith(string pattern) + public static IOrderedCondition NotHaveFullNameEndingWith(string pattern) { return new SimpleCondition( obj => !obj.FullNameEndsWith(pattern), @@ -1201,7 +1223,7 @@ public static ICondition NotHaveFullNameEndingWith(string pattern) ); } - public static ICondition NotHaveFullNameContaining(string pattern) + public static IOrderedCondition NotHaveFullNameContaining(string pattern) { return new SimpleCondition( obj => !obj.FullNameContains(pattern), @@ -1210,7 +1232,7 @@ public static ICondition NotHaveFullNameContaining(string pattern) ); } - public static ICondition NotHaveAssemblyQualifiedName( + public static IOrderedCondition NotHaveAssemblyQualifiedName( string assemblyQualifiedName ) { @@ -1221,7 +1243,9 @@ string assemblyQualifiedName ); } - public static ICondition NotHaveAssemblyQualifiedNameMatching(string pattern) + public static IOrderedCondition NotHaveAssemblyQualifiedNameMatching( + string pattern + ) { return new SimpleCondition( obj => !obj.AssemblyQualifiedNameMatches(pattern), @@ -1230,7 +1254,9 @@ public static ICondition NotHaveAssemblyQualifiedNameMatching(string ); } - public static ICondition NotHaveAssemblyQualifiedNameStartingWith(string pattern) + public static IOrderedCondition NotHaveAssemblyQualifiedNameStartingWith( + string pattern + ) { return new SimpleCondition( obj => !obj.AssemblyQualifiedNameStartsWith(pattern), @@ -1239,7 +1265,9 @@ public static ICondition NotHaveAssemblyQualifiedNameStartingWith(str ); } - public static ICondition NotHaveAssemblyQualifiedNameEndingWith(string pattern) + public static IOrderedCondition NotHaveAssemblyQualifiedNameEndingWith( + string pattern + ) { return new SimpleCondition( obj => !obj.AssemblyQualifiedNameEndsWith(pattern), @@ -1248,7 +1276,9 @@ public static ICondition NotHaveAssemblyQualifiedNameEndingWith(strin ); } - public static ICondition NotHaveAssemblyQualifiedNameContaining(string pattern) + public static IOrderedCondition NotHaveAssemblyQualifiedNameContaining( + string pattern + ) { return new SimpleCondition( obj => !obj.AssemblyQualifiedNameContains(pattern), @@ -1257,7 +1287,7 @@ public static ICondition NotHaveAssemblyQualifiedNameContaining(strin ); } - public static ICondition NotBePrivate() + public static IOrderedCondition NotBePrivate() { return new SimpleCondition( obj => obj.Visibility != Private, @@ -1266,7 +1296,7 @@ public static ICondition NotBePrivate() ); } - public static ICondition NotBePublic() + public static IOrderedCondition NotBePublic() { return new SimpleCondition( obj => obj.Visibility != Public, @@ -1275,7 +1305,7 @@ public static ICondition NotBePublic() ); } - public static ICondition NotBeProtected() + public static IOrderedCondition NotBeProtected() { return new SimpleCondition( obj => obj.Visibility != Protected, @@ -1284,7 +1314,7 @@ public static ICondition NotBeProtected() ); } - public static ICondition NotBeInternal() + public static IOrderedCondition NotBeInternal() { return new SimpleCondition( obj => obj.Visibility != Internal, @@ -1293,7 +1323,7 @@ public static ICondition NotBeInternal() ); } - public static ICondition NotBeProtectedInternal() + public static IOrderedCondition NotBeProtectedInternal() { return new SimpleCondition( obj => obj.Visibility != ProtectedInternal, @@ -1302,7 +1332,7 @@ public static ICondition NotBeProtectedInternal() ); } - public static ICondition NotBePrivateProtected() + public static IOrderedCondition NotBePrivateProtected() { return new SimpleCondition( obj => obj.Visibility != PrivateProtected, diff --git a/ArchUnitNET/Fluent/Syntax/Elements/ObjectsShould.cs b/ArchUnitNET/Fluent/Syntax/Elements/ObjectsShould.cs index adc5365b3..036fa7642 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/ObjectsShould.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/ObjectsShould.cs @@ -43,7 +43,7 @@ public TRuleTypeShouldConjunction Exist() 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); + 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)); @@ -189,7 +189,7 @@ public TRuleTypeShouldConjunction NotExist() public ShouldRelateToAttributesThat NotHaveAnyAttributesThat() => BeginComplexAttributeCondition(ObjectConditionsDefinition.NotHaveAnyAttributesThat()); // csharpier-ignore-end - private TRuleTypeShouldConjunction AddCondition(ICondition condition) + private TRuleTypeShouldConjunction AddCondition(IOrderedCondition condition) { _ruleCreator.AddCondition(condition); return Create(_ruleCreator); diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/AttributeConditionsDefinition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/AttributeConditionsDefinition.cs index f7678268e..854eec9bb 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/AttributeConditionsDefinition.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Attributes/AttributeConditionsDefinition.cs @@ -5,7 +5,7 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Attributes { public static class AttributeConditionsDefinition { - public static ICondition BeAbstract() + public static IOrderedCondition BeAbstract() { return new SimpleCondition( attribute => !attribute.IsAbstract.HasValue || attribute.IsAbstract.Value, @@ -14,7 +14,7 @@ public static ICondition BeAbstract() ); } - public static ICondition BeSealed() + public static IOrderedCondition BeSealed() { return new SimpleCondition( attribute => !attribute.IsSealed.HasValue || attribute.IsSealed.Value, @@ -25,7 +25,7 @@ public static ICondition BeSealed() //Negations - public static ICondition NotBeAbstract() + public static IOrderedCondition NotBeAbstract() { return new SimpleCondition( attribute => !attribute.IsAbstract.HasValue || !attribute.IsAbstract.Value, @@ -34,7 +34,7 @@ public static ICondition NotBeAbstract() ); } - public static ICondition NotBeSealed() + public static IOrderedCondition NotBeSealed() { return new SimpleCondition( attribute => !attribute.IsSealed.HasValue || !attribute.IsSealed.Value, diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/ClassConditionsDefinition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/ClassConditionsDefinition.cs index 5fd8b88ed..3bc186b6c 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/ClassConditionsDefinition.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/Classes/ClassConditionsDefinition.cs @@ -6,7 +6,7 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types.Classes { public static class ClassConditionsDefinition { - public static ICondition BeAbstract() + public static IOrderedCondition BeAbstract() { return new SimpleCondition( cls => !cls.IsAbstract.HasValue || cls.IsAbstract.Value, @@ -15,7 +15,7 @@ public static ICondition BeAbstract() ); } - public static ICondition BeSealed() + public static IOrderedCondition BeSealed() { return new SimpleCondition( cls => !cls.IsSealed.HasValue || cls.IsSealed.Value, @@ -24,7 +24,7 @@ public static ICondition BeSealed() ); } - public static ICondition BeRecord() + public static IOrderedCondition BeRecord() { return new SimpleCondition( cls => !cls.IsRecord.HasValue || cls.IsRecord.Value, @@ -33,7 +33,7 @@ public static ICondition BeRecord() ); } - public static ICondition BeImmutable() + public static IOrderedCondition BeImmutable() { return new SimpleCondition( cls => @@ -46,7 +46,7 @@ public static ICondition BeImmutable() //Negations - public static ICondition NotBeAbstract() + public static IOrderedCondition NotBeAbstract() { return new SimpleCondition( cls => !cls.IsAbstract.HasValue || !cls.IsAbstract.Value, @@ -55,7 +55,7 @@ public static ICondition NotBeAbstract() ); } - public static ICondition NotBeSealed() + public static IOrderedCondition NotBeSealed() { return new SimpleCondition( cls => !cls.IsSealed.HasValue || !cls.IsSealed.Value, @@ -64,7 +64,7 @@ public static ICondition NotBeSealed() ); } - public static ICondition NotBeRecord() + public static IOrderedCondition NotBeRecord() { return new SimpleCondition( cls => !cls.IsRecord.HasValue || !cls.IsRecord.Value, @@ -73,7 +73,7 @@ public static ICondition NotBeRecord() ); } - public static ICondition NotBeImmutable() + public static IOrderedCondition NotBeImmutable() { return new SimpleCondition( cls => cls.Members.Any(m => m.IsStatic == false && !m.Writability.IsImmutable()), diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/TypeConditionsDefinition.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/TypeConditionsDefinition.cs index bfe0a5f6f..bb1d5d595 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/TypeConditionsDefinition.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/TypeConditionsDefinition.cs @@ -14,14 +14,14 @@ namespace ArchUnitNET.Fluent.Syntax.Elements.Types public static class TypeConditionsDefinition where TRuleType : IType { - public static ICondition Be(Type firstType, params Type[] moreTypes) + public static IOrderedCondition Be(Type firstType, params Type[] moreTypes) { var types = new List { firstType }; types.AddRange(moreTypes); return Be(types); } - public static ICondition Be(IEnumerable types) + public static IOrderedCondition Be(IEnumerable types) { var typeList = types.ToList(); @@ -81,7 +81,10 @@ Architecture architecture ); } - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } public static RelationCondition BeTypesThat() @@ -93,7 +96,7 @@ public static RelationCondition BeTypesThat() ); } - public static ICondition BeAssignableTo( + public static IOrderedCondition BeAssignableTo( IType firstType, params IType[] moreTypes ) @@ -103,14 +106,19 @@ params IType[] moreTypes return BeAssignableTo(types); } - public static ICondition BeAssignableTo(Type firstType, params Type[] moreTypes) + public static IOrderedCondition BeAssignableTo( + Type firstType, + params Type[] moreTypes + ) { var types = new List { firstType }; types.AddRange(moreTypes); return BeAssignableTo(types); } - public static ICondition BeAssignableTo(IObjectProvider objectProvider) + public static IOrderedCondition BeAssignableTo( + IObjectProvider objectProvider + ) { IEnumerable Condition( IEnumerable ruleTypes, @@ -135,10 +143,13 @@ Architecture architecture } var description = "be assignable to " + objectProvider.Description; - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition BeAssignableTo(IEnumerable types) + public static IOrderedCondition BeAssignableTo(IEnumerable types) { var typeList = types.ToList(); var firstType = typeList.First(); @@ -192,10 +203,10 @@ IEnumerable Condition(IEnumerable ruleTypes) ); } - return new EnumerableCondition(Condition, description); + return new EnumerableCondition(Condition, description).AsOrderedCondition(); } - public static ICondition BeAssignableTo(IEnumerable types) + public static IOrderedCondition BeAssignableTo(IEnumerable types) { var typeList = types.ToList(); var firstType = typeList.First(); @@ -266,24 +277,33 @@ Architecture architecture ); } - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition BeNestedIn(IType firstType, params IType[] moreTypes) + public static IOrderedCondition BeNestedIn( + IType firstType, + params IType[] moreTypes + ) { var types = new List { firstType }; types.AddRange(moreTypes); return BeNestedIn(types); } - public static ICondition BeNestedIn(Type firstType, params Type[] moreTypes) + public static IOrderedCondition BeNestedIn( + Type firstType, + params Type[] moreTypes + ) { var types = new List { firstType }; types.AddRange(moreTypes); return BeNestedIn(types); } - public static ICondition BeNestedIn(IObjectProvider objectProvider) + public static IOrderedCondition BeNestedIn(IObjectProvider objectProvider) { IEnumerable Condition( IEnumerable ruleTypes, @@ -312,10 +332,13 @@ Architecture architecture } var description = "be nested in " + objectProvider.Description; - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition BeNestedIn(IEnumerable types) + public static IOrderedCondition BeNestedIn(IEnumerable types) { var typeList = types.ToList(); var firstType = typeList.First(); @@ -373,10 +396,10 @@ IEnumerable Condition(IEnumerable ruleTypes) ); } - return new EnumerableCondition(Condition, description); + return new EnumerableCondition(Condition, description).AsOrderedCondition(); } - public static ICondition BeNestedIn(IEnumerable types) + public static IOrderedCondition BeNestedIn(IEnumerable types) { var typeList = types.ToList(); var firstType = typeList.First(); @@ -437,10 +460,13 @@ Architecture architecture ); } - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition BeValueTypes() + public static IOrderedCondition BeValueTypes() { return new SimpleCondition( type => type is Enum || type is Struct, @@ -449,12 +475,12 @@ public static ICondition BeValueTypes() ); } - public static ICondition BeEnums() + public static IOrderedCondition BeEnums() { return new SimpleCondition(type => type is Enum, "be enums", "is no enum"); } - public static ICondition BeStructs() + public static IOrderedCondition BeStructs() { return new SimpleCondition( type => type is Struct, @@ -463,7 +489,7 @@ public static ICondition BeStructs() ); } - public static ICondition ImplementInterface(Interface intf) + public static IOrderedCondition ImplementInterface(Interface intf) { return new SimpleCondition( type => type.ImplementsInterface(intf), @@ -472,7 +498,7 @@ public static ICondition ImplementInterface(Interface intf) ); } - public static ICondition ImplementInterface(Type intf) + public static IOrderedCondition ImplementInterface(Type intf) { IEnumerable Condition( IEnumerable ruleTypes, @@ -528,10 +554,12 @@ Architecture architecture return new ArchitectureCondition( Condition, "implement interface \"" + intf.FullName + "\"" - ); + ).AsOrderedCondition(); } - public static ICondition ImplementAny(IObjectProvider interfaces) + public static IOrderedCondition ImplementAny( + IObjectProvider interfaces + ) { IEnumerable Condition( IEnumerable ruleTypes, @@ -568,10 +596,13 @@ Architecture architecture "implement", "implement any" ); - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition ResideInNamespace(string fullName) + public static IOrderedCondition ResideInNamespace(string fullName) { return new SimpleCondition( type => type.ResidesInNamespace(fullName), @@ -580,7 +611,7 @@ public static ICondition ResideInNamespace(string fullName) ); } - public static ICondition ResideInNamespaceMatching(string pattern) + public static IOrderedCondition ResideInNamespaceMatching(string pattern) { return new SimpleCondition( type => type.ResidesInNamespaceMatching(pattern), @@ -589,7 +620,7 @@ public static ICondition ResideInNamespaceMatching(string pattern) ); } - public static ICondition ResideInAssembly(string fullName) + public static IOrderedCondition ResideInAssembly(string fullName) { return new SimpleCondition( type => type.ResidesInAssembly(fullName), @@ -598,7 +629,7 @@ public static ICondition ResideInAssembly(string fullName) ); } - public static ICondition ResideInAssemblyMatching(string pattern) + public static IOrderedCondition ResideInAssemblyMatching(string pattern) { return new SimpleCondition( type => type.ResidesInAssemblyMatching(pattern), @@ -607,7 +638,7 @@ public static ICondition ResideInAssemblyMatching(string pattern) ); } - public static ICondition ResideInAssembly( + public static IOrderedCondition ResideInAssembly( System.Reflection.Assembly assembly, params System.Reflection.Assembly[] moreAssemblies ) @@ -632,7 +663,7 @@ bool Condition(TRuleType ruleType, Architecture architecture) ); } - public static ICondition ResideInAssembly( + public static IOrderedCondition ResideInAssembly( Assembly assembly, Assembly[] moreAssemblies ) @@ -655,7 +686,7 @@ bool Condition(TRuleType ruleType) ); } - public static ICondition HavePropertyMemberWithName(string name) + public static IOrderedCondition HavePropertyMemberWithName(string name) { return new SimpleCondition( type => type.HasPropertyMemberWithName(name), @@ -664,19 +695,21 @@ public static ICondition HavePropertyMemberWithName(string name) ); } - public static ICondition AdhereToPlantUmlDiagram(Stream stream) + public static IOrderedCondition AdhereToPlantUmlDiagram(Stream stream) { PlantUmlParsedDiagram diagram = new PlantUmlParser().Parse(stream); return createPlantUmlCondition(diagram); } - public static ICondition AdhereToPlantUmlDiagram(string file) + public static IOrderedCondition AdhereToPlantUmlDiagram(string file) { PlantUmlParsedDiagram diagram = new PlantUmlParser().Parse(file); return createPlantUmlCondition(diagram); } - private static ICondition createPlantUmlCondition(PlantUmlParsedDiagram diagram) + private static IOrderedCondition createPlantUmlCondition( + PlantUmlParsedDiagram diagram + ) { ClassDiagramAssociation classDiagramAssociation = new ClassDiagramAssociation(diagram); @@ -725,7 +758,7 @@ ConditionResult Condition(TRuleType ruleType) return new SimpleCondition(Condition, "adhere to PlantUML diagram."); } - public static ICondition HaveFieldMemberWithName(string name) + public static IOrderedCondition HaveFieldMemberWithName(string name) { return new SimpleCondition( type => type.HasFieldMemberWithName(name), @@ -734,7 +767,7 @@ public static ICondition HaveFieldMemberWithName(string name) ); } - public static ICondition HaveMethodMemberWithName(string name) + public static IOrderedCondition HaveMethodMemberWithName(string name) { return new SimpleCondition( type => type.HasMethodMemberWithName(name), @@ -743,7 +776,7 @@ public static ICondition HaveMethodMemberWithName(string name) ); } - public static ICondition HaveMemberWithName(string name) + public static IOrderedCondition HaveMemberWithName(string name) { return new SimpleCondition( type => type.HasMemberWithName(name), @@ -752,7 +785,7 @@ public static ICondition HaveMemberWithName(string name) ); } - public static ICondition BeNested() + public static IOrderedCondition BeNested() { return new SimpleCondition( type => type.IsNested, @@ -783,14 +816,14 @@ public static RelationCondition ImplementAnyInterfacesThat //Negations - public static ICondition NotBe(Type firstType, params Type[] moreTypes) + public static IOrderedCondition NotBe(Type firstType, params Type[] moreTypes) { var types = new List { firstType }; types.AddRange(moreTypes); return NotBe(types); } - public static ICondition NotBe(IEnumerable types) + public static IOrderedCondition NotBe(IEnumerable types) { var typeList = types.ToList(); @@ -850,10 +883,13 @@ Architecture architecture ); } - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition NotBeAssignableTo( + public static IOrderedCondition NotBeAssignableTo( IType firstType, params IType[] moreTypes ) @@ -863,7 +899,7 @@ params IType[] moreTypes return NotBeAssignableTo(types); } - public static ICondition NotBeAssignableTo( + public static IOrderedCondition NotBeAssignableTo( Type firstType, params Type[] moreTypes ) @@ -873,7 +909,9 @@ params Type[] moreTypes return NotBeAssignableTo(types); } - public static ICondition NotBeAssignableTo(IObjectProvider objectProvider) + public static IOrderedCondition NotBeAssignableTo( + IObjectProvider objectProvider + ) { IEnumerable Condition( IEnumerable ruleTypes, @@ -898,10 +936,13 @@ Architecture architecture } var description = "not be assignable to " + objectProvider.Description; - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition NotBeAssignableTo(IEnumerable types) + public static IOrderedCondition NotBeAssignableTo(IEnumerable types) { var typeList = types.ToList(); var firstType = typeList.First(); @@ -969,10 +1010,10 @@ IEnumerable Condition(IEnumerable ruleTypes) ); } - return new EnumerableCondition(Condition, description); + return new EnumerableCondition(Condition, description).AsOrderedCondition(); } - public static ICondition NotBeAssignableTo(IEnumerable types) + public static IOrderedCondition NotBeAssignableTo(IEnumerable types) { var typeList = types.ToList(); var firstType = typeList.First(); @@ -1061,10 +1102,13 @@ var type in failedObject ); } - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition NotBeValueTypes() + public static IOrderedCondition NotBeValueTypes() { return new SimpleCondition( type => !(type is Enum) && !(type is Struct), @@ -1073,7 +1117,7 @@ public static ICondition NotBeValueTypes() ); } - public static ICondition NotBeEnums() + public static IOrderedCondition NotBeEnums() { return new SimpleCondition( type => !(type is Enum), @@ -1082,7 +1126,7 @@ public static ICondition NotBeEnums() ); } - public static ICondition NotBeStructs() + public static IOrderedCondition NotBeStructs() { return new SimpleCondition( type => !(type is Struct), @@ -1091,7 +1135,7 @@ public static ICondition NotBeStructs() ); } - public static ICondition NotImplementInterface(Interface intf) + public static IOrderedCondition NotImplementInterface(Interface intf) { return new SimpleCondition( type => !type.ImplementsInterface(intf), @@ -1100,7 +1144,7 @@ public static ICondition NotImplementInterface(Interface intf) ); } - public static ICondition NotImplementInterface(Type intf) + public static IOrderedCondition NotImplementInterface(Type intf) { IEnumerable Condition( IEnumerable ruleTypes, @@ -1152,10 +1196,12 @@ Architecture architecture return new ArchitectureCondition( Condition, "not implement interface \"" + intf.FullName + "\"" - ); + ).AsOrderedCondition(); } - public static ICondition NotImplementAny(IObjectProvider interfaces) + public static IOrderedCondition NotImplementAny( + IObjectProvider interfaces + ) { IEnumerable Condition( IEnumerable ruleTypes, @@ -1190,10 +1236,13 @@ Architecture architecture "not implement", "not implement any" ); - return new ArchitectureCondition(Condition, description); + return new ArchitectureCondition( + Condition, + description + ).AsOrderedCondition(); } - public static ICondition NotResideInNamespace(string fullName) + public static IOrderedCondition NotResideInNamespace(string fullName) { return new SimpleCondition( type => !type.ResidesInNamespace(fullName), @@ -1202,7 +1251,7 @@ public static ICondition NotResideInNamespace(string fullName) ); } - public static ICondition NotResideInNamespaceMatching(string pattern) + public static IOrderedCondition NotResideInNamespaceMatching(string pattern) { return new SimpleCondition( type => !type.ResidesInNamespaceMatching(pattern), @@ -1211,7 +1260,7 @@ public static ICondition NotResideInNamespaceMatching(string pattern) ); } - public static ICondition NotResideInAssembly(string fullName) + public static IOrderedCondition NotResideInAssembly(string fullName) { return new SimpleCondition( type => !type.ResidesInAssembly(fullName), @@ -1220,7 +1269,7 @@ public static ICondition NotResideInAssembly(string fullName) ); } - public static ICondition NotResideInAssemblyMatching(string pattern) + public static IOrderedCondition NotResideInAssemblyMatching(string pattern) { return new SimpleCondition( type => !type.ResidesInAssemblyMatching(pattern), @@ -1229,7 +1278,7 @@ public static ICondition NotResideInAssemblyMatching(string pattern) ); } - public static ICondition NotResideInAssembly( + public static IOrderedCondition NotResideInAssembly( System.Reflection.Assembly assembly, params System.Reflection.Assembly[] moreAssemblies ) @@ -1254,7 +1303,7 @@ bool Condition(TRuleType ruleType, Architecture architecture) ); } - public static ICondition NotResideInAssembly( + public static IOrderedCondition NotResideInAssembly( Assembly assembly, params Assembly[] moreAssemblies ) @@ -1277,7 +1326,7 @@ bool Condition(TRuleType ruleType) ); } - public static ICondition NotHavePropertyMemberWithName(string name) + public static IOrderedCondition NotHavePropertyMemberWithName(string name) { return new SimpleCondition( type => !type.HasPropertyMemberWithName(name), @@ -1286,7 +1335,7 @@ public static ICondition NotHavePropertyMemberWithName(string name) ); } - public static ICondition NotHaveFieldMemberWithName(string name) + public static IOrderedCondition NotHaveFieldMemberWithName(string name) { return new SimpleCondition( type => !type.HasFieldMemberWithName(name), @@ -1295,7 +1344,7 @@ public static ICondition NotHaveFieldMemberWithName(string name) ); } - public static ICondition NotHaveMethodMemberWithName(string name) + public static IOrderedCondition NotHaveMethodMemberWithName(string name) { return new SimpleCondition( type => !type.HasMethodMemberWithName(name), @@ -1304,7 +1353,7 @@ public static ICondition NotHaveMethodMemberWithName(string name) ); } - public static ICondition NotHaveMemberWithName(string name) + public static IOrderedCondition NotHaveMemberWithName(string name) { return new SimpleCondition( type => !type.HasMemberWithName(name), @@ -1313,7 +1362,7 @@ public static ICondition NotHaveMemberWithName(string name) ); } - public static ICondition NotBeNested() + public static IOrderedCondition NotBeNested() { return new SimpleCondition( type => !type.IsNested, diff --git a/ArchUnitNET/Fluent/Syntax/Elements/Types/TypesShould.cs b/ArchUnitNET/Fluent/Syntax/Elements/Types/TypesShould.cs index c730f3917..f4fd44317 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/Types/TypesShould.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/Types/TypesShould.cs @@ -505,7 +505,7 @@ public ShouldRelateToInterfacesThat< ); } - private TRuleTypeShouldConjunction Handle(ICondition condition) + private TRuleTypeShouldConjunction Handle(IOrderedCondition condition) { _ruleCreator.AddCondition(condition); return Create(_ruleCreator);