public void multi_end_blocks()
        {
            var writer = new SourceWriter();

            writer.Block("public void Go()");
            writer.Block("try");
            writer.WriteLine("var x = 0;");
            writer.FinishBlock();
            writer.FinishBlock();

            var lines = writer.Code().ReadLines().ToArray();

            lines[5].Should().Be("    }");
            lines[6].Should().Be("}");
        }
Esempio n. 2
0
        public static string GenerateDocumentStorageCode(DocumentMapping[] mappings)
        {
            var writer = new SourceWriter();

            // TODO -- get rid of the magic strings
            var namespaces = new List <string> {
                "System", "Marten", "Marten.Schema", "Marten.Linq", "Marten.Util", "Npgsql", "Remotion.Linq"
            };

            namespaces.AddRange(mappings.Select(x => x.DocumentType.Namespace));

            namespaces.Distinct().OrderBy(x => x).Each(x => writer.WriteLine($"using {x};"));
            writer.BlankLine();

            writer.StartNamespace("Marten.GeneratedCode");

            mappings.Each(x =>
            {
                x.GenerateDocumentStorage(writer);
                writer.BlankLine();
                writer.BlankLine();
            });

            writer.FinishBlock();

            var code = writer.Code();

            return(code);
        }
Esempio n. 3
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
        }
Esempio n. 4
0
        public static string GenerateDocumentStorageCode(DocumentMapping[] mappings)
        {
            var writer = new SourceWriter();

            // TODO -- get rid of the magic strings
            var namespaces = new List<string> {"System", "Marten", "Marten.Schema", "Marten.Linq", "Marten.Util", "Npgsql", "Remotion.Linq"};
            namespaces.AddRange(mappings.Select(x => x.DocumentType.Namespace));

            namespaces.Distinct().OrderBy(x => x).Each(x => writer.WriteLine($"using {x};"));
            writer.BlankLine();

            writer.StartNamespace("Marten.GeneratedCode");

            mappings.Each(x =>
            {
                x.GenerateDocumentStorage(writer);
                writer.BlankLine();
                writer.BlankLine();
            });

            writer.FinishBlock();

            var code = writer.Code();
            return code;
        }
Esempio n. 5
0
        public void tryit()
        {
            var mapping = new DocumentMapping(typeof(User));
            var writer = new SourceWriter();
            writer.StartNamespace("MyApplication");

            mapping.GenerateDocumentStorage(writer);

            writer.FinishBlock();

            Debug.WriteLine(writer.Code());
        }
Esempio n. 6
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);
        }
Esempio n. 7
0
        public void tryit()
        {
            var mapping = new DocumentMapping(typeof(User));
            var writer  = new SourceWriter();

            writer.StartNamespace("MyApplication");

            mapping.GenerateDocumentStorage(writer);

            writer.FinishBlock();

            Debug.WriteLine(writer.Code());
        }
Esempio n. 8
0
        public void other_methods()
        {
            // SAMPLE: other-sourcewriter-basics
            var writer = new SourceWriter();

            // Write an empty line into the code
            writer.BlankLine();

            // Writes a single line into the code
            // with the proper indention. Does NOT
            // respect the BLOCK: and END directives
            writer.WriteLine("// A comment");

            // Writes a closing '}' character into the
            // next line and decrements the leading space
            // indention for the following lines of code
            writer.FinishBlock();
            // ENDSAMPLE
        }
Esempio n. 9
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. 10
0
        public static string GenerateDocumentStorageCode(IDocumentMapping[] mappings)
        {
            var writer = new SourceWriter();

            // TODO -- get rid of the magic strings
            var namespaces = new List <string>
            {
                "System",
                "Marten",
                "Marten.Schema",
                "Marten.Services",
                "Marten.Linq",
                "Marten.Util",
                "Npgsql",
                "Remotion.Linq",
                typeof(NpgsqlDbType).Namespace,
                typeof(IEnumerable <>).Namespace,
                typeof(DbDataReader).Namespace,
                typeof(CancellationToken).Namespace,
                typeof(Task).Namespace
            };

            namespaces.AddRange(mappings.Select(x => x.DocumentType.Namespace));

            namespaces.Distinct().OrderBy(x => x).Each(x => writer.WriteLine($"using {x};"));
            writer.BlankLine();

            writer.StartNamespace("Marten.GeneratedCode");

            mappings.Each(x =>
            {
                GenerateDocumentStorage(x, writer);
                writer.BlankLine();
                writer.BlankLine();
            });

            writer.FinishBlock();
            return(writer.Code());
        }
Esempio n. 11
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);
        }
Esempio n. 12
0
        public static string GenerateDocumentStorageCode(DocumentMapping[] mappings)
        {
            var writer = new SourceWriter();

            // TODO -- get rid of the magic strings
            var namespaces = new List<string>
            {
                "System",
                "Marten",
                "Marten.Schema",
                "Marten.Services",
                "Marten.Linq",
                "Marten.Util",
                "Npgsql",
                "Remotion.Linq",
                typeof (NpgsqlDbType).Namespace,
                typeof (IEnumerable<>).Namespace,
                typeof(DbDataReader).Namespace,
                typeof(CancellationToken).Namespace,
                typeof(Task).Namespace
            };
            namespaces.AddRange(mappings.Select(x => x.DocumentType.Namespace));

            namespaces.Distinct().OrderBy(x => x).Each(x => writer.WriteLine($"using {x};"));
            writer.BlankLine();

            writer.StartNamespace("Marten.GeneratedCode");

            mappings.Each(x =>
            {
                GenerateDocumentStorage(x, writer);
                writer.BlankLine();
                writer.BlankLine();
            });

            writer.FinishBlock();
            return writer.Code();
        }