A cross-platform UI framework for .NET
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

24 lines
983 B

using System.IO;
using System.Xml.Serialization;
using Microsoft.CodeAnalysis;
namespace Avalonia.SourceGenerator.CompositionGenerator
{
[Generator(LanguageNames.CSharp)]
public class CompositionRoslynGenerator : IIncrementalGenerator
{
public void Initialize(IncrementalGeneratorInitializationContext context)
{
var schema =
context.AdditionalTextsProvider.Where(static file => file.Path.EndsWith("composition-schema.xml"));
var configs = schema.Select((t, _) => t.GetText())
.Where(source => source is not null)
.Select((source, _) => (GConfig)new XmlSerializer(typeof(GConfig)).Deserialize(new StringReader(source!.ToString())));
context.RegisterSourceOutput(configs, (spc, config) =>
{
var generator = new Generator(new RoslynCompositionGeneratorSink(spc), config);
generator.Generate();
});
}
}
}