public List <RecordingIlEmitter.RecordedInstruction> Compile(
            XamlDocument doc,
            IXamlType contextType,
            IXamlMethodBuilder <TBackendEmitter> populateMethod,
            IXamlMethodBuilder <TBackendEmitter> buildMethod,
            IXamlTypeBuilder <TBackendEmitter> namespaceInfoBuilder,
            Func <string, IXamlType, IXamlTypeBuilder <TBackendEmitter> > createClosure,
            string baseUri,
            IFileSource fileSource)
        {
            var rootGrp  = (XamlValueWithManipulationNode)doc.Root;
            var rootType = rootGrp.Type.GetClrType();
            var context  = CreateRuntimeContext(doc, contextType, namespaceInfoBuilder, baseUri, rootType);

            var populateInstructions = CompilePopulate(
                fileSource,
                rootGrp.Manipulation,
                createClosure,
                populateMethod.Generator,
                context);

            if (buildMethod != null)
            {
                CompileBuild(fileSource, rootGrp.Value, null, buildMethod.Generator, context, populateMethod);
            }

            namespaceInfoBuilder?.CreateType();

            return(populateInstructions);
        }
Ejemplo n.º 2
0
        public void Compile(XamlDocument doc, IXamlType contextType,
                            IXamlMethodBuilder <TBackendEmitter> populateMethod, IXamlMethodBuilder <TBackendEmitter> buildMethod,
                            IXamlTypeBuilder <TBackendEmitter> namespaceInfoBuilder,
                            Func <string, IXamlType, IXamlTypeBuilder <TBackendEmitter> > createClosure,
                            Func <string, IXamlType, IEnumerable <IXamlType>, IXamlTypeBuilder <TBackendEmitter> > createDelegateType,
                            string baseUri, IFileSource fileSource)
        {
            var rootGrp  = (XamlValueWithManipulationNode)doc.Root;
            var rootType = rootGrp.Type.GetClrType();
            var context  = CreateRuntimeContext(doc, contextType, namespaceInfoBuilder, baseUri, rootType);

            CompilePopulate(fileSource, rootGrp.Manipulation, createClosure, createDelegateType, populateMethod.Generator, context);

            if (buildMethod != null)
            {
                CompileBuild(fileSource, rootGrp.Value, null, createDelegateType, buildMethod.Generator, context, populateMethod);
            }

            namespaceInfoBuilder?.CreateType();
        }