예제 #1
0
 static Model.TypeDefinition GetTypeDef(ulong id, Model.SchemaModel model)
 {
     foreach (var defs in model.FilesToGenerate.Select(f => f.NestedTypes))
     {
         if (GetTypeDef(id, defs) is Model.TypeDefinition def)
         {
             return(def);
         }
     }
     return(null);
 }
        static (Model.SchemaModel, CodeGen.CodeGenerator, string) LoadAndGenerate(params string[] inputNames)
        {
            Model.SchemaModel     firstModel   = null;
            CodeGen.CodeGenerator firstCodeGen = null;

            Model.SchemaModel LocalLoad(string name)
            {
                var model = Load(name);

                firstModel = firstModel ?? model;
                return(model);
            }

            CodeGen.CodeGenerator CreateCodeGen(Model.SchemaModel model)
            {
                var codegen = new CodeGen.CodeGenerator(model, new CodeGen.GeneratorOptions());

                firstCodeGen = firstCodeGen ?? codegen;
                return(codegen);
            }

            var codes = (
                from name in inputNames
                let model = LocalLoad(name)
                            let codegen = CreateCodeGen(model)
                                          from file in model.FilesToGenerate
                                          select codegen.Transform(file)).ToArray();

            Assert.AreEqual(
                Util.InlineAssemblyCompiler.CompileSummary.Success,
                Util.InlineAssemblyCompiler.TryCompileCapnp(
                    Microsoft.CodeAnalysis.NullableContextOptions.Disable,
                    codes),
                "Compilation was not successful with no warnings");

            return(firstModel, firstCodeGen, codes[0]);
예제 #3
0
 static CodeGen.CodeGenerator NewGeneratorFor(Model.SchemaModel model)
 => new CodeGen.CodeGenerator(model, new CodeGen.GeneratorOptions());