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 }
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); }
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); }
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); }