public RobustXamlILCompiler(TransformerConfiguration configuration, XamlLanguageEmitMappings <IXamlILEmitter, XamlILNodeEmitResult> emitMappings, bool fillWithDefaults) : base(configuration, emitMappings, fillWithDefaults)
        {
            Transformers.Add(new AddNameScopeRegistration());
            Transformers.Add(new RobustMarkRootObjectScopeNode());

            Emitters.Add(new AddNameScopeRegistration.Emitter());
            Emitters.Add(new RobustMarkRootObjectScopeNode.Emitter());
        }
        public void AddTransformer(ITransformer transformer)
        {
            if (Transformers.Contains(transformer))
            {
                return;
            }

            Transformers.Add(transformer);
        }
 private MiniCompiler(TransformerConfiguration configuration)
     : base(configuration, new XamlLanguageEmitMappings <object, IXamlEmitResult>(), false)
 {
     Transformers.Add(new NameDirectiveTransformer());
     Transformers.Add(new DataTemplateTransformer());
     Transformers.Add(new KnownDirectivesTransformer());
     Transformers.Add(new XamlIntrinsicsTransformer());
     Transformers.Add(new XArgumentsTransformer());
     Transformers.Add(new TypeReferenceResolver());
 }
        private AvaloniaXamlIlCompiler(TransformerConfiguration configuration, XamlLanguageEmitMappings <IXamlILEmitter, XamlILNodeEmitResult> emitMappings)
            : base(configuration, emitMappings, true)
        {
            _configuration = configuration;

            void InsertAfter <T>(params IXamlAstTransformer[] t)
            => Transformers.InsertRange(Transformers.FindIndex(x => x is T) + 1, t);

            void InsertBefore <T>(params IXamlAstTransformer[] t)
            => Transformers.InsertRange(Transformers.FindIndex(x => x is T), t);


            // Before everything else

            Transformers.Insert(0, new XNameTransformer());
            Transformers.Insert(1, new IgnoredDirectivesTransformer());
            Transformers.Insert(2, _designTransformer  = new AvaloniaXamlIlDesignPropertiesTransformer());
            Transformers.Insert(3, _bindingTransformer = new AvaloniaBindingExtensionTransformer());


            // Targeted
            InsertBefore <PropertyReferenceResolver>(
                new AvaloniaXamlIlResolveClassesPropertiesTransformer(),
                new AvaloniaXamlIlTransformInstanceAttachedProperties(),
                new AvaloniaXamlIlTransformSyntheticCompiledBindingMembers());
            InsertAfter <PropertyReferenceResolver>(
                new AvaloniaXamlIlAvaloniaPropertyResolver(),
                new AvaloniaXamlIlReorderClassesPropertiesTransformer()
                );

            InsertBefore <ContentConvertTransformer>(
                new AvaloniaXamlIlBindingPathParser(),
                new AvaloniaXamlIlSelectorTransformer(),
                new AvaloniaXamlIlControlTemplateTargetTypeMetadataTransformer(),
                new AvaloniaXamlIlPropertyPathTransformer(),
                new AvaloniaXamlIlSetterTransformer(),
                new AvaloniaXamlIlConstructorServiceProviderTransformer(),
                new AvaloniaXamlIlTransitionsTypeMetadataTransformer(),
                new AvaloniaXamlIlResolveByNameMarkupExtensionReplacer()
                );

            // After everything else
            InsertBefore <NewObjectTransformer>(
                new AddNameScopeRegistration(),
                new AvaloniaXamlIlDataContextTypeTransformer(),
                new AvaloniaXamlIlBindingPathTransformer(),
                new AvaloniaXamlIlCompiledBindingsMetadataRemover()
                );

            Transformers.Add(new AvaloniaXamlIlMetadataRemover());
            Transformers.Add(new AvaloniaXamlIlRootObjectScope());

            Emitters.Add(new AvaloniaNameScopeRegistrationXamlIlNodeEmitter());
            Emitters.Add(new AvaloniaXamlIlRootObjectScope.Emitter());
        }
        private AvaloniaXamlIlCompiler(XamlIlTransformerConfiguration configuration) : base(configuration, true)
        {
            _configuration = configuration;

            void InsertAfter <T>(params IXamlIlAstTransformer[] t)
            => Transformers.InsertRange(Transformers.FindIndex(x => x is T) + 1, t);

            void InsertBefore <T>(params IXamlIlAstTransformer[] t)
            => Transformers.InsertRange(Transformers.FindIndex(x => x is T), t);


            // Before everything else

            Transformers.Insert(0, new XNameTransformer());
            Transformers.Insert(1, new IgnoredDirectivesTransformer());
            Transformers.Insert(2, _designTransformer = new AvaloniaXamlIlDesignPropertiesTransformer());
            Transformers.Insert(3, new AvaloniaBindingExtensionHackTransformer());


            // Targeted

            InsertBefore <XamlIlPropertyReferenceResolver>(new AvaloniaXamlIlTransformInstanceAttachedProperties());
            InsertAfter <XamlIlPropertyReferenceResolver>(new AvaloniaXamlIlAvaloniaPropertyResolver());



            InsertBefore <XamlIlContentConvertTransformer>(
                new AvaloniaXamlIlSelectorTransformer(),
                new AvaloniaXamlIlSetterTransformer(),
                new AvaloniaXamlIlControlTemplateTargetTypeMetadataTransformer(),
                new AvaloniaXamlIlConstructorServiceProviderTransformer(),
                new AvaloniaXamlIlTransitionsTypeMetadataTransformer()
                );

            // After everything else

            Transformers.Add(new AddNameScopeRegistration());
            Transformers.Add(new AvaloniaXamlIlMetadataRemover());
        }
Exemple #6
0
 public CompressQuality4()
 {
     Transformers.Add(new TransformOfficialBlockSplitterLQ());
 }
 public void Register(ITransform transform)
 {
     _context.Debug(() => $"Registering {transform.GetType().Name}.");
     Transformers.Add(transform);
 }