Пример #1
0
        public void advanced_usages()
        {
            // SAMPLE: SourceWriterAdvanced
            var writer = new SourceWriter();

            // Add "using [namespace]; statements
            writer.UsingNamespace(typeof(Console).Namespace);
            writer.UsingNamespace <IOperation>();

            writer.Namespace("GeneratedCode");
            // Write new classes and code within the namespace
            writer.FinishBlock();


            // Helper to write using blocks in C# code
            writer.UsingBlock("var conn = new SqlConnection()", w =>
            {
                w.Write("conn.Open();");
                // other statements
            });



            // Write a comment text into the code at the correct indention
            // level
            writer.WriteComment("Some message");


            // Start the declaration of a new public class named "MyClass"
            // that implements the IDisposable interface
            writer.StartClass("MyClass", typeof(IDisposable));
            // ENDSAMPLE
        }
Пример #2
0
        public override async Task <bool> Execute(GenerateInput input)
        {
            var settings = new CSharpGeneratorSettings
            {
                ClassStyle = CSharpClassStyle.Poco,
                Namespace  = input.NamespaceFlag,
            };

            var codeDirectory = input.OutputDirectory.ToFullPath();


            var system = new FileSystem();

            if (!system.DirectoryExists(codeDirectory))
            {
                Console.WriteLine("Creating directory " + codeDirectory);
                system.CreateDirectory(codeDirectory);
            }

            var files    = system.FindFiles(input.SchemaDirectory, FileSet.Shallow("*.json"));
            var messages = files.Select(x => new GeneratedMessage(x)).ToArray();

            var writer = new SourceWriter();

            writer.Namespace(input.NamespaceFlag);

            foreach (var message in messages)
            {
                var schema = await JsonSchema4.FromFileAsync(message.FilePath);


                var generator = new CSharpGenerator(schema, settings);
                var contents  = generator.GenerateFile(message.ClassName);

                var codeFile = codeDirectory.AppendPath(message.ClassName + ".cs");
                Console.WriteLine(codeFile);
                system.WriteStringToFile(codeFile, contents);

                message.WriteAnnotations(writer);
            }

            writer.FinishBlock();

            var annotationFile = codeDirectory.AppendPath("MessageAnnotations.cs");

            Console.WriteLine("Writing attribute annotations to " + annotationFile);
            system.WriteStringToFile(annotationFile, writer.Code());



            return(true);
        }
Пример #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);
        }
Пример #4
0
        public string GenerateCode(IGenerationConfig generation)
        {
            beforeGeneratingCode();

            var writer = new SourceWriter();

            writer.UsingNamespace <Task>();
            writer.BlankLine();

            writer.Namespace(generation.ApplicationNamespace);

            foreach (var chain in chains)
            {
                var generationModel = chain.ToGenerationModel(generation);


                // TODO -- figure out how to get the source code for each handler
                writer.WriteLine($"// START: {chain.TypeName}");

                HandlerSourceWriter.Write(generationModel, writer);
                writer.WriteLine($"// END: {chain.TypeName}");

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

            writer.FinishBlock();


            var code = writer.Code();

            attachSourceCodeToChains(code);


            return(code);
        }