Skip to content

Commit 16ce464

Browse files
committed
Switch all remaining models to EquatableArray<T>
1 parent a175b8e commit 16ce464

File tree

6 files changed

+9
-93
lines changed

6 files changed

+9
-93
lines changed

CommunityToolkit.Mvvm.SourceGenerators/ComponentModel/ObservablePropertyGenerator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
5050
.Where(static item => item.Hierarchy is not null);
5151

5252
// Output the diagnostics
53-
context.ReportDiagnostics(propertyInfoWithErrors.Select(static (item, _) => item.Info.Errors));
53+
context.ReportDiagnostics(propertyInfoWithErrors.Select(static (item, _) => item.Info.Errors.AsImmutableArray()));
5454

5555
// Get the filtered sequence to enable caching
5656
IncrementalValuesProvider<(HierarchyInfo Hierarchy, Result<PropertyInfo> Info)> propertyInfo =
@@ -60,8 +60,8 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
6060
// Split and group by containing type
6161
IncrementalValuesProvider<(HierarchyInfo Hierarchy, ImmutableArray<PropertyInfo> Properties)> groupedPropertyInfo =
6262
propertyInfo
63-
.GroupBy(HierarchyInfo.Comparer.Default, static item => item.Value)
64-
.WithComparers(HierarchyInfo.Comparer.Default, EqualityComparer<PropertyInfo>.Default.ForImmutableArray());
63+
.GroupBy(EqualityComparer<HierarchyInfo>.Default, static item => item.Value)
64+
.WithComparers(EqualityComparer<HierarchyInfo>.Default, EqualityComparer<PropertyInfo>.Default.ForImmutableArray());
6565

6666
// Generate the requested properties and methods
6767
context.RegisterSourceOutput(groupedPropertyInfo, static (context, item) =>

CommunityToolkit.Mvvm.SourceGenerators/ComponentModel/TransitiveMembersGenerator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
9292
.Where(static item => item is not null)!;
9393

9494
// Emit the diagnostic, if needed
95-
context.ReportDiagnostics(generationInfoWithErrors.Select(static (item, _) => item.Errors));
95+
context.ReportDiagnostics(generationInfoWithErrors.Select(static (item, _) => item.Errors.AsImmutableArray()));
9696

9797
// Get the filtered sequence to enable caching
9898
IncrementalValuesProvider<(HierarchyInfo Hierarchy, bool IsSealed, TInfo Info)> generationInfo =

CommunityToolkit.Mvvm.SourceGenerators/Input/RelayCommandGenerator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
4848
.Where(static item => item.Hierarchy is not null)!;
4949

5050
// Output the diagnostics
51-
context.ReportDiagnostics(commandInfoWithErrors.Select(static (item, _) => item.Info.Errors));
51+
context.ReportDiagnostics(commandInfoWithErrors.Select(static (item, _) => item.Info.Errors.AsImmutableArray()));
5252

5353
// Get the filtered sequence to enable caching
5454
IncrementalValuesProvider<(HierarchyInfo Hierarchy, Result<CommandInfo> Info)> commandInfo =

CommunityToolkit.Mvvm.SourceGenerators/Models/DiagnosticInfo.cs

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,8 @@ internal sealed record DiagnosticInfo(
2727
DiagnosticDescriptor Descriptor,
2828
SyntaxTree? SyntaxTree,
2929
TextSpan TextSpan,
30-
ImmutableArray<string> Arguments)
30+
EquatableArray<string> Arguments)
3131
{
32-
/// <inheritdoc/>
33-
public bool Equals(DiagnosticInfo? obj) => Comparer.Default.Equals(this, obj);
34-
35-
/// <inheritdoc/>
36-
public override int GetHashCode() => Comparer.Default.GetHashCode(this);
37-
3832
/// <summary>
3933
/// Creates a new <see cref="Diagnostic"/> instance with the state from this model.
4034
/// </summary>
@@ -76,29 +70,4 @@ public static DiagnosticInfo Create(DiagnosticDescriptor descriptor, SyntaxNode
7670

7771
return new(descriptor, location.SourceTree, location.SourceSpan, args.Select(static arg => arg.ToString()).ToImmutableArray());
7872
}
79-
80-
/// <summary>
81-
/// An <see cref="IEqualityComparer{T}"/> implementation for <see cref="DiagnosticInfo"/>.
82-
/// </summary>
83-
private sealed class Comparer : Comparer<DiagnosticInfo, Comparer>
84-
{
85-
/// <inheritdoc/>
86-
protected override void AddToHashCode(ref HashCode hashCode, DiagnosticInfo obj)
87-
{
88-
hashCode.Add(obj.Descriptor);
89-
hashCode.Add(obj.SyntaxTree);
90-
hashCode.Add(obj.TextSpan);
91-
hashCode.AddRange(obj.Arguments);
92-
}
93-
94-
/// <inheritdoc/>
95-
protected override bool AreEqual(DiagnosticInfo x, DiagnosticInfo y)
96-
{
97-
return
98-
x.Descriptor.Equals(y.Descriptor) &&
99-
x.SyntaxTree == y.SyntaxTree &&
100-
x.TextSpan.Equals(y.TextSpan) &&
101-
x.Arguments.SequenceEqual(y.Arguments);
102-
}
103-
}
10473
}

CommunityToolkit.Mvvm.SourceGenerators/Models/HierarchyInfo.cs

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ namespace CommunityToolkit.Mvvm.SourceGenerators.Models;
2323
/// <param name="MetadataName">The metadata name for the current type.</param>
2424
/// <param name="Namespace">Gets the namespace for the current type.</param>
2525
/// <param name="Hierarchy">Gets the sequence of type definitions containing the current type.</param>
26-
internal sealed partial record HierarchyInfo(string FilenameHint, string MetadataName, string Namespace, ImmutableArray<TypeInfo> Hierarchy)
26+
internal sealed partial record HierarchyInfo(string FilenameHint, string MetadataName, string Namespace, EquatableArray<TypeInfo> Hierarchy)
2727
{
2828
/// <summary>
2929
/// Creates a new <see cref="HierarchyInfo"/> instance from a given <see cref="INamedTypeSymbol"/>.
@@ -50,29 +50,4 @@ public static HierarchyInfo From(INamedTypeSymbol typeSymbol)
5050
typeSymbol.ContainingNamespace.ToDisplayString(new(typeQualificationStyle: NameAndContainingTypesAndNamespaces)),
5151
hierarchy.ToImmutable());
5252
}
53-
54-
/// <summary>
55-
/// An <see cref="IEqualityComparer{T}"/> implementation for <see cref="HierarchyInfo"/>.
56-
/// </summary>
57-
public sealed class Comparer : Comparer<HierarchyInfo, Comparer>
58-
{
59-
/// <inheritdoc/>
60-
protected override void AddToHashCode(ref HashCode hashCode, HierarchyInfo obj)
61-
{
62-
hashCode.Add(obj.FilenameHint);
63-
hashCode.Add(obj.MetadataName);
64-
hashCode.Add(obj.Namespace);
65-
hashCode.AddRange(obj.Hierarchy);
66-
}
67-
68-
/// <inheritdoc/>
69-
protected override bool AreEqual(HierarchyInfo x, HierarchyInfo y)
70-
{
71-
return
72-
x.FilenameHint == y.FilenameHint &&
73-
x.MetadataName == y.MetadataName &&
74-
x.Namespace == y.Namespace &&
75-
x.Hierarchy.SequenceEqual(y.Hierarchy);
76-
}
77-
}
7853
}

CommunityToolkit.Mvvm.SourceGenerators/Models/Result.cs

Lines changed: 2 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -20,33 +20,5 @@ namespace CommunityToolkit.Mvvm.SourceGenerators.Models;
2020
/// <typeparam name="TValue">The type of the wrapped value.</typeparam>
2121
/// <param name="Value">The wrapped value for the current result.</param>
2222
/// <param name="Errors">The associated diagnostic errors, if any.</param>
23-
internal sealed record Result<TValue>(TValue Value, ImmutableArray<DiagnosticInfo> Errors)
24-
where TValue : IEquatable<TValue>?
25-
{
26-
/// <inheritdoc/>
27-
public bool Equals(Result<TValue>? obj) => Comparer.Default.Equals(this, obj);
28-
29-
/// <inheritdoc/>
30-
public override int GetHashCode() => Comparer.Default.GetHashCode(this);
31-
32-
/// <summary>
33-
/// An <see cref="IEqualityComparer{T}"/> implementation for <see cref="Result{TValue}"/>.
34-
/// </summary>
35-
private sealed class Comparer : Comparer<Result<TValue>, Comparer>
36-
{
37-
/// <inheritdoc/>
38-
protected override void AddToHashCode(ref HashCode hashCode, Result<TValue> obj)
39-
{
40-
hashCode.Add(obj.Value);
41-
hashCode.AddRange(obj.Errors);
42-
}
43-
44-
/// <inheritdoc/>
45-
protected override bool AreEqual(Result<TValue> x, Result<TValue> y)
46-
{
47-
return
48-
EqualityComparer<TValue>.Default.Equals(x.Value, y.Value) &&
49-
x.Errors.SequenceEqual(y.Errors);
50-
}
51-
}
52-
}
23+
internal sealed record Result<TValue>(TValue Value, EquatableArray<DiagnosticInfo> Errors)
24+
where TValue : IEquatable<TValue>?;

0 commit comments

Comments
 (0)