public bool GenerateJsonReport()

in src/PortingAssistant.Client.Client/Reports/ReportExporter.cs [39:124]


        public bool GenerateJsonReport(
            SolutionAnalysisResult solutionAnalysisResult,
            string outputFolder)
        {
            try
            {
                string SolutionName = solutionAnalysisResult.SolutionDetails.SolutionName;
                string BaseDir = Path.Combine(outputFolder, SolutionName + AnalyzeRootFolder, SolutionAnalyzeFolder);
                Dictionary<string, string> FailedProjects = new Dictionary<string, string>();

                solutionAnalysisResult.ProjectAnalysisResults.ForEach(projectAnalysResult =>
                {
                    if (projectAnalysResult == null)
                    {
                        return;
                    }
                    List<Task<bool>> writeToFiles = new List<Task<bool>>();
                    string ProjectName = projectAnalysResult.ProjectName;
                    string FileDir = Path.Combine(BaseDir, ProjectName);
                    Directory.CreateDirectory(FileDir);
                    List<PackageAnalysisResult> packageAnalysisResults = new List<PackageAnalysisResult>();
                    Dictionary<PackageVersionPair, string> packageAnalysisResultErrors = new Dictionary<PackageVersionPair, string>();

                    projectAnalysResult.PackageAnalysisResults.ToList()
                    .ForEach(p =>
                    {
                        if (p.Value.IsCompletedSuccessfully)
                        {
                            packageAnalysisResults.Add(p.Value.Result);
                        }
                        else
                        {
                            packageAnalysisResultErrors.Add(p.Key, p.Value.Exception.Message);
                        };
                    });

                    //project apis analsis result
                    string ApiAnalyzeFileName = ProjectName + "-api-analysis.json";
                    var projectApiAnalysisResult = projectAnalysResult.IsBuildFailed ? new ProjectApiAnalysisResult
                    {
                        Errors = new List<string> { $"Errors during compilation in {projectAnalysResult.ProjectName}." },
                        SchemaVersion = Common.Model.Schema.version,
                        SolutionFile = SolutionName,
                        SolutionGuid = solutionAnalysisResult.SolutionDetails.SolutionGuid,
                        ApplicationGuid = solutionAnalysisResult.SolutionDetails.ApplicationGuid,
                        RepositoryUrl = solutionAnalysisResult.SolutionDetails.RepositoryUrl,
                        ProjectFile = ProjectName,
                    } : new ProjectApiAnalysisResult
                    {
                        Errors = projectAnalysResult.Errors,
                        SchemaVersion = Common.Model.Schema.version,
                        SolutionFile = SolutionName,
                        SolutionGuid = solutionAnalysisResult.SolutionDetails.SolutionGuid,
                        ApplicationGuid = solutionAnalysisResult.SolutionDetails.ApplicationGuid,
                        RepositoryUrl = solutionAnalysisResult.SolutionDetails.RepositoryUrl,
                        ProjectFile = ProjectName,
                        SourceFileAnalysisResults = projectAnalysResult.SourceFileAnalysisResults
                    };
                    writeToFiles.Add(WriteReportToFileAsync(projectApiAnalysisResult, Path.Combine(FileDir, ApiAnalyzeFileName)));

                    //project packages analsis result
                    string PackageAnalyzeFileName = ProjectName + "-package-analysis.json";
                    writeToFiles.Add(WriteReportToFileAsync(packageAnalysisResults, Path.Combine(FileDir, PackageAnalyzeFileName)));

                    //project failed packages result
                    if (packageAnalysisResultErrors != null && packageAnalysisResultErrors.Count != 0)
                    {
                        string PackageAnalyzeErrorFileName = ProjectName + "-package-analysis-error.json";
                        writeToFiles.Add(WriteReportToFileAsync(packageAnalysisResults, Path.Combine(FileDir, PackageAnalyzeErrorFileName)));
                    }
                    Task.WaitAll(writeToFiles.ToArray());

                });
                if (FailedProjects?.Count != 0)
                {
                    WriteReportToFileAsync(FailedProjects, Path.Combine(BaseDir, "failed.json")).Wait();
                }
                return true;

            }
            catch (Exception ex)
            {
                _logger.LogError("failed to generate analyze report: {0}", ex);
                return false;
            }
        }