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
{
public static partial class XamlCompilerTaskExecutor
{
static bool CheckXamlName(IResource r) => r.Name.ToLowerInvariant().EndsWith(".xaml")
@ -99,7 +98,8 @@ namespace Avalonia.Build.Tasks
XamlXmlnsMappings.Resolve(typeSystem, xamlLanguage),
AvaloniaXamlIlLanguage.CustomValueConverter,
new XamlIlClrPropertyInfoEmitter(typeSystem.CreateTypeBuilder(clrPropertiesDef)),
new XamlIlPropertyInfoAccessorFactoryEmitter(typeSystem.CreateTypeBuilder(indexerAccessorClosure)));
new XamlIlPropertyInfoAccessorFactoryEmitter(typeSystem.CreateTypeBuilder(indexerAccessorClosure)),
new DeterministicIdGenerator());
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,
XamlValueConverter customValueConverter,
XamlIlClrPropertyInfoEmitter clrPropertyEmitter,
XamlIlPropertyInfoAccessorFactoryEmitter accessorFactoryEmitter)
: base(typeSystem, defaultAssembly, typeMappings, xmlnsMappings, customValueConverter)
XamlIlPropertyInfoAccessorFactoryEmitter accessorFactoryEmitter,
IXamlIdentifierGenerator identifierGenerator = null)
: base(typeSystem, defaultAssembly, typeMappings, xmlnsMappings, customValueConverter, identifierGenerator)
{
ClrPropertyEmitter = clrPropertyEmitter;
AccessorFactoryEmitter = accessorFactoryEmitter;

Loading…
Cancel
Save