From 9ef49aed424d65a39ce818d8377af055cbb4dab7 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Mon, 6 May 2019 22:04:28 +0300 Subject: [PATCH] Place populate method into x:Class itself --- .../XamlCompilerTaskExecutor.cs | 25 ++++++++++++++----- .../Avalonia.Markup.Xaml/XamlIl/xamlil.github | 2 +- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs b/src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs index d1bfb25220..c41bdaf34b 100644 --- a/src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs +++ b/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 diff --git a/src/Markup/Avalonia.Markup.Xaml/XamlIl/xamlil.github b/src/Markup/Avalonia.Markup.Xaml/XamlIl/xamlil.github index 954fd7e949..2f0a885a7f 160000 --- a/src/Markup/Avalonia.Markup.Xaml/XamlIl/xamlil.github +++ b/src/Markup/Avalonia.Markup.Xaml/XamlIl/xamlil.github @@ -1 +1 @@ -Subproject commit 954fd7e949601ee993f1167650be1d5549e471fd +Subproject commit 2f0a885a7fff4dda8f0372448951f7e59e4d09b7