Browse Source

Add Deterministic XamlX ID Generator (#5684)

* Add Deterministic XamlX ID Generator

* Apply suggestions from code review

* simplify stuff and apply review

* Update src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs

* Update src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs

* add the det id gen to runtine xamlx compiler

* rerun tests

* rerun tests

* try this

* use id gen instead of guid

* a

* Update src/Markup/Avalonia.Markup.Xaml.Loader/AvaloniaXamlIlRuntimeCompiler.cs

* Update AvaloniaXamlIlCompilerConfiguration.cs

revert

* Update XamlIlClrPropertyInfoHelper.cs

* Update AvaloniaXamlIlRuntimeCompiler.cs

* fix

* revert hack

* make id gen optional
pull/5732/head
Jumar Macato 6 years ago
committed by GitHub
parent
commit
2fcad40bce
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 12
      src/Avalonia.Build.Tasks/DeterministicIdGenerator.cs
  2. 4
      src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs
  3. 5
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlCompilerConfiguration.cs

12
src/Avalonia.Build.Tasks/DeterministicIdGenerator.cs

@ -0,0 +1,12 @@
using System;
using XamlX.Transform;
namespace Avalonia.Build.Tasks
{
public class DeterministicIdGenerator : IXamlIdentifierGenerator
{
private int _nextId = 1;
public string GenerateIdentifierPart() => (_nextId++).ToString();
}
}

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

@ -22,7 +22,6 @@ using XamlX.IL;
namespace Avalonia.Build.Tasks namespace Avalonia.Build.Tasks
{ {
public static partial class XamlCompilerTaskExecutor public static partial class XamlCompilerTaskExecutor
{ {
static bool CheckXamlName(IResource r) => r.Name.ToLowerInvariant().EndsWith(".xaml") static bool CheckXamlName(IResource r) => r.Name.ToLowerInvariant().EndsWith(".xaml")
@ -99,7 +98,8 @@ namespace Avalonia.Build.Tasks
XamlXmlnsMappings.Resolve(typeSystem, xamlLanguage), XamlXmlnsMappings.Resolve(typeSystem, xamlLanguage),
AvaloniaXamlIlLanguage.CustomValueConverter, AvaloniaXamlIlLanguage.CustomValueConverter,
new XamlIlClrPropertyInfoEmitter(typeSystem.CreateTypeBuilder(clrPropertiesDef)), new XamlIlClrPropertyInfoEmitter(typeSystem.CreateTypeBuilder(clrPropertiesDef)),
new XamlIlPropertyInfoAccessorFactoryEmitter(typeSystem.CreateTypeBuilder(indexerAccessorClosure))); new XamlIlPropertyInfoAccessorFactoryEmitter(typeSystem.CreateTypeBuilder(indexerAccessorClosure)),
new DeterministicIdGenerator());
var contextDef = new TypeDefinition("CompiledAvaloniaXaml", "XamlIlContext", var contextDef = new TypeDefinition("CompiledAvaloniaXaml", "XamlIlContext",

5
src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlCompilerConfiguration.cs

@ -14,8 +14,9 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions
XamlXmlnsMappings xmlnsMappings, XamlXmlnsMappings xmlnsMappings,
XamlValueConverter customValueConverter, XamlValueConverter customValueConverter,
XamlIlClrPropertyInfoEmitter clrPropertyEmitter, XamlIlClrPropertyInfoEmitter clrPropertyEmitter,
XamlIlPropertyInfoAccessorFactoryEmitter accessorFactoryEmitter) XamlIlPropertyInfoAccessorFactoryEmitter accessorFactoryEmitter,
: base(typeSystem, defaultAssembly, typeMappings, xmlnsMappings, customValueConverter) IXamlIdentifierGenerator identifierGenerator = null)
: base(typeSystem, defaultAssembly, typeMappings, xmlnsMappings, customValueConverter, identifierGenerator)
{ {
ClrPropertyEmitter = clrPropertyEmitter; ClrPropertyEmitter = clrPropertyEmitter;
AccessorFactoryEmitter = accessorFactoryEmitter; AccessorFactoryEmitter = accessorFactoryEmitter;

Loading…
Cancel
Save