Fix AddSource operations on Roslyn 4.0.1

This commit is contained in:
Sergio Pedri
2023-02-14 13:44:46 +01:00
parent 63ba418b6f
commit 1dd1cd1c19
7 changed files with 43 additions and 14 deletions
@@ -55,6 +55,7 @@
<Compile Include="$(MSBuildThisFileDirectory)Extensions\IncrementalGeneratorInitializationContextExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\IncrementalValuesProviderExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\ISymbolExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\SourceProductionContextExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\ITypeSymbolExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\MemberDeclarationSyntaxExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\SyntaxNodeExtensions.cs" />
@@ -4,7 +4,6 @@
using System.Collections.Immutable;
using System.Linq;
using System.Text;
using CommunityToolkit.Mvvm.SourceGenerators.ComponentModel.Models;
using CommunityToolkit.Mvvm.SourceGenerators.Extensions;
using CommunityToolkit.Mvvm.SourceGenerators.Helpers;
@@ -75,7 +74,7 @@ public sealed partial class ObservablePropertyGenerator : IIncrementalGenerator
// Insert all members into the same partial type declaration
CompilationUnitSyntax compilationUnit = item.Hierarchy.GetCompilationUnit(memberDeclarations);
context.AddSource($"{item.Hierarchy.FilenameHint}.g.cs", compilationUnit.GetText(Encoding.UTF8));
context.AddSource($"{item.Hierarchy.FilenameHint}.g.cs", compilationUnit);
});
// Gather all property changing names
@@ -92,7 +91,7 @@ public sealed partial class ObservablePropertyGenerator : IIncrementalGenerator
if (compilationUnit is not null)
{
context.AddSource("__KnownINotifyPropertyChangingArgs.g.cs", compilationUnit.GetText(Encoding.UTF8));
context.AddSource("__KnownINotifyPropertyChangingArgs.g.cs", compilationUnit);
}
});
@@ -110,7 +109,7 @@ public sealed partial class ObservablePropertyGenerator : IIncrementalGenerator
if (compilationUnit is not null)
{
context.AddSource("__KnownINotifyPropertyChangedArgs.g.cs", compilationUnit.GetText(Encoding.UTF8));
context.AddSource("__KnownINotifyPropertyChangedArgs.g.cs", compilationUnit);
}
});
}
@@ -3,7 +3,6 @@
// See the LICENSE file in the project root for more information.
using System.Linq;
using System.Text;
using CommunityToolkit.Mvvm.SourceGenerators.ComponentModel.Models;
using CommunityToolkit.Mvvm.SourceGenerators.Extensions;
using Microsoft.CodeAnalysis;
@@ -79,7 +78,7 @@ public sealed partial class ObservableValidatorValidateAllPropertiesGenerator :
{
CompilationUnitSyntax compilationUnit = Execute.GetSyntax(item);
context.AddSource("__ObservableValidatorExtensions.g.cs", compilationUnit.GetText(Encoding.UTF8));
context.AddSource("__ObservableValidatorExtensions.g.cs", compilationUnit);
});
// Generate the class with all validation methods
@@ -87,7 +86,7 @@ public sealed partial class ObservableValidatorValidateAllPropertiesGenerator :
{
CompilationUnitSyntax compilationUnit = Execute.GetSyntax(item);
context.AddSource($"{item.FilenameHint}.g.cs", compilationUnit.GetText(Encoding.UTF8));
context.AddSource($"{item.FilenameHint}.g.cs", compilationUnit);
});
}
}
@@ -5,7 +5,6 @@
using System;
using System.Collections.Immutable;
using System.Linq;
using System.Text;
using CommunityToolkit.Mvvm.SourceGenerators.Extensions;
using CommunityToolkit.Mvvm.SourceGenerators.Models;
using Microsoft.CodeAnalysis;
@@ -108,7 +107,7 @@ public abstract partial class TransitiveMembersGenerator<TInfo> : IIncrementalGe
ImmutableArray<MemberDeclarationSyntax> updatedMemberDeclarations = Execute.AdjustMemberDeclarationNullabilityAnnotations(filteredMemberDeclarations, item.MetadataInfo.IsNullabilitySupported);
CompilationUnitSyntax compilationUnit = item.Hierarchy.GetCompilationUnit(updatedMemberDeclarations, this.classDeclaration.BaseList);
context.AddSource($"{item.Hierarchy.FilenameHint}.g.cs", compilationUnit.GetText(Encoding.UTF8));
context.AddSource($"{item.Hierarchy.FilenameHint}.g.cs", compilationUnit);
});
}
@@ -0,0 +1,33 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System.Text;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp.Syntax;
namespace CommunityToolkit.Mvvm.SourceGenerators.Extensions;
/// <summary>
/// Extension methods for the <see cref="SourceProductionContext"/> type.
/// </summary>
internal static class SourceProductionContextExtensions
{
/// <summary>
/// Adds a new source file to a target <see cref="SourceProductionContext"/> instance.
/// </summary>
/// <param name="context">The input <see cref="SourceProductionContext"/> instance to use.</param>
/// <param name="name">The name of the source file to add.</param>
/// <param name="compilationUnit">The <see cref="CompilationUnitSyntax"/> instance representing the syntax tree to add.</param>
public static void AddSource(this SourceProductionContext context, string name, CompilationUnitSyntax compilationUnit)
{
#if !ROSLYN_4_3_1_OR_GREATER
// We're fine with the extra allocation in the few cases where adjusting the filename is necessary.
// This will only ever be done when code generation is executed again anyway, which is a slow path.
name = name.Replace('+', '_').Replace('`', '_');
#endif
// Add the UTF8 text for the input compilation unit
context.AddSource(name, compilationUnit.GetText(Encoding.UTF8));
}
}
@@ -4,7 +4,6 @@
using System.Collections.Immutable;
using System.Linq;
using System.Text;
using CommunityToolkit.Mvvm.SourceGenerators.Extensions;
using CommunityToolkit.Mvvm.SourceGenerators.Input.Models;
using CommunityToolkit.Mvvm.SourceGenerators.Models;
@@ -61,7 +60,7 @@ public sealed partial class RelayCommandGenerator : IIncrementalGenerator
ImmutableArray<MemberDeclarationSyntax> memberDeclarations = Execute.GetSyntax(item.Info.Value);
CompilationUnitSyntax compilationUnit = item.Hierarchy.GetCompilationUnit(memberDeclarations);
context.AddSource($"{item.Hierarchy.FilenameHint}.{item.Info.Value.MethodName}.g.cs", compilationUnit.GetText(Encoding.UTF8));
context.AddSource($"{item.Hierarchy.FilenameHint}.{item.Info.Value.MethodName}.g.cs", compilationUnit);
});
}
}
@@ -4,7 +4,6 @@
using System.Collections.Immutable;
using System.Linq;
using System.Text;
using CommunityToolkit.Mvvm.SourceGenerators.Extensions;
using CommunityToolkit.Mvvm.SourceGenerators.Messaging.Models;
using Microsoft.CodeAnalysis;
@@ -84,7 +83,7 @@ public sealed partial class IMessengerRegisterAllGenerator : IIncrementalGenerat
{
CompilationUnitSyntax compilationUnit = Execute.GetSyntax(item);
context.AddSource("__IMessengerExtensions.g.cs", compilationUnit.GetText(Encoding.UTF8));
context.AddSource("__IMessengerExtensions.g.cs", compilationUnit);
});
// Generate the class with all registration methods
@@ -92,7 +91,7 @@ public sealed partial class IMessengerRegisterAllGenerator : IIncrementalGenerat
{
CompilationUnitSyntax compilationUnit = Execute.GetSyntax(item);
context.AddSource($"{item.FilenameHint}.g.cs", compilationUnit.GetText(Encoding.UTF8));
context.AddSource($"{item.FilenameHint}.g.cs", compilationUnit);
});
}
}