Skip to content

Commit ff4cb35

Browse files
committed
Remove custom comparers in transitive members generator
1 parent ed734c7 commit ff4cb35

File tree

3 files changed

+8
-89
lines changed

3 files changed

+8
-89
lines changed

CommunityToolkit.Mvvm.SourceGenerators/ComponentModel/ObservableObjectGenerator.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ namespace CommunityToolkit.Mvvm.SourceGenerators;
1616
/// A source generator for the <c>ObservableObjectAttribute</c> type.
1717
/// </summary>
1818
[Generator(LanguageNames.CSharp)]
19-
public sealed class ObservableObjectGenerator : TransitiveMembersGenerator<object?>
19+
public sealed class ObservableObjectGenerator : TransitiveMembersGenerator<int>
2020
{
2121
/// <summary>
2222
/// Initializes a new instance of the <see cref="ObservableObjectGenerator"/> class.
@@ -27,7 +27,7 @@ public ObservableObjectGenerator()
2727
}
2828

2929
/// <inheritdoc/>
30-
private protected override object? ValidateTargetTypeAndGetInfo(INamedTypeSymbol typeSymbol, AttributeData attributeData, Compilation compilation, out ImmutableArray<DiagnosticInfo> diagnostics)
30+
private protected override int ValidateTargetTypeAndGetInfo(INamedTypeSymbol typeSymbol, AttributeData attributeData, Compilation compilation, out ImmutableArray<DiagnosticInfo> diagnostics)
3131
{
3232
diagnostics = ImmutableArray<DiagnosticInfo>.Empty;
3333

@@ -57,11 +57,11 @@ public ObservableObjectGenerator()
5757
}
5858

5959
End:
60-
return null;
60+
return 0;
6161
}
6262

6363
/// <inheritdoc/>
64-
protected override ImmutableArray<MemberDeclarationSyntax> FilterDeclaredMembers(object? info, ImmutableArray<MemberDeclarationSyntax> memberDeclarations)
64+
protected override ImmutableArray<MemberDeclarationSyntax> FilterDeclaredMembers(int info, ImmutableArray<MemberDeclarationSyntax> memberDeclarations)
6565
{
6666
return memberDeclarations;
6767
}

CommunityToolkit.Mvvm.SourceGenerators/ComponentModel/TransitiveMembersGenerator.cs

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33
// See the LICENSE file in the project root for more information.
44

5+
using System;
56
using System.Collections.Generic;
67
using System.Collections.Immutable;
78
using System.Linq;
@@ -19,20 +20,13 @@ namespace CommunityToolkit.Mvvm.SourceGenerators;
1920
/// </summary>
2021
/// <typeparam name="TInfo">The type of info gathered for each target type to process.</typeparam>
2122
public abstract partial class TransitiveMembersGenerator<TInfo> : IIncrementalGenerator
23+
where TInfo : IEquatable<TInfo>
2224
{
2325
/// <summary>
2426
/// The fully qualified metadata name of the attribute type to look for.
2527
/// </summary>
2628
private readonly string fullyQualifiedAttributeMetadataName;
2729

28-
/// <summary>
29-
/// An <see cref="IEqualityComparer{T}"/> instance to compare intermediate models.
30-
/// </summary>
31-
/// <remarks>
32-
/// This is needed to cache extracted info on attributes used to annotate target types.
33-
/// </remarks>
34-
private readonly IEqualityComparer<TInfo> comparer;
35-
3630
/// <summary>
3731
/// The preloaded <see cref="ClassDeclarationSyntax"/> instance with members to generate.
3832
/// </summary>
@@ -52,11 +46,9 @@ public abstract partial class TransitiveMembersGenerator<TInfo> : IIncrementalGe
5246
/// Initializes a new instance of the <see cref="TransitiveMembersGenerator{TInfo}"/> class.
5347
/// </summary>
5448
/// <param name="fullyQualifiedAttributeMetadataName">The fully qualified metadata name of the attribute type to look for.</param>
55-
/// <param name="comparer">An <see cref="IEqualityComparer{T}"/> instance to compare intermediate models.</param>
56-
private protected TransitiveMembersGenerator(string fullyQualifiedAttributeMetadataName, IEqualityComparer<TInfo>? comparer = null)
49+
private protected TransitiveMembersGenerator(string fullyQualifiedAttributeMetadataName)
5750
{
5851
this.fullyQualifiedAttributeMetadataName = fullyQualifiedAttributeMetadataName;
59-
this.comparer = comparer ?? EqualityComparer<TInfo>.Default;
6052
this.classDeclaration = Execute.LoadClassDeclaration(fullyQualifiedAttributeMetadataName);
6153

6254
Execute.ProcessMemberDeclarations(
@@ -106,8 +98,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
10698
IncrementalValuesProvider<(HierarchyInfo Hierarchy, bool IsSealed, TInfo Info)> generationInfo =
10799
generationInfoWithErrors
108100
.Where(static item => item.Errors.IsEmpty)
109-
.Select(static (item, _) => item.Value)!
110-
.WithComparers(HierarchyInfo.Comparer.Default, EqualityComparer<bool>.Default, this.comparer);
101+
.Select(static (item, _) => item.Value)!;
111102

112103
// Generate the required members
113104
context.RegisterSourceOutput(generationInfo, (context, item) =>

CommunityToolkit.Mvvm.SourceGenerators/Extensions/IncrementalValuesProviderExtensions.cs

Lines changed: 0 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -77,26 +77,6 @@ internal static class IncrementalValuesProviderExtensions
7777
return source.WithComparer(new Comparer<TLeft, TRight>(comparerLeft, comparerRight));
7878
}
7979

80-
/// <summary>
81-
/// Creates a new <see cref="IncrementalValuesProvider{TValues}"/> instance with a given pair of comparers.
82-
/// </summary>
83-
/// <typeparam name="T1">The type of first items in each tuple.</typeparam>
84-
/// <typeparam name="T2">The type of second items in each tuple.</typeparam>
85-
/// <typeparam name="T3">The type of third items in each tuple.</typeparam>
86-
/// <param name="source">The input <see cref="IncrementalValuesProvider{TValues}"/> instance.</param>
87-
/// <param name="comparer1">An <see cref="IEqualityComparer{T}"/> instance for <typeparamref name="T1"/> items.</param>
88-
/// <param name="comparer2">An <see cref="IEqualityComparer{T}"/> instance for <typeparamref name="T2"/> items.</param>
89-
/// <param name="comparer3">An <see cref="IEqualityComparer{T}"/> instance for <typeparamref name="T3"/> items.</param>
90-
/// <returns>An <see cref="IncrementalValuesProvider{TValues}"/> with the specified comparers applied to each item.</returns>
91-
public static IncrementalValuesProvider<(T1, T2, T3)> WithComparers<T1, T2, T3>(
92-
this IncrementalValuesProvider<(T1, T2, T3)> source,
93-
IEqualityComparer<T1> comparer1,
94-
IEqualityComparer<T2> comparer2,
95-
IEqualityComparer<T3> comparer3)
96-
{
97-
return source.WithComparer(new Comparer<T1, T2, T3>(comparer1, comparer2, comparer3));
98-
}
99-
10080
/// <summary>
10181
/// An <see cref="IEqualityComparer{T}"/> implementation for a value tuple.
10282
/// </summary>
@@ -139,56 +119,4 @@ public int GetHashCode((TLeft Left, TRight Right) obj)
139119
this.comparerRight.GetHashCode(obj.Right));
140120
}
141121
}
142-
143-
/// <summary>
144-
/// An <see cref="IEqualityComparer{T}"/> implementation for a value tuple.
145-
/// </summary>
146-
private sealed class Comparer<T1, T2, T3> : IEqualityComparer<(T1, T2, T3)>
147-
{
148-
/// <summary>
149-
/// The <typeparamref name="T1"/> comparer.
150-
/// </summary>
151-
private readonly IEqualityComparer<T1> comparer1;
152-
153-
/// <summary>
154-
/// The <typeparamref name="T2"/> comparer.
155-
/// </summary>
156-
private readonly IEqualityComparer<T2> comparer2;
157-
158-
/// <summary>
159-
/// The <typeparamref name="T3"/> comparer.
160-
/// </summary>
161-
private readonly IEqualityComparer<T3> comparer3;
162-
163-
/// <summary>
164-
/// Creates a new <see cref="Comparer{T1, T2, T3}"/> instance with the specified parameters.
165-
/// </summary>
166-
/// <param name="comparer1">The <typeparamref name="T1"/> comparer.</param>
167-
/// <param name="comparer2">The <typeparamref name="T2"/> comparer.</param>
168-
/// <param name="comparer3">The <typeparamref name="T3"/> comparer.</param>
169-
public Comparer(IEqualityComparer<T1> comparer1, IEqualityComparer<T2> comparer2, IEqualityComparer<T3> comparer3)
170-
{
171-
this.comparer1 = comparer1;
172-
this.comparer2 = comparer2;
173-
this.comparer3 = comparer3;
174-
}
175-
176-
/// <inheritdoc/>
177-
public bool Equals((T1, T2, T3) x, (T1, T2, T3) y)
178-
{
179-
return
180-
this.comparer1.Equals(x.Item1, y.Item1) &&
181-
this.comparer2.Equals(x.Item2, y.Item2) &&
182-
this.comparer3.Equals(x.Item3, y.Item3);
183-
}
184-
185-
/// <inheritdoc/>
186-
public int GetHashCode((T1, T2, T3) obj)
187-
{
188-
return HashCode.Combine(
189-
this.comparer1.GetHashCode(obj.Item1),
190-
this.comparer2.GetHashCode(obj.Item2),
191-
this.comparer3.GetHashCode(obj.Item3));
192-
}
193-
}
194122
}

0 commit comments

Comments
 (0)