Skip to content

Commit c40bf81

Browse files
committed
Replace Diagnostic uses with DiagnosticInfo
1 parent d6bc11f commit c40bf81

12 files changed

+110
-78
lines changed

CommunityToolkit.Mvvm.SourceGenerators/CommunityToolkit.Mvvm.SourceGenerators.projitems

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,10 @@
5454
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\Analyzers\UnsupportedCSharpLanguageVersionAnalyzer.cs" />
5555
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\Suppressors\ObservablePropertyAttributeWithPropertyTargetDiagnosticSuppressor.cs" />
5656
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\DiagnosticDescriptors.cs" />
57-
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\DiagnosticExtensions.cs" />
5857
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\SuppressionDescriptors.cs" />
5958
<Compile Include="$(MSBuildThisFileDirectory)Extensions\AttributeDataExtensions.cs" />
6059
<Compile Include="$(MSBuildThisFileDirectory)Extensions\CompilationExtensions.cs" />
60+
<Compile Include="$(MSBuildThisFileDirectory)Extensions\DiagnosticsExtensions.cs" />
6161
<Compile Include="$(MSBuildThisFileDirectory)Extensions\HashCodeExtensions.cs" />
6262
<Compile Include="$(MSBuildThisFileDirectory)Extensions\IEqualityComparerExtensions.cs" />
6363
<Compile Include="$(MSBuildThisFileDirectory)Extensions\INamedTypeSymbolExtensions.cs" />

CommunityToolkit.Mvvm.SourceGenerators/ComponentModel/INotifyPropertyChangedGenerator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
using System.Collections.Immutable;
66
using System.Linq;
7-
using CommunityToolkit.Mvvm.SourceGenerators.Diagnostics;
87
using CommunityToolkit.Mvvm.SourceGenerators.Extensions;
98
using CommunityToolkit.Mvvm.SourceGenerators.Input.Models;
9+
using CommunityToolkit.Mvvm.SourceGenerators.Models;
1010
using Microsoft.CodeAnalysis;
1111
using Microsoft.CodeAnalysis.CSharp.Syntax;
1212
using static CommunityToolkit.Mvvm.SourceGenerators.Diagnostics.DiagnosticDescriptors;
@@ -28,9 +28,9 @@ public INotifyPropertyChangedGenerator()
2828
}
2929

3030
/// <inheritdoc/>
31-
protected override INotifyPropertyChangedInfo? ValidateTargetTypeAndGetInfo(INamedTypeSymbol typeSymbol, AttributeData attributeData, Compilation compilation, out ImmutableArray<Diagnostic> diagnostics)
31+
private protected override INotifyPropertyChangedInfo? ValidateTargetTypeAndGetInfo(INamedTypeSymbol typeSymbol, AttributeData attributeData, Compilation compilation, out ImmutableArray<DiagnosticInfo> diagnostics)
3232
{
33-
ImmutableArray<Diagnostic>.Builder builder = ImmutableArray.CreateBuilder<Diagnostic>();
33+
ImmutableArray<DiagnosticInfo>.Builder builder = ImmutableArray.CreateBuilder<DiagnosticInfo>();
3434

3535
INotifyPropertyChangedInfo? info = null;
3636

CommunityToolkit.Mvvm.SourceGenerators/ComponentModel/ObservableObjectGenerator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44

55
using System.Collections.Immutable;
66
using System.Linq;
7-
using CommunityToolkit.Mvvm.SourceGenerators.Diagnostics;
87
using CommunityToolkit.Mvvm.SourceGenerators.Extensions;
8+
using CommunityToolkit.Mvvm.SourceGenerators.Models;
99
using Microsoft.CodeAnalysis;
1010
using Microsoft.CodeAnalysis.CSharp.Syntax;
1111
using static CommunityToolkit.Mvvm.SourceGenerators.Diagnostics.DiagnosticDescriptors;
@@ -27,9 +27,9 @@ public ObservableObjectGenerator()
2727
}
2828

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

3434
// Check if the type already implements INotifyPropertyChanged...
3535
if (typeSymbol.AllInterfaces.Any(i => i.HasFullyQualifiedName("global::System.ComponentModel.INotifyPropertyChanged")))

CommunityToolkit.Mvvm.SourceGenerators/ComponentModel/ObservablePropertyGenerator.Execute.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
using System.Linq;
1010
using System.Threading;
1111
using CommunityToolkit.Mvvm.SourceGenerators.ComponentModel.Models;
12-
using CommunityToolkit.Mvvm.SourceGenerators.Diagnostics;
1312
using CommunityToolkit.Mvvm.SourceGenerators.Extensions;
13+
using CommunityToolkit.Mvvm.SourceGenerators.Models;
1414
using Microsoft.CodeAnalysis;
1515
using Microsoft.CodeAnalysis.CSharp;
1616
using Microsoft.CodeAnalysis.CSharp.Syntax;
@@ -43,9 +43,9 @@ public static bool TryGetInfo(
4343
SemanticModel semanticModel,
4444
CancellationToken token,
4545
[NotNullWhen(true)] out PropertyInfo? propertyInfo,
46-
out ImmutableArray<Diagnostic> diagnostics)
46+
out ImmutableArray<DiagnosticInfo> diagnostics)
4747
{
48-
ImmutableArray<Diagnostic>.Builder builder = ImmutableArray.CreateBuilder<Diagnostic>();
48+
ImmutableArray<DiagnosticInfo>.Builder builder = ImmutableArray.CreateBuilder<DiagnosticInfo>();
4949

5050
// Validate the target type
5151
if (!IsTargetTypeValid(fieldSymbol, out bool shouldInvokeOnPropertyChanging))
@@ -319,7 +319,7 @@ private static bool TryGatherDependentPropertyChangedNames(
319319
IFieldSymbol fieldSymbol,
320320
AttributeData attributeData,
321321
ImmutableArray<string>.Builder propertyChangedNames,
322-
ImmutableArray<Diagnostic>.Builder diagnostics)
322+
ImmutableArray<DiagnosticInfo>.Builder diagnostics)
323323
{
324324
// Validates a property name using existing properties
325325
bool IsPropertyNameValid(string propertyName)
@@ -384,7 +384,7 @@ private static bool TryGatherDependentCommandNames(
384384
IFieldSymbol fieldSymbol,
385385
AttributeData attributeData,
386386
ImmutableArray<string>.Builder notifiedCommandNames,
387-
ImmutableArray<Diagnostic>.Builder diagnostics)
387+
ImmutableArray<DiagnosticInfo>.Builder diagnostics)
388388
{
389389
// Validates a command name using existing properties
390390
bool IsCommandNameValid(string commandName, out bool shouldLookForGeneratedMembersToo)
@@ -505,7 +505,7 @@ private static bool TryGetIsNotifyingRecipients(IFieldSymbol fieldSymbol, out bo
505505
private static bool TryGetIsNotifyingRecipients(
506506
IFieldSymbol fieldSymbol,
507507
AttributeData attributeData,
508-
ImmutableArray<Diagnostic>.Builder diagnostics,
508+
ImmutableArray<DiagnosticInfo>.Builder diagnostics,
509509
bool hasOrInheritsClassLevelNotifyPropertyChangedRecipients,
510510
out bool isBroadcastTargetValid)
511511
{
@@ -608,7 +608,7 @@ private static bool TryGetNotifyDataErrorInfo(IFieldSymbol fieldSymbol, out bool
608608
private static bool TryGetNotifyDataErrorInfo(
609609
IFieldSymbol fieldSymbol,
610610
AttributeData attributeData,
611-
ImmutableArray<Diagnostic>.Builder diagnostics,
611+
ImmutableArray<DiagnosticInfo>.Builder diagnostics,
612612
bool hasOrInheritsClassLevelNotifyDataErrorInfo,
613613
out bool isValidationTargetValid)
614614
{

CommunityToolkit.Mvvm.SourceGenerators/ComponentModel/ObservablePropertyGenerator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
4343
// Get the hierarchy info for the target symbol, and try to gather the property info
4444
HierarchyInfo hierarchy = HierarchyInfo.From(fieldSymbol.ContainingType);
4545

46-
_ = Execute.TryGetInfo(fieldDeclaration, fieldSymbol, context.SemanticModel, token, out PropertyInfo? propertyInfo, out ImmutableArray<Diagnostic> diagnostics);
46+
_ = Execute.TryGetInfo(fieldDeclaration, fieldSymbol, context.SemanticModel, token, out PropertyInfo? propertyInfo, out ImmutableArray<DiagnosticInfo> diagnostics);
4747

4848
return (Hierarchy: hierarchy, new Result<PropertyInfo?>(propertyInfo, diagnostics));
4949
})

CommunityToolkit.Mvvm.SourceGenerators/ComponentModel/ObservableRecipientGenerator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
using System.Collections.Immutable;
66
using System.Linq;
77
using CommunityToolkit.Mvvm.SourceGenerators.ComponentModel.Models;
8-
using CommunityToolkit.Mvvm.SourceGenerators.Diagnostics;
98
using CommunityToolkit.Mvvm.SourceGenerators.Extensions;
9+
using CommunityToolkit.Mvvm.SourceGenerators.Models;
1010
using Microsoft.CodeAnalysis;
1111
using Microsoft.CodeAnalysis.CSharp;
1212
using Microsoft.CodeAnalysis.CSharp.Syntax;
@@ -30,9 +30,9 @@ public ObservableRecipientGenerator()
3030
}
3131

3232
/// <inheritdoc/>
33-
protected override ObservableRecipientInfo? ValidateTargetTypeAndGetInfo(INamedTypeSymbol typeSymbol, AttributeData attributeData, Compilation compilation, out ImmutableArray<Diagnostic> diagnostics)
33+
private protected override ObservableRecipientInfo? ValidateTargetTypeAndGetInfo(INamedTypeSymbol typeSymbol, AttributeData attributeData, Compilation compilation, out ImmutableArray<DiagnosticInfo> diagnostics)
3434
{
35-
ImmutableArray<Diagnostic>.Builder builder = ImmutableArray.CreateBuilder<Diagnostic>();
35+
ImmutableArray<DiagnosticInfo>.Builder builder = ImmutableArray.CreateBuilder<DiagnosticInfo>();
3636

3737
ObservableRecipientInfo? info = null;
3838

CommunityToolkit.Mvvm.SourceGenerators/ComponentModel/TransitiveMembersGenerator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
8585
INamedTypeSymbol typeSymbol = (INamedTypeSymbol)context.TargetSymbol;
8686

8787
// Gather all generation info, and any diagnostics
88-
TInfo? info = ValidateTargetTypeAndGetInfo(typeSymbol, context.Attributes[0], context.SemanticModel.Compilation, out ImmutableArray<Diagnostic> diagnostics);
88+
TInfo? info = ValidateTargetTypeAndGetInfo(typeSymbol, context.Attributes[0], context.SemanticModel.Compilation, out ImmutableArray<DiagnosticInfo> diagnostics);
8989

9090
// If there are any diagnostics, there's no need to compute the hierarchy info at all, just return them
9191
if (diagnostics.Length > 0)
@@ -129,7 +129,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
129129
/// <param name="diagnostics">The resulting diagnostics, if any.</param>
130130
/// <returns>The extracted info for the current type, if possible.</returns>
131131
/// <remarks>If <paramref name="diagnostics"/> is empty, the returned info will always be ignored and no sources will be produced.</remarks>
132-
protected abstract TInfo? ValidateTargetTypeAndGetInfo(INamedTypeSymbol typeSymbol, AttributeData attributeData, Compilation compilation, out ImmutableArray<Diagnostic> diagnostics);
132+
private protected abstract TInfo? ValidateTargetTypeAndGetInfo(INamedTypeSymbol typeSymbol, AttributeData attributeData, Compilation compilation, out ImmutableArray<DiagnosticInfo> diagnostics);
133133

134134
/// <summary>
135135
/// Filters the <see cref="MemberDeclarationSyntax"/> nodes to generate from the input parsed tree.

CommunityToolkit.Mvvm.SourceGenerators/Diagnostics/DiagnosticExtensions.cs

Lines changed: 0 additions & 46 deletions
This file was deleted.
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
// See the LICENSE file in the project root for more information.
4+
5+
// This file is ported and adapted from ComputeSharp (Sergio0694/ComputeSharp),
6+
// more info in ThirdPartyNotices.txt in the root of the project.
7+
8+
using System.Collections.Immutable;
9+
using CommunityToolkit.Mvvm.SourceGenerators.Models;
10+
using Microsoft.CodeAnalysis;
11+
12+
namespace CommunityToolkit.Mvvm.SourceGenerators.Extensions;
13+
14+
/// <summary>
15+
/// Extension methods for <see cref="GeneratorExecutionContext"/>, specifically for reporting diagnostics.
16+
/// </summary>
17+
internal static class DiagnosticsExtensions
18+
{
19+
/// <summary>
20+
/// Adds a new diagnostics to the target builder.
21+
/// </summary>
22+
/// <param name="diagnostics">The collection of produced <see cref="DiagnosticInfo"/> instances.</param>
23+
/// <param name="descriptor">The input <see cref="DiagnosticDescriptor"/> for the diagnostics to create.</param>
24+
/// <param name="symbol">The source <see cref="ISymbol"/> to attach the diagnostics to.</param>
25+
/// <param name="args">The optional arguments for the formatted message to include.</param>
26+
public static void Add(
27+
this ImmutableArray<DiagnosticInfo>.Builder diagnostics,
28+
DiagnosticDescriptor descriptor,
29+
ISymbol symbol,
30+
params object[] args)
31+
{
32+
diagnostics.Add(DiagnosticInfo.Create(descriptor, symbol, args));
33+
}
34+
35+
/// <summary>
36+
/// Adds a new diagnostics to the target builder.
37+
/// </summary>
38+
/// <param name="diagnostics">The collection of produced <see cref="DiagnosticInfo"/> instances.</param>
39+
/// <param name="descriptor">The input <see cref="DiagnosticDescriptor"/> for the diagnostics to create.</param>
40+
/// <param name="node">The source <see cref="SyntaxNode"/> to attach the diagnostics to.</param>
41+
/// <param name="args">The optional arguments for the formatted message to include.</param>
42+
public static void Add(
43+
this ImmutableArray<DiagnosticInfo>.Builder diagnostics,
44+
DiagnosticDescriptor descriptor,
45+
SyntaxNode node,
46+
params object[] args)
47+
{
48+
diagnostics.Add(DiagnosticInfo.Create(descriptor, node, args));
49+
}
50+
51+
/// <summary>
52+
/// Registers an output node into an <see cref="IncrementalGeneratorInitializationContext"/> to output diagnostics.
53+
/// </summary>
54+
/// <param name="context">The input <see cref="IncrementalGeneratorInitializationContext"/> instance.</param>
55+
/// <param name="diagnostics">The input <see cref="IncrementalValuesProvider{TValues}"/> sequence of diagnostics.</param>
56+
public static void ReportDiagnostics(this IncrementalGeneratorInitializationContext context, IncrementalValuesProvider<DiagnosticInfo> diagnostics)
57+
{
58+
context.RegisterSourceOutput(diagnostics, static (context, diagnostic) =>
59+
{
60+
context.ReportDiagnostic(diagnostic.ToDiagnostic());
61+
});
62+
}
63+
64+
/// <summary>
65+
/// Registers an output node into an <see cref="IncrementalGeneratorInitializationContext"/> to output diagnostics.
66+
/// </summary>
67+
/// <param name="context">The input <see cref="IncrementalGeneratorInitializationContext"/> instance.</param>
68+
/// <param name="diagnostics">The input <see cref="IncrementalValuesProvider{TValues}"/> sequence of diagnostics.</param>
69+
public static void ReportDiagnostics(this IncrementalGeneratorInitializationContext context, IncrementalValuesProvider<ImmutableArray<DiagnosticInfo>> diagnostics)
70+
{
71+
context.RegisterSourceOutput(diagnostics, static (context, diagnostics) =>
72+
{
73+
foreach (DiagnosticInfo diagnostic in diagnostics)
74+
{
75+
context.ReportDiagnostic(diagnostic.ToDiagnostic());
76+
}
77+
});
78+
}
79+
}

0 commit comments

Comments
 (0)