Esempio n. 1
0
        public Type[] CompileAll(GenerationRules generation)
        {
            var code = GenerateCode(generation);

            var generator = buildGenerator(generation);

            var assembly = generator.Generate(code);

            return(assembly.GetExportedTypes().ToArray());
        }
Esempio n. 2
0
        private AssemblyGenerator buildGenerator(GenerationRules generation)
        {
            var generator = new AssemblyGenerator();

            generator.ReferenceAssembly(GetType().GetTypeInfo().Assembly);
            generator.ReferenceAssembly(typeof(Task).GetTypeInfo().Assembly);

            foreach (var assembly in generation.Assemblies)
            {
                generator.ReferenceAssembly(assembly);
            }

            return(generator);
        }
Esempio n. 3
0
        public string GenerateCode(GenerationRules generation)
        {
            beforeGeneratingCode();

            var classes    = chains.Select(x => x.ToClass(generation)).ToArray();
            var namespaces = classes
                             .SelectMany(x => x.Args())
                             .Select(x => x.ArgType.Namespace)
                             .Concat(new string[] { typeof(Task).Namespace })
                             .Distinct().ToList();

            var writer = new SourceWriter();

            foreach (var ns in namespaces.OrderBy(x => x))
            {
                writer.Write($"using {ns};");
            }

            writer.BlankLine();

            writer.Namespace(generation.ApplicationNamespace);

            foreach (var @class in classes)
            {
                writer.WriteLine($"// START: {@class.ClassName}");
                @class.Write(writer);
                writer.WriteLine($"// END: {@class.ClassName}");

                writer.WriteLine("");
                writer.WriteLine("");
            }

            writer.FinishBlock();


            var code = writer.Code();

            attachSourceCodeToChains(code);


            return(code);
        }
Esempio n. 4
0
        public THandler[] CompileAndBuildAll(GenerationRules generation, Func <Type, object> builder)
        {
            var types = CompileAll(generation);

            return(chains.Select(x => x.Create(types, builder)).ToArray());
        }
Esempio n. 5
0
 public GeneratedClass(GenerationRules rules, string className)
 {
     Rules     = rules;
     ClassName = className;
 }