Browse Source

IClassResolver->IViewResolver

pull/10407/head
artyom 5 years ago
parent
commit
11b74bb800
  1. 4
      src/Avalonia.NameGenerator.Tests/FindControlNameGeneratorTests.cs
  2. 4
      src/Avalonia.NameGenerator.Tests/XamlXClassResolverTests.cs
  3. 4
      src/Avalonia.NameGenerator.Tests/XamlXNameResolverTests.cs
  4. 2
      src/Avalonia.NameGenerator/AvaloniaNameSourceGenerator.cs
  5. 8
      src/Avalonia.NameGenerator/Domain/IViewResolver.cs
  6. 6
      src/Avalonia.NameGenerator/Generator/AvaloniaNameGenerator.cs
  7. 10
      src/Avalonia.NameGenerator/Generator/XamlXViewResolver.cs

4
src/Avalonia.NameGenerator.Tests/FindControlNameGeneratorTests.cs

@ -27,14 +27,14 @@ namespace Avalonia.NameGenerator.Tests
View.CreateAvaloniaCompilation() View.CreateAvaloniaCompilation()
.WithCustomTextBox(); .WithCustomTextBox();
var classResolver = new XamlXClassResolver( var classResolver = new XamlXViewResolver(
new RoslynTypeSystem(compilation), new RoslynTypeSystem(compilation),
MiniCompiler.CreateDefault( MiniCompiler.CreateDefault(
new RoslynTypeSystem(compilation), new RoslynTypeSystem(compilation),
MiniCompiler.AvaloniaXmlnsDefinitionAttribute)); MiniCompiler.AvaloniaXmlnsDefinitionAttribute));
var xaml = await View.Load(markup); var xaml = await View.Load(markup);
var classInfo = classResolver.ResolveClass(xaml); var classInfo = classResolver.ResolveView(xaml);
var nameResolver = new XamlXNameResolver(); var nameResolver = new XamlXNameResolver();
var names = nameResolver.ResolveNames(classInfo.Xaml); var names = nameResolver.ResolveNames(classInfo.Xaml);

4
src/Avalonia.NameGenerator.Tests/XamlXClassResolverTests.cs

@ -27,11 +27,11 @@ namespace Avalonia.NameGenerator.Tests
.WithCustomTextBox(); .WithCustomTextBox();
var types = new RoslynTypeSystem(compilation); var types = new RoslynTypeSystem(compilation);
var resolver = new XamlXClassResolver( var resolver = new XamlXViewResolver(
types, types,
MiniCompiler.CreateDefault(types, MiniCompiler.AvaloniaXmlnsDefinitionAttribute)); MiniCompiler.CreateDefault(types, MiniCompiler.AvaloniaXmlnsDefinitionAttribute));
var resolvedClass = resolver.ResolveClass(xaml); var resolvedClass = resolver.ResolveView(xaml);
Assert.Equal(className, resolvedClass.ClassName); Assert.Equal(className, resolvedClass.ClassName);
Assert.Equal(nameSpace, resolvedClass.NameSpace); Assert.Equal(nameSpace, resolvedClass.NameSpace);
} }

4
src/Avalonia.NameGenerator.Tests/XamlXNameResolverTests.cs

@ -109,13 +109,13 @@ namespace Avalonia.NameGenerator.Tests
View.CreateAvaloniaCompilation() View.CreateAvaloniaCompilation()
.WithCustomTextBox(); .WithCustomTextBox();
var classResolver = new XamlXClassResolver( var classResolver = new XamlXViewResolver(
new RoslynTypeSystem(compilation), new RoslynTypeSystem(compilation),
MiniCompiler.CreateDefault( MiniCompiler.CreateDefault(
new RoslynTypeSystem(compilation), new RoslynTypeSystem(compilation),
MiniCompiler.AvaloniaXmlnsDefinitionAttribute)); MiniCompiler.AvaloniaXmlnsDefinitionAttribute));
var classInfo = classResolver.ResolveClass(xaml); var classInfo = classResolver.ResolveView(xaml);
var nameResolver = new XamlXNameResolver(); var nameResolver = new XamlXNameResolver();
return nameResolver.ResolveNames(classInfo.Xaml); return nameResolver.ResolveNames(classInfo.Xaml);
} }

2
src/Avalonia.NameGenerator/AvaloniaNameSourceGenerator.cs

@ -23,7 +23,7 @@ namespace Avalonia.NameGenerator
INameGenerator avaloniaNameGenerator = INameGenerator avaloniaNameGenerator =
new AvaloniaNameGenerator( new AvaloniaNameGenerator(
new XamlXClassResolver(types, compiler, true, type => ReportInvalidType(context, type)), new XamlXViewResolver(types, compiler, true, type => ReportInvalidType(context, type)),
new XamlXNameResolver(), new XamlXNameResolver(),
new FindControlCodeGenerator()); new FindControlCodeGenerator());

8
src/Avalonia.NameGenerator/Domain/IClassResolver.cs → src/Avalonia.NameGenerator/Domain/IViewResolver.cs

@ -2,18 +2,18 @@ using XamlX.Ast;
namespace Avalonia.NameGenerator.Domain namespace Avalonia.NameGenerator.Domain
{ {
internal interface IClassResolver internal interface IViewResolver
{ {
ResolvedClass ResolveClass(string xaml); ResolvedView ResolveView(string xaml);
} }
internal record ResolvedClass internal record ResolvedView
{ {
public XamlDocument Xaml { get; } public XamlDocument Xaml { get; }
public string ClassName { get; } public string ClassName { get; }
public string NameSpace { get; } public string NameSpace { get; }
public ResolvedClass(string className, string nameSpace, XamlDocument xaml) public ResolvedView(string className, string nameSpace, XamlDocument xaml)
{ {
ClassName = className; ClassName = className;
NameSpace = nameSpace; NameSpace = nameSpace;

6
src/Avalonia.NameGenerator/Generator/AvaloniaNameGenerator.cs

@ -7,11 +7,11 @@ namespace Avalonia.NameGenerator.Generator
{ {
internal class AvaloniaNameGenerator : INameGenerator internal class AvaloniaNameGenerator : INameGenerator
{ {
private readonly IClassResolver _classes; private readonly IViewResolver _classes;
private readonly INameResolver _names; private readonly INameResolver _names;
private readonly ICodeGenerator _code; private readonly ICodeGenerator _code;
public AvaloniaNameGenerator(IClassResolver classes, INameResolver names, ICodeGenerator code) public AvaloniaNameGenerator(IViewResolver classes, INameResolver names, ICodeGenerator code)
{ {
_classes = classes; _classes = classes;
_names = names; _names = names;
@ -26,7 +26,7 @@ namespace Avalonia.NameGenerator.Generator
file.Path.EndsWith(".paml") || file.Path.EndsWith(".paml") ||
file.Path.EndsWith(".axaml") file.Path.EndsWith(".axaml")
let xaml = file.GetText()!.ToString() let xaml = file.GetText()!.ToString()
let type = _classes.ResolveClass(xaml) let type = _classes.ResolveView(xaml)
where type != null where type != null
select type; select type;

10
src/Avalonia.NameGenerator/Generator/XamlXClassResolver.cs → src/Avalonia.NameGenerator/Generator/XamlXViewResolver.cs

@ -9,17 +9,17 @@ using XamlX.Parsers;
namespace Avalonia.NameGenerator.Generator namespace Avalonia.NameGenerator.Generator
{ {
internal class XamlXClassResolver : IClassResolver, IXamlAstVisitor internal class XamlXViewResolver : IViewResolver, IXamlAstVisitor
{ {
private readonly RoslynTypeSystem _typeSystem; private readonly RoslynTypeSystem _typeSystem;
private readonly MiniCompiler _compiler; private readonly MiniCompiler _compiler;
private readonly bool _checkTypeValidity; private readonly bool _checkTypeValidity;
private readonly Action<string> _onTypeInvalid; private readonly Action<string> _onTypeInvalid;
private ResolvedClass _resolvedClass; private ResolvedView _resolvedClass;
private XamlDocument _xaml; private XamlDocument _xaml;
public XamlXClassResolver( public XamlXViewResolver(
RoslynTypeSystem typeSystem, RoslynTypeSystem typeSystem,
MiniCompiler compiler, MiniCompiler compiler,
bool checkTypeValidity = false, bool checkTypeValidity = false,
@ -31,7 +31,7 @@ namespace Avalonia.NameGenerator.Generator
_compiler = compiler; _compiler = compiler;
} }
public ResolvedClass ResolveClass(string xaml) public ResolvedView ResolveView(string xaml)
{ {
_resolvedClass = null; _resolvedClass = null;
_xaml = XDocumentXamlParser.Parse(xaml, new Dictionary<string, string> _xaml = XDocumentXamlParser.Parse(xaml, new Dictionary<string, string>
@ -79,7 +79,7 @@ namespace Avalonia.NameGenerator.Generator
var split = text.Text.Split('.'); var split = text.Text.Split('.');
var nameSpace = string.Join(".", split.Take(split.Length - 1)); var nameSpace = string.Join(".", split.Take(split.Length - 1));
var className = split.Last(); var className = split.Last();
_resolvedClass = new ResolvedClass(className, nameSpace, _xaml); _resolvedClass = new ResolvedView(className, nameSpace, _xaml);
return node; return node;
} }
} }
Loading…
Cancel
Save