Browse Source

Place populate method into x:Class itself

pull/2322/head
Nikita Tsukanov 7 years ago
parent
commit
9ef49aed42
  1. 25
      src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs
  2. 2
      src/Markup/Avalonia.Markup.Xaml/XamlIl/xamlil.github

25
src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs

@ -156,18 +156,31 @@ namespace Avalonia.Build.Tasks
compiler.Transform(parsed);
var populateName = "Populate:" + res.Name;
var populateName = classType == null ? "Populate:" + res.Name : "!XamlIlPopulate";
var buildName = classType == null ? "Build:" + res.Name : null;
compiler.Compile(parsed, builder, contextClass,
populateName, buildName,
"NamespaceInfo:" + res.Name, res.Uri, res);
var classTypeDefinition =
classType == null ? null : typeSystem.GetTypeReference(classType).Resolve();
var populateBuilder = classTypeDefinition == null ?
builder :
typeSystem.CreateTypeBuilder(classTypeDefinition);
compiler.Compile(parsed, contextClass,
compiler.DefinePopulateMethod(populateBuilder, parsed, populateName,
classTypeDefinition == null),
buildName == null ? null : compiler.DefineBuildMethod(builder, parsed, buildName, true),
builder.DefineSubType(compilerConfig.WellKnownTypes.Object, "NamespaceInfo:" + res.Name,
true),
(closureName, closureBaseType) =>
populateBuilder.DefineSubType(closureBaseType, closureName, false),
res.Uri, res
);
if (classTypeDefinition != null)
{
var compiledPopulateMethod = typeSystem.GetTypeReference(builder).Resolve()
var compiledPopulateMethod = typeSystem.GetTypeReference(populateBuilder).Resolve()
.Methods.First(m => m.Name == populateName);
var designLoaderFieldType = typeSystem

2
src/Markup/Avalonia.Markup.Xaml/XamlIl/xamlil.github

@ -1 +1 @@
Subproject commit 954fd7e949601ee993f1167650be1d5549e471fd
Subproject commit 2f0a885a7fff4dda8f0372448951f7e59e4d09b7
Loading…
Cancel
Save