Skip to content

Commit 0e11022

Browse files
refactor: deduplicate implementation of type syntax elements
Signed-off-by: Alexander Linne <alexander.linne@tngtech.com>
1 parent 6601972 commit 0e11022

15 files changed

+312
-1332
lines changed

ArchUnitNET/Fluent/Syntax/Elements/Types/AddTypeCondition.cs

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,23 @@ internal AddTypeCondition(IArchRuleCreator<TRuleType> ruleCreator)
1616
: base(ruleCreator) { }
1717

1818
// csharpier-ignore-start
19-
public TNextElement Be(Type firstType, params Type[] moreTypes) => CreateNextElement(TypeConditionsDefinition<TRuleType>.Be(firstType, moreTypes));
20-
public TNextElement Be(IEnumerable<Type> types) => CreateNextElement(TypeConditionsDefinition<TRuleType>.Be(types));
19+
public TNextElement Be(params Type[] types) => Be(new SystemTypeObjectProvider<IType>(types));
20+
public TNextElement Be(IEnumerable<Type> types) => Be(new SystemTypeObjectProvider<IType>(types));
21+
public TNextElement Be(IObjectProvider<IType> types) => CreateNextElement(TypeConditionsDefinition<TRuleType>.Be(types));
2122

22-
public TNextElement BeAssignableTo(IType firstType, params IType[] moreTypes) => CreateNextElement(TypeConditionsDefinition<TRuleType>.BeAssignableTo(firstType, moreTypes));
23-
public TNextElement BeAssignableTo(Type firstType, params Type[] moreTypes) => CreateNextElement(TypeConditionsDefinition<TRuleType>.BeAssignableTo(firstType, moreTypes));
23+
public TNextElement BeAssignableTo() => BeAssignableTo(new ObjectProvider<IType>());
24+
public TNextElement BeAssignableTo(params IType[] types) => BeAssignableTo(new ObjectProvider<IType>(types));
25+
public TNextElement BeAssignableTo(params Type[] types) => BeAssignableTo(new SystemTypeObjectProvider<IType>(types));
2426
public TNextElement BeAssignableTo(IObjectProvider<IType> types) => CreateNextElement(TypeConditionsDefinition<TRuleType>.BeAssignableTo(types));
25-
public TNextElement BeAssignableTo(IEnumerable<IType> types) => CreateNextElement(TypeConditionsDefinition<TRuleType>.BeAssignableTo(types));
26-
public TNextElement BeAssignableTo(IEnumerable<Type> types) => CreateNextElement(TypeConditionsDefinition<TRuleType>.BeAssignableTo(types));
27+
public TNextElement BeAssignableTo(IEnumerable<IType> types) => BeAssignableTo(new ObjectProvider<IType>(types));
28+
public TNextElement BeAssignableTo(IEnumerable<Type> types) => BeAssignableTo(new SystemTypeObjectProvider<IType>(types));
2729

28-
public TNextElement BeNestedIn(IType firstType, params IType[] moreTypes) => CreateNextElement(TypeConditionsDefinition<TRuleType>.BeNestedIn(firstType, moreTypes));
29-
public TNextElement BeNestedIn(Type firstType, params Type[] moreTypes) => CreateNextElement(TypeConditionsDefinition<TRuleType>.BeNestedIn(firstType, moreTypes));
30+
public TNextElement BeNestedIn() => BeNestedIn(new ObjectProvider<IType>());
31+
public TNextElement BeNestedIn(params IType[] types) => BeNestedIn(new ObjectProvider<IType>(types));
32+
public TNextElement BeNestedIn(params Type[] types) => BeNestedIn(new SystemTypeObjectProvider<IType>(types));
3033
public TNextElement BeNestedIn(IObjectProvider<IType> types) => CreateNextElement(TypeConditionsDefinition<TRuleType>.BeNestedIn(types));
31-
public TNextElement BeNestedIn(IEnumerable<IType> types) => CreateNextElement(TypeConditionsDefinition<TRuleType>.BeNestedIn(types));
32-
public TNextElement BeNestedIn(IEnumerable<Type> types) => CreateNextElement(TypeConditionsDefinition<TRuleType>.BeNestedIn(types));
34+
public TNextElement BeNestedIn(IEnumerable<IType> types) => BeNestedIn(new ObjectProvider<IType>(types));
35+
public TNextElement BeNestedIn(IEnumerable<Type> types) => BeNestedIn(new SystemTypeObjectProvider<IType>(types));
3336

3437
public TNextElement BeValueTypes() => CreateNextElement(TypeConditionsDefinition<TRuleType>.BeValueTypes());
3538
public TNextElement BeEnums() => CreateNextElement(TypeConditionsDefinition<TRuleType>.BeEnums());
@@ -68,14 +71,16 @@ internal AddTypeCondition(IArchRuleCreator<TRuleType> ruleCreator)
6871

6972
//Negations
7073

71-
public TNextElement NotBe(Type firstType, params Type[] moreTypes) => CreateNextElement(TypeConditionsDefinition<TRuleType>.NotBe(firstType, moreTypes));
72-
public TNextElement NotBe(IEnumerable<Type> types) => CreateNextElement(TypeConditionsDefinition<TRuleType>.NotBe(types));
74+
public TNextElement NotBe(params Type[] types) => NotBe(new SystemTypeObjectProvider<IType>(types));
75+
public TNextElement NotBe(IEnumerable<Type> types) => NotBe(new SystemTypeObjectProvider<IType>(types));
76+
public TNextElement NotBe(IObjectProvider<IType> types) => CreateNextElement(TypeConditionsDefinition<TRuleType>.NotBe(types));
7377

74-
public TNextElement NotBeAssignableTo(IType firstType, params IType[] moreTypes) => CreateNextElement(TypeConditionsDefinition<TRuleType>.NotBeAssignableTo(firstType, moreTypes));
75-
public TNextElement NotBeAssignableTo(Type firstType, params Type[] moreTypes) => CreateNextElement(TypeConditionsDefinition<TRuleType>.NotBeAssignableTo(firstType, moreTypes));
78+
public TNextElement NotBeAssignableTo() => NotBeAssignableTo(new ObjectProvider<IType>());
79+
public TNextElement NotBeAssignableTo(params IType[] types) => NotBeAssignableTo(new ObjectProvider<IType>(types));
80+
public TNextElement NotBeAssignableTo(params Type[] types) => NotBeAssignableTo(new SystemTypeObjectProvider<IType>(types));
7681
public TNextElement NotBeAssignableTo(IObjectProvider<IType> types) => CreateNextElement(TypeConditionsDefinition<TRuleType>.NotBeAssignableTo(types));
77-
public TNextElement NotBeAssignableTo(IEnumerable<IType> types) => CreateNextElement(TypeConditionsDefinition<TRuleType>.NotBeAssignableTo(types));
78-
public TNextElement NotBeAssignableTo(IEnumerable<Type> types) => CreateNextElement(TypeConditionsDefinition<TRuleType>.NotBeAssignableTo(types));
82+
public TNextElement NotBeAssignableTo(IEnumerable<IType> types) => NotBeAssignableTo(new ObjectProvider<IType>(types));
83+
public TNextElement NotBeAssignableTo(IEnumerable<Type> types) => NotBeAssignableTo(new SystemTypeObjectProvider<IType>(types));
7984

8085
public TNextElement NotBeValueTypes() => CreateNextElement(TypeConditionsDefinition<TRuleType>.NotBeValueTypes());
8186
public TNextElement NotBeEnums() => CreateNextElement(TypeConditionsDefinition<TRuleType>.NotBeEnums());

ArchUnitNET/Fluent/Syntax/Elements/Types/AddTypePredicate.cs

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,23 @@ internal AddTypePredicate(IArchRuleCreator<TRelatedType> archRuleCreator)
1414
: base(archRuleCreator) { }
1515

1616
// csharpier-ignore-start
17-
public TNextElement Are(Type firstType, params Type[] moreTypes) => CreateNextElement(TypePredicatesDefinition<TRuleType>.Are(firstType, moreTypes));
18-
public TNextElement Are(IEnumerable<Type> types) => CreateNextElement(TypePredicatesDefinition<TRuleType>.Are(types));
17+
public TNextElement Are(params Type[] types) => Are(new SystemTypeObjectProvider<IType>(types));
18+
public TNextElement Are(IEnumerable<Type> types) => Are(new SystemTypeObjectProvider<IType>(types));
19+
public TNextElement Are(IObjectProvider<IType> types) => CreateNextElement(TypePredicatesDefinition<TRuleType>.Are(types));
1920

20-
public TNextElement AreAssignableTo(IType firstType, params IType[] moreTypes) => CreateNextElement(TypePredicatesDefinition<TRuleType>.AreAssignableTo(firstType, moreTypes));
21-
public TNextElement AreAssignableTo(Type firstType, params Type[] moreTypes) => CreateNextElement(TypePredicatesDefinition<TRuleType>.AreAssignableTo(firstType, moreTypes));
21+
public TNextElement AreAssignableTo() => AreAssignableTo(new ObjectProvider<IType>());
22+
public TNextElement AreAssignableTo(params IType[] types) => AreAssignableTo(new ObjectProvider<IType>(types));
23+
public TNextElement AreAssignableTo(params Type[] types) => AreAssignableTo(new SystemTypeObjectProvider<IType>(types));
2224
public TNextElement AreAssignableTo(IObjectProvider<IType> types) => CreateNextElement(TypePredicatesDefinition<TRuleType>.AreAssignableTo(types));
23-
public TNextElement AreAssignableTo(IEnumerable<IType> types) => CreateNextElement(TypePredicatesDefinition<TRuleType>.AreAssignableTo(types));
24-
public TNextElement AreAssignableTo(IEnumerable<Type> types) => CreateNextElement(TypePredicatesDefinition<TRuleType>.AreAssignableTo(types));
25+
public TNextElement AreAssignableTo(IEnumerable<IType> types) => AreAssignableTo(new ObjectProvider<IType>(types));
26+
public TNextElement AreAssignableTo(IEnumerable<Type> types) => AreAssignableTo(new SystemTypeObjectProvider<IType>(types));
2527

26-
public TNextElement AreNestedIn(IType firstType, params IType[] moreTypes) => CreateNextElement(TypePredicatesDefinition<TRuleType>.AreNestedIn(firstType, moreTypes));
27-
public TNextElement AreNestedIn(Type firstType, params Type[] moreTypes) => CreateNextElement(TypePredicatesDefinition<TRuleType>.AreNestedIn(firstType, moreTypes));
28+
public TNextElement AreNestedIn() => AreNestedIn(new ObjectProvider<IType>());
29+
public TNextElement AreNestedIn(params IType[] types) => AreNestedIn(new ObjectProvider<IType>(types));
30+
public TNextElement AreNestedIn(params Type[] types) => AreNestedIn(new SystemTypeObjectProvider<IType>(types));
2831
public TNextElement AreNestedIn(IObjectProvider<IType> types) => CreateNextElement(TypePredicatesDefinition<TRuleType>.AreNestedIn(types));
29-
public TNextElement AreNestedIn(IEnumerable<IType> types) => CreateNextElement(TypePredicatesDefinition<TRuleType>.AreNestedIn(types));
30-
public TNextElement AreNestedIn(IEnumerable<Type> types) => CreateNextElement(TypePredicatesDefinition<TRuleType>.AreNestedIn(types));
32+
public TNextElement AreNestedIn(IEnumerable<IType> types) => AreNestedIn(new ObjectProvider<IType>(types));
33+
public TNextElement AreNestedIn(IEnumerable<Type> types) => AreNestedIn(new SystemTypeObjectProvider<IType>(types));
3134

3235
public TNextElement AreValueTypes() => CreateNextElement(TypePredicatesDefinition<TRuleType>.AreValueTypes());
3336
public TNextElement AreEnums() => CreateNextElement(TypePredicatesDefinition<TRuleType>.AreEnums());
@@ -60,14 +63,16 @@ internal AddTypePredicate(IArchRuleCreator<TRelatedType> archRuleCreator)
6063

6164
//Negations
6265

63-
public TNextElement AreNot(Type firstType, params Type[] moreTypes) => CreateNextElement(TypePredicatesDefinition<TRuleType>.AreNot(firstType, moreTypes));
64-
public TNextElement AreNot(IEnumerable<Type> types) => CreateNextElement(TypePredicatesDefinition<TRuleType>.AreNot(types));
66+
public TNextElement AreNot(params Type[] types) => AreNot(new SystemTypeObjectProvider<IType>(types));
67+
public TNextElement AreNot(IEnumerable<Type> types) => AreNot(new SystemTypeObjectProvider<IType>(types));
68+
public TNextElement AreNot(IObjectProvider<IType> types) => CreateNextElement(TypePredicatesDefinition<TRuleType>.AreNot(types));
6569

66-
public TNextElement AreNotAssignableTo(IType firstType, params IType[] moreTypes) => CreateNextElement(TypePredicatesDefinition<TRuleType>.AreNotAssignableTo(firstType, moreTypes));
67-
public TNextElement AreNotAssignableTo(Type firstType, params Type[] moreTypes) => CreateNextElement(TypePredicatesDefinition<TRuleType>.AreNotAssignableTo(firstType, moreTypes));
70+
public TNextElement AreNotAssignableTo() => AreNotAssignableTo(new ObjectProvider<IType>());
71+
public TNextElement AreNotAssignableTo(params IType[] types) => AreNotAssignableTo(new ObjectProvider<IType>(types));
72+
public TNextElement AreNotAssignableTo(params Type[] types) => AreNotAssignableTo(new SystemTypeObjectProvider<IType>(types));
6873
public TNextElement AreNotAssignableTo(IObjectProvider<IType> types) => CreateNextElement(TypePredicatesDefinition<TRuleType>.AreNotAssignableTo(types));
69-
public TNextElement AreNotAssignableTo(IEnumerable<IType> types) => CreateNextElement(TypePredicatesDefinition<TRuleType>.AreNotAssignableTo(types));
70-
public TNextElement AreNotAssignableTo(IEnumerable<Type> types) => CreateNextElement(TypePredicatesDefinition<TRuleType>.AreNotAssignableTo(types));
74+
public TNextElement AreNotAssignableTo(IEnumerable<IType> types) => AreNotAssignableTo(new ObjectProvider<IType>(types));
75+
public TNextElement AreNotAssignableTo(IEnumerable<Type> types) => AreNotAssignableTo(new SystemTypeObjectProvider<IType>(types));
7176

7277
public TNextElement AreNotValueTypes() => CreateNextElement(TypePredicatesDefinition<TRuleType>.AreNotValueTypes());
7378
public TNextElement AreNotEnums() => CreateNextElement(TypePredicatesDefinition<TRuleType>.AreNotEnums());

ArchUnitNET/Fluent/Syntax/Elements/Types/IAddTypeCondition.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@ public interface IAddTypeCondition<TNextElement, TRuleType>
1010
: IAddObjectCondition<TNextElement, TRuleType>
1111
where TRuleType : ICanBeAnalyzed
1212
{
13-
TNextElement Be(Type firstType, params Type[] moreTypes);
13+
TNextElement Be(params Type[] types);
1414
TNextElement Be(IEnumerable<Type> types);
1515

16-
TNextElement BeAssignableTo(IType firstType, params IType[] moreTypes);
17-
TNextElement BeAssignableTo(Type type, params Type[] moreTypes);
16+
TNextElement BeAssignableTo();
17+
TNextElement BeAssignableTo(params IType[] types);
18+
TNextElement BeAssignableTo(params Type[] types);
1819
TNextElement BeAssignableTo(IObjectProvider<IType> types);
1920
TNextElement BeAssignableTo(IEnumerable<IType> types);
2021
TNextElement BeAssignableTo(IEnumerable<Type> types);
@@ -55,11 +56,12 @@ params Domain.Assembly[] moreAssemblies
5556

5657
//Negations
5758

58-
TNextElement NotBe(Type firstType, params Type[] moreTypes);
59+
TNextElement NotBe(params Type[] types);
5960
TNextElement NotBe(IEnumerable<Type> types);
6061

61-
TNextElement NotBeAssignableTo(IType type, params IType[] moreTypes);
62-
TNextElement NotBeAssignableTo(Type type, params Type[] moreTypes);
62+
TNextElement NotBeAssignableTo();
63+
TNextElement NotBeAssignableTo(params IType[] types);
64+
TNextElement NotBeAssignableTo(params Type[] types);
6365
TNextElement NotBeAssignableTo(IObjectProvider<IType> types);
6466
TNextElement NotBeAssignableTo(IEnumerable<IType> types);
6567
TNextElement NotBeAssignableTo(IEnumerable<Type> types);

ArchUnitNET/Fluent/Syntax/Elements/Types/IAddTypePredicate.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ public interface IAddTypePredicate<out TNextElement, TRuleType>
99
: IAddObjectPredicate<TNextElement, TRuleType>
1010
where TRuleType : ICanBeAnalyzed
1111
{
12-
TNextElement Are(Type firstType, params Type[] moreTypes);
12+
TNextElement Are(params Type[] types);
1313
TNextElement Are(IEnumerable<Type> types);
1414

15-
TNextElement AreAssignableTo(IType firstType, params IType[] moreTypes);
16-
TNextElement AreAssignableTo(Type type, params Type[] moreTypes);
15+
TNextElement AreAssignableTo();
16+
TNextElement AreAssignableTo(params IType[] types);
17+
TNextElement AreAssignableTo(params Type[] types);
1718
TNextElement AreAssignableTo(IObjectProvider<IType> types);
1819
TNextElement AreAssignableTo(IEnumerable<IType> types);
1920
TNextElement AreAssignableTo(IEnumerable<Type> types);
@@ -49,11 +50,12 @@ params Domain.Assembly[] moreAssemblies
4950

5051
//Negations
5152

52-
TNextElement AreNot(Type firstType, params Type[] moreTypes);
53+
TNextElement AreNot(params Type[] types);
5354
TNextElement AreNot(IEnumerable<Type> types);
5455

55-
TNextElement AreNotAssignableTo(IType type, params IType[] moreTypes);
56-
TNextElement AreNotAssignableTo(Type type, params Type[] moreTypes);
56+
TNextElement AreNotAssignableTo();
57+
TNextElement AreNotAssignableTo(params IType[] types);
58+
TNextElement AreNotAssignableTo(params Type[] types);
5759
TNextElement AreNotAssignableTo(IObjectProvider<IType> types);
5860
TNextElement AreNotAssignableTo(IEnumerable<IType> types);
5961
TNextElement AreNotAssignableTo(IEnumerable<Type> types);

0 commit comments

Comments
 (0)