public CompiledViewHolder.Entry CreateEntry(CompiledViewHolder.Key key, bool compile) { var entry = new CompiledViewHolder.Entry { Key = key, Loader = CreateViewLoader(), Compiler = LanguageFactory.CreateViewCompiler(this, key.Descriptor), LanguageFactory = LanguageFactory }; var chunksLoaded = new List<IList<Chunk>>(); var templatesLoaded = new List<string>(); LoadTemplates(entry.Loader, key.Descriptor.Templates, chunksLoaded, templatesLoaded); if (compile) { entry.Compiler.CompileView(chunksLoaded, entry.Loader.GetEverythingLoaded()); entry.Activator = ViewActivatorFactory.Register(entry.Compiler.CompiledType); } else { entry.Compiler.GenerateSourceCode(chunksLoaded, entry.Loader.GetEverythingLoaded()); } return entry; }
public IList<SparkViewDescriptor> LoadBatchCompilation(Assembly assembly) { var descriptors = new List<SparkViewDescriptor>(); foreach (var type in assembly.GetExportedTypes()) { if (!typeof(ISparkView).IsAssignableFrom(type)) continue; var attributes = type.GetCustomAttributes(typeof(SparkViewAttribute), false); if (attributes == null || attributes.Length == 0) continue; var descriptor = ((SparkViewAttribute)attributes[0]).BuildDescriptor(); var entry = new CompiledViewHolder.Entry { Key = new CompiledViewHolder.Key { Descriptor = descriptor }, Loader = new ViewLoader(), Compiler = new DefaultViewCompiler { CompiledType = type }, Activator = ViewActivatorFactory.Register(type) }; CompiledViewHolder.Current.Store(entry); descriptors.Add(descriptor); } return descriptors; }
public Assembly BatchCompilation(string outputAssembly, IList<SparkViewDescriptor> descriptors) { var batch = new List<CompiledViewHolder.Entry>(); var sourceCode = new List<string>(); foreach (var descriptor in descriptors) { var entry = new CompiledViewHolder.Entry { Key = CreateKey(descriptor), Loader = CreateViewLoader(), Compiler = LanguageFactory.CreateViewCompiler(this, descriptor) }; var chunksLoaded = new List<IList<Chunk>>(); var templatesLoaded = new List<string>(); LoadTemplates(entry.Loader, descriptor.Templates, chunksLoaded, templatesLoaded); entry.Compiler.GenerateSourceCode(chunksLoaded, entry.Loader.GetEverythingLoaded()); sourceCode.Add(entry.Compiler.SourceCode); batch.Add(entry); } var batchCompiler = new BatchCompiler { OutputAssembly = outputAssembly }; var assembly = batchCompiler.Compile(Settings.Debug, sourceCode.ToArray()); foreach (var entry in batch) { entry.Compiler.CompiledType = assembly.GetType(entry.Compiler.ViewClassFullName); entry.Activator = ViewActivatorFactory.Register(entry.Compiler.CompiledType); CompiledViewHolder.Current.Store(entry); } return assembly; }