private string CreateReport()
        {
            var result = new StringBuilder();

            result.AppendLine($"Application: {applicationInfo.ApplicationName}");

            logger.LogMessage("Enumerate project files", LogMessageLevel.Trace);
            result.AppendLine("Files");

            foreach (var file in fileSystem.EnumerateFiles(
                         applicationInfo.ApplicationBasePath, "*.*", SearchOption.AllDirectories))
            {
                result.AppendLine($"\t{file}");
            }

            logger.LogMessage("Enumerate project types", LogMessageLevel.Trace);
            result.AppendLine("Types");
            foreach (var type in modelTypesLocator.GetAllTypes())
            {
                result.AppendLine($"\t{type.FullName}");
            }


            return(result.ToString());
        }
        public void GenerateCode(AdvancedGeneratorModel model)
        {
            var types = modelTypesLocator.GetAllTypes();

            if (!string.IsNullOrEmpty(model.TypeFilter))
            {
                var regex = new Regex(model.TypeFilter);
                types = types.Where(t => regex.IsMatch(t.Name));
            }

            var templateModel = new TemplateModel
            {
                Namespace = model.Namespace,
                Types     = types.Select(t =>
                                         new TemplateModelType
                {
                    Name       = t.Name,
                    Properties = (t.TypeSymbol as INamedTypeSymbol)
                                 .GetMembers()
                                 .Where(m => m.Kind == SymbolKind.Property)
                                 .OfType <IPropertySymbol>()
                                 .Select(m => new TemplateModelProperty {
                        Name = m.Name, Type = m.Type.Name
                    }).ToArray()
                }).ToArray()
            };

            var templateFolders = TemplateFoldersUtilities
                                  .GetTemplateFolders(this.GetType().Assembly.GetName().Name,
                                                      applicationInfo.ApplicationBasePath,
                                                      new string[] { "Advanced" },
                                                      projectContext);

            var outputFilePath = Path.Combine(applicationInfo.ApplicationBasePath, model.OutputFile);

            codeGeneratorActionsService.AddFileFromTemplateAsync(outputFilePath, TemplateName, templateFolders, templateModel);
        }