Skip to content

Commit 1dd1cd1

Browse files
committed
Fix AddSource operations on Roslyn 4.0.1
1 parent 63ba418 commit 1dd1cd1

File tree

7 files changed

+43
-14
lines changed

7 files changed

+43
-14
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
<Compile Include="$(MSBuildThisFileDirectory)Extensions\IncrementalGeneratorInitializationContextExtensions.cs" />
5656
<Compile Include="$(MSBuildThisFileDirectory)Extensions\IncrementalValuesProviderExtensions.cs" />
5757
<Compile Include="$(MSBuildThisFileDirectory)Extensions\ISymbolExtensions.cs" />
58+
<Compile Include="$(MSBuildThisFileDirectory)Extensions\SourceProductionContextExtensions.cs" />
5859
<Compile Include="$(MSBuildThisFileDirectory)Extensions\ITypeSymbolExtensions.cs" />
5960
<Compile Include="$(MSBuildThisFileDirectory)Extensions\MemberDeclarationSyntaxExtensions.cs" />
6061
<Compile Include="$(MSBuildThisFileDirectory)Extensions\SyntaxNodeExtensions.cs" />

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

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

55
using System.Collections.Immutable;
66
using System.Linq;
7-
using System.Text;
87
using CommunityToolkit.Mvvm.SourceGenerators.ComponentModel.Models;
98
using CommunityToolkit.Mvvm.SourceGenerators.Extensions;
109
using CommunityToolkit.Mvvm.SourceGenerators.Helpers;
@@ -75,7 +74,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
7574
// Insert all members into the same partial type declaration
7675
CompilationUnitSyntax compilationUnit = item.Hierarchy.GetCompilationUnit(memberDeclarations);
7776

78-
context.AddSource($"{item.Hierarchy.FilenameHint}.g.cs", compilationUnit.GetText(Encoding.UTF8));
77+
context.AddSource($"{item.Hierarchy.FilenameHint}.g.cs", compilationUnit);
7978
});
8079

8180
// Gather all property changing names
@@ -92,7 +91,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
9291

9392
if (compilationUnit is not null)
9493
{
95-
context.AddSource("__KnownINotifyPropertyChangingArgs.g.cs", compilationUnit.GetText(Encoding.UTF8));
94+
context.AddSource("__KnownINotifyPropertyChangingArgs.g.cs", compilationUnit);
9695
}
9796
});
9897

@@ -110,7 +109,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
110109

111110
if (compilationUnit is not null)
112111
{
113-
context.AddSource("__KnownINotifyPropertyChangedArgs.g.cs", compilationUnit.GetText(Encoding.UTF8));
112+
context.AddSource("__KnownINotifyPropertyChangedArgs.g.cs", compilationUnit);
114113
}
115114
});
116115
}

src/CommunityToolkit.Mvvm.SourceGenerators/ComponentModel/ObservableValidatorValidateAllPropertiesGenerator.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
// See the LICENSE file in the project root for more information.
44

55
using System.Linq;
6-
using System.Text;
76
using CommunityToolkit.Mvvm.SourceGenerators.ComponentModel.Models;
87
using CommunityToolkit.Mvvm.SourceGenerators.Extensions;
98
using Microsoft.CodeAnalysis;
@@ -79,15 +78,15 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
7978
{
8079
CompilationUnitSyntax compilationUnit = Execute.GetSyntax(item);
8180

82-
context.AddSource("__ObservableValidatorExtensions.g.cs", compilationUnit.GetText(Encoding.UTF8));
81+
context.AddSource("__ObservableValidatorExtensions.g.cs", compilationUnit);
8382
});
8483

8584
// Generate the class with all validation methods
8685
context.RegisterImplementationSourceOutput(validationInfo, static (context, item) =>
8786
{
8887
CompilationUnitSyntax compilationUnit = Execute.GetSyntax(item);
8988

90-
context.AddSource($"{item.FilenameHint}.g.cs", compilationUnit.GetText(Encoding.UTF8));
89+
context.AddSource($"{item.FilenameHint}.g.cs", compilationUnit);
9190
});
9291
}
9392
}

src/CommunityToolkit.Mvvm.SourceGenerators/ComponentModel/TransitiveMembersGenerator.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using System;
66
using System.Collections.Immutable;
77
using System.Linq;
8-
using System.Text;
98
using CommunityToolkit.Mvvm.SourceGenerators.Extensions;
109
using CommunityToolkit.Mvvm.SourceGenerators.Models;
1110
using Microsoft.CodeAnalysis;
@@ -108,7 +107,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
108107
ImmutableArray<MemberDeclarationSyntax> updatedMemberDeclarations = Execute.AdjustMemberDeclarationNullabilityAnnotations(filteredMemberDeclarations, item.MetadataInfo.IsNullabilitySupported);
109108
CompilationUnitSyntax compilationUnit = item.Hierarchy.GetCompilationUnit(updatedMemberDeclarations, this.classDeclaration.BaseList);
110109

111-
context.AddSource($"{item.Hierarchy.FilenameHint}.g.cs", compilationUnit.GetText(Encoding.UTF8));
110+
context.AddSource($"{item.Hierarchy.FilenameHint}.g.cs", compilationUnit);
112111
});
113112
}
114113

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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+
using System.Text;
6+
using Microsoft.CodeAnalysis;
7+
using Microsoft.CodeAnalysis.CSharp.Syntax;
8+
9+
namespace CommunityToolkit.Mvvm.SourceGenerators.Extensions;
10+
11+
/// <summary>
12+
/// Extension methods for the <see cref="SourceProductionContext"/> type.
13+
/// </summary>
14+
internal static class SourceProductionContextExtensions
15+
{
16+
/// <summary>
17+
/// Adds a new source file to a target <see cref="SourceProductionContext"/> instance.
18+
/// </summary>
19+
/// <param name="context">The input <see cref="SourceProductionContext"/> instance to use.</param>
20+
/// <param name="name">The name of the source file to add.</param>
21+
/// <param name="compilationUnit">The <see cref="CompilationUnitSyntax"/> instance representing the syntax tree to add.</param>
22+
public static void AddSource(this SourceProductionContext context, string name, CompilationUnitSyntax compilationUnit)
23+
{
24+
#if !ROSLYN_4_3_1_OR_GREATER
25+
// We're fine with the extra allocation in the few cases where adjusting the filename is necessary.
26+
// This will only ever be done when code generation is executed again anyway, which is a slow path.
27+
name = name.Replace('+', '_').Replace('`', '_');
28+
#endif
29+
30+
// Add the UTF8 text for the input compilation unit
31+
context.AddSource(name, compilationUnit.GetText(Encoding.UTF8));
32+
}
33+
}

src/CommunityToolkit.Mvvm.SourceGenerators/Input/RelayCommandGenerator.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
using System.Collections.Immutable;
66
using System.Linq;
7-
using System.Text;
87
using CommunityToolkit.Mvvm.SourceGenerators.Extensions;
98
using CommunityToolkit.Mvvm.SourceGenerators.Input.Models;
109
using CommunityToolkit.Mvvm.SourceGenerators.Models;
@@ -61,7 +60,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
6160
ImmutableArray<MemberDeclarationSyntax> memberDeclarations = Execute.GetSyntax(item.Info.Value);
6261
CompilationUnitSyntax compilationUnit = item.Hierarchy.GetCompilationUnit(memberDeclarations);
6362

64-
context.AddSource($"{item.Hierarchy.FilenameHint}.{item.Info.Value.MethodName}.g.cs", compilationUnit.GetText(Encoding.UTF8));
63+
context.AddSource($"{item.Hierarchy.FilenameHint}.{item.Info.Value.MethodName}.g.cs", compilationUnit);
6564
});
6665
}
6766
}

src/CommunityToolkit.Mvvm.SourceGenerators/Messaging/IMessengerRegisterAllGenerator.cs

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

55
using System.Collections.Immutable;
66
using System.Linq;
7-
using System.Text;
87
using CommunityToolkit.Mvvm.SourceGenerators.Extensions;
98
using CommunityToolkit.Mvvm.SourceGenerators.Messaging.Models;
109
using Microsoft.CodeAnalysis;
@@ -84,15 +83,15 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
8483
{
8584
CompilationUnitSyntax compilationUnit = Execute.GetSyntax(item);
8685

87-
context.AddSource("__IMessengerExtensions.g.cs", compilationUnit.GetText(Encoding.UTF8));
86+
context.AddSource("__IMessengerExtensions.g.cs", compilationUnit);
8887
});
8988

9089
// Generate the class with all registration methods
9190
context.RegisterImplementationSourceOutput(recipientInfo, static (context, item) =>
9291
{
9392
CompilationUnitSyntax compilationUnit = Execute.GetSyntax(item);
9493

95-
context.AddSource($"{item.FilenameHint}.g.cs", compilationUnit.GetText(Encoding.UTF8));
94+
context.AddSource($"{item.FilenameHint}.g.cs", compilationUnit);
9695
});
9796
}
9897
}

0 commit comments

Comments
 (0)