public void Run()

in SharpGen/Generator/RoslynGenerator.cs [19:75]


        public void Run(CsAssembly csAssembly, string generatedCodeFolder, Ioc ioc)
        {
            if (string.IsNullOrEmpty(generatedCodeFolder))
                throw new ArgumentException("Value cannot be null or empty.", nameof(generatedCodeFolder));

            var logger = ioc.Logger;
            var generators = ioc.Generators;

            var directoryToCreate = new HashSet<string>(StringComparer.CurrentCulture);

            // Remove the generated directory before creating it
            if (!directoryToCreate.Contains(generatedCodeFolder))
            {
                directoryToCreate.Add(generatedCodeFolder);
                if (Directory.Exists(generatedCodeFolder))
                {
                    foreach (var oldGeneratedFile in Directory.EnumerateFiles(generatedCodeFolder, "*.cs", SearchOption.AllDirectories))
                    {
                        try
                        {
                            File.Delete(oldGeneratedFile);
                        }
                        catch
                        {
                            // ignored
                        }
                    }
                }
            }

            if (!Directory.Exists(generatedCodeFolder))
                Directory.CreateDirectory(generatedCodeFolder);

            logger.Message("Process Assembly => {0}", generatedCodeFolder);

            var trees = new[]
            {
                CreateTree("Enumerations", ns => ns.Enums, generators.Enum),
                CreateTree("Structures", ns => ns.Structs, generators.Struct),
                CreateTree("Functions", ns => ns.Classes, generators.Group),
                CreateTree("Interfaces", ns => ns.Interfaces, generators.Interface)
            };

            SyntaxTree CreateTree<T>(string fileName, Func<CsNamespace, IEnumerable<T>> membersFunc,
                                     IMultiCodeGenerator<T, MemberDeclarationSyntax> generator) where T : CsBase =>
                CSharpSyntaxTree.Create(
                    GenerateCompilationUnit(
                        csAssembly.Namespaces.Select(
                            ns => GenerateNamespaceDeclaration(ns, membersFunc(ns), generator)
                        )
                    ),
                    path: Path.Combine(generatedCodeFolder, $"{fileName}.cs")
                );

            foreach (var tree in trees)
                File.WriteAllText(tree.FilePath, tree.GetCompilationUnitRoot().ToFullString());
        }