Skip to content

Commit 9c86eb7

Browse files
committed
fix: behaviour of IgnoreInheritedMembers
1 parent 2d3c189 commit 9c86eb7

133 files changed

Lines changed: 2015 additions & 1669 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Generator.Equals.Runtime/Attributes.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,14 @@ public class EquatableAttribute : Attribute
1515
public bool Explicit { get; set; }
1616

1717
/// <summary>
18-
/// When true, the generated Equals method will not call base.Equals(),
19-
/// treating this type as an equality root. Only properties defined
20-
/// directly on this type will be compared.
18+
/// When true, only members declared directly on this type are compared,
19+
/// treating this type as an equality root. No base.Equals() call is made
20+
/// and inherited members are not included.
21+
/// When false (default) and any ancestor has [Equatable], base.Equals() is called.
22+
/// When false and NO ancestor has [Equatable], all inherited members from the
23+
/// entire inheritance chain are explicitly compared.
2124
/// </summary>
22-
public bool SkipBaseEquals { get; set; }
25+
public bool IgnoreInheritedMembers { get; set; }
2326
}
2427

2528
[GeneratedCode("Generator.Equals", "1.0.0.0")]

Generator.Equals.Tests/Classes/BaseEqualityTests.cs

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -65,31 +65,31 @@ public void PersonEquality(Person a, Person b, bool expected) =>
6565
public Task VerifyGeneratedCode(TargetFramework fw) =>
6666
VerifyGeneratedSource(SampleSource, fw);
6767

68-
private const string SampleSource = """
69-
using Generator.Equals;
70-
71-
namespace Generator.Equals.Tests.Classes;
72-
73-
[Equatable]
74-
public partial class BaseEqualityPerson
75-
{
76-
public BaseEqualityPerson(int age)
77-
{
78-
Age = age;
79-
}
80-
81-
public int Age { get; }
82-
}
83-
84-
[Equatable]
85-
public partial class BaseEqualityManager : BaseEqualityPerson
86-
{
87-
public BaseEqualityManager(int age, string department) : base(age)
88-
{
89-
Department = department;
90-
}
91-
92-
public string Department { get; }
93-
}
94-
""";
68+
const string SampleSource = """
69+
using Generator.Equals;
70+
71+
namespace Generator.Equals.Tests.Classes;
72+
73+
[Equatable]
74+
public partial class BaseEqualityPerson
75+
{
76+
public BaseEqualityPerson(int age)
77+
{
78+
Age = age;
79+
}
80+
81+
public int Age { get; }
82+
}
83+
84+
[Equatable]
85+
public partial class BaseEqualityManager : BaseEqualityPerson
86+
{
87+
public BaseEqualityManager(int age, string department) : base(age)
88+
{
89+
Department = department;
90+
}
91+
92+
public string Department { get; }
93+
}
94+
""";
9595
}

Generator.Equals.Tests/Classes/CustomEqualityTests.cs

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -60,41 +60,41 @@ public void Equality(Sample a, Sample b, bool expected) =>
6060
public Task VerifyGeneratedCode(TargetFramework fw) =>
6161
VerifyGeneratedSource(SampleSource, fw);
6262

63-
private const string SampleSource = """
64-
using System.Collections.Generic;
65-
using Generator.Equals;
66-
67-
namespace Generator.Equals.Tests.Classes;
68-
69-
[Equatable]
70-
public partial class CustomEqualitySample
71-
{
72-
public CustomEqualitySample(string name1, string name2, string name3)
73-
{
74-
Name1 = name1;
75-
Name2 = name2;
76-
Name3 = name3;
77-
}
78-
79-
[CustomEquality(typeof(Comparer1))] public string Name1 { get; }
80-
[CustomEquality(typeof(Comparer2), nameof(Comparer2.Instance))] public string Name2 { get; }
81-
[CustomEquality(typeof(CustomLengthEqualityComparer))] public string Name3 { get; }
82-
}
83-
84-
class Comparer1
85-
{
86-
public static readonly CustomLengthEqualityComparer Default = new();
87-
}
88-
89-
class Comparer2
90-
{
91-
public static readonly CustomLengthEqualityComparer Instance = new();
92-
}
93-
94-
class CustomLengthEqualityComparer : IEqualityComparer<string>
95-
{
96-
public bool Equals(string? x, string? y) => x?.Length == y?.Length;
97-
public int GetHashCode(string obj) => obj.Length.GetHashCode();
98-
}
99-
""";
63+
const string SampleSource = """
64+
using System.Collections.Generic;
65+
using Generator.Equals;
66+
67+
namespace Generator.Equals.Tests.Classes;
68+
69+
[Equatable]
70+
public partial class CustomEqualitySample
71+
{
72+
public CustomEqualitySample(string name1, string name2, string name3)
73+
{
74+
Name1 = name1;
75+
Name2 = name2;
76+
Name3 = name3;
77+
}
78+
79+
[CustomEquality(typeof(Comparer1))] public string Name1 { get; }
80+
[CustomEquality(typeof(Comparer2), nameof(Comparer2.Instance))] public string Name2 { get; }
81+
[CustomEquality(typeof(CustomLengthEqualityComparer))] public string Name3 { get; }
82+
}
83+
84+
class Comparer1
85+
{
86+
public static readonly CustomLengthEqualityComparer Default = new();
87+
}
88+
89+
class Comparer2
90+
{
91+
public static readonly CustomLengthEqualityComparer Instance = new();
92+
}
93+
94+
class CustomLengthEqualityComparer : IEqualityComparer<string>
95+
{
96+
public bool Equals(string? x, string? y) => x?.Length == y?.Length;
97+
public int GetHashCode(string obj) => obj.Length.GetHashCode();
98+
}
99+
""";
100100
}

Generator.Equals.Tests/Classes/DeepEqualityTests.cs

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -61,42 +61,42 @@ public void Equality(Sample a, Sample b, bool expected) =>
6161
public Task VerifyGeneratedCode(TargetFramework fw) =>
6262
VerifyGeneratedSource(SampleSource, fw);
6363

64-
private const string SampleSource = """
65-
using Generator.Equals;
66-
67-
namespace Generator.Equals.Tests.Classes;
68-
69-
[Equatable]
70-
public partial class DeepEqualitySample
71-
{
72-
public DeepEqualitySample(DeepEqualityPerson person)
73-
{
74-
Person = person;
75-
}
76-
77-
public DeepEqualityPerson Person { get; }
78-
}
79-
80-
[Equatable]
81-
public partial class DeepEqualityPerson
82-
{
83-
public DeepEqualityPerson(int age)
84-
{
85-
Age = age;
86-
}
87-
88-
public int Age { get; }
89-
}
90-
91-
[Equatable]
92-
public partial class DeepEqualityManager : DeepEqualityPerson
93-
{
94-
public DeepEqualityManager(int age, string department) : base(age)
95-
{
96-
Department = department;
97-
}
98-
99-
public string Department { get; }
100-
}
101-
""";
64+
const string SampleSource = """
65+
using Generator.Equals;
66+
67+
namespace Generator.Equals.Tests.Classes;
68+
69+
[Equatable]
70+
public partial class DeepEqualitySample
71+
{
72+
public DeepEqualitySample(DeepEqualityPerson person)
73+
{
74+
Person = person;
75+
}
76+
77+
public DeepEqualityPerson Person { get; }
78+
}
79+
80+
[Equatable]
81+
public partial class DeepEqualityPerson
82+
{
83+
public DeepEqualityPerson(int age)
84+
{
85+
Age = age;
86+
}
87+
88+
public int Age { get; }
89+
}
90+
91+
[Equatable]
92+
public partial class DeepEqualityManager : DeepEqualityPerson
93+
{
94+
public DeepEqualityManager(int age, string department) : base(age)
95+
{
96+
Department = department;
97+
}
98+
99+
public string Department { get; }
100+
}
101+
""";
102102
}

Generator.Equals.Tests/Classes/DictionaryEqualityTests.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -77,16 +77,16 @@ public void Equality(Sample a, Sample b, bool expected) =>
7777
public Task VerifyGeneratedCode(TargetFramework fw) =>
7878
VerifyGeneratedSource(SampleSource, fw);
7979

80-
private const string SampleSource = """
81-
using System.Collections.Generic;
82-
using Generator.Equals;
80+
const string SampleSource = """
81+
using System.Collections.Generic;
82+
using Generator.Equals;
8383
84-
namespace Generator.Equals.Tests.Classes;
84+
namespace Generator.Equals.Tests.Classes;
8585
86-
[Equatable]
87-
public partial class DictionaryEqualitySample
88-
{
89-
[UnorderedEquality] public Dictionary<string, int>? Properties { get; set; }
90-
}
91-
""";
86+
[Equatable]
87+
public partial class DictionaryEqualitySample
88+
{
89+
[UnorderedEquality] public Dictionary<string, int>? Properties { get; set; }
90+
}
91+
""";
9292
}

Generator.Equals.Tests/Classes/EnumerableEqualityTests.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -58,16 +58,16 @@ public void Equality(Sample a, Sample b, bool expected) =>
5858
public Task VerifyGeneratedCode(TargetFramework fw) =>
5959
VerifyGeneratedSource(SampleSource, fw);
6060

61-
private const string SampleSource = """
62-
using System.Collections.Generic;
63-
using Generator.Equals;
61+
const string SampleSource = """
62+
using System.Collections.Generic;
63+
using Generator.Equals;
6464
65-
namespace Generator.Equals.Tests.Classes;
65+
namespace Generator.Equals.Tests.Classes;
6666
67-
[Equatable]
68-
public partial class EnumerableEqualitySample
69-
{
70-
[UnorderedEquality] public IEnumerable<int>? Properties { get; set; }
71-
}
72-
""";
67+
[Equatable]
68+
public partial class EnumerableEqualitySample
69+
{
70+
[UnorderedEquality] public IEnumerable<int>? Properties { get; set; }
71+
}
72+
""";
7373
}

Generator.Equals.Tests/Classes/ExplicitModeTests.cs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -45,27 +45,27 @@ public void Equality(Sample a, Sample b, bool expected) =>
4545
public Task VerifyGeneratedCode(TargetFramework fw) =>
4646
VerifyGeneratedSource(SampleSource, fw);
4747

48-
private const string SampleSource = """
49-
using Generator.Equals;
48+
const string SampleSource = """
49+
using Generator.Equals;
5050
51-
namespace Generator.Equals.Tests.Classes;
51+
namespace Generator.Equals.Tests.Classes;
5252
53-
[Equatable(Explicit = true)]
54-
public partial class ExplicitModeSample
55-
{
56-
bool _flag;
53+
[Equatable(Explicit = true)]
54+
public partial class ExplicitModeSample
55+
{
56+
bool _flag;
5757
58-
public ExplicitModeSample(string name, int age, bool flag)
59-
{
60-
_flag = flag;
61-
Name = name;
62-
Age = age;
63-
}
58+
public ExplicitModeSample(string name, int age, bool flag)
59+
{
60+
_flag = flag;
61+
Name = name;
62+
Age = age;
63+
}
6464
65-
public string Name { get; }
65+
public string Name { get; }
6666
67-
[DefaultEquality]
68-
public int Age { get; }
69-
}
70-
""";
67+
[DefaultEquality]
68+
public int Age { get; }
69+
}
70+
""";
7171
}

Generator.Equals.Tests/Classes/FieldEqualityTests.cs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -40,20 +40,20 @@ public void Equality(Sample a, Sample b, bool expected) =>
4040
public Task VerifyGeneratedCode(TargetFramework fw) =>
4141
VerifyGeneratedSource(SampleSource, fw);
4242

43-
private const string SampleSource = """
44-
using Generator.Equals;
45-
46-
namespace Generator.Equals.Tests.Classes;
47-
48-
[Equatable]
49-
public partial class FieldEqualitySample
50-
{
51-
public FieldEqualitySample(string[] addresses)
52-
{
53-
_addresses = addresses;
54-
}
55-
56-
[OrderedEquality] readonly string[] _addresses;
57-
}
58-
""";
43+
const string SampleSource = """
44+
using Generator.Equals;
45+
46+
namespace Generator.Equals.Tests.Classes;
47+
48+
[Equatable]
49+
public partial class FieldEqualitySample
50+
{
51+
public FieldEqualitySample(string[] addresses)
52+
{
53+
_addresses = addresses;
54+
}
55+
56+
[OrderedEquality] readonly string[] _addresses;
57+
}
58+
""";
5959
}

0 commit comments

Comments
 (0)