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.
 
 
 

32 lines
1.1 KiB

using System.Collections.Generic;
using Microsoft.CodeAnalysis.CSharp;
using XamlX;
using XamlX.Parsers;
namespace Avalonia.NameGenerator.Infrastructure
{
internal class NameResolver : INameResolver
{
private const string AvaloniaXmlnsAttribute = "Avalonia.Metadata.XmlnsDefinitionAttribute";
private readonly CSharpCompilation _compilation;
public NameResolver(CSharpCompilation compilation) => _compilation = compilation;
public IReadOnlyList<(string TypeName, string Name)> ResolveNames(string xaml)
{
var parsed = XDocumentXamlParser.Parse(xaml, new Dictionary<string, string>
{
{XamlNamespaces.Blend2008, XamlNamespaces.Blend2008}
});
MiniCompiler
.CreateDefault(new RoslynTypeSystem(_compilation), AvaloniaXmlnsAttribute)
.Transform(parsed);
var visitor = new NameReceiver();
parsed.Root.Visit(visitor);
parsed.Root.VisitChildren(visitor);
return visitor.Controls;
}
}
}