private async Task SetCompilation()

in src/Analysis/Codelyzer.Analysis.Build/ProjectBuildHandler.cs [123:164]


        private async Task SetCompilation()
        {
            PrePortCompilation = await SetPrePortCompilation();         
            Compilation = await Project.GetCompilationAsync();           
            
            var errors = Compilation.GetDiagnostics()
                .Where(diagnostic => diagnostic.Severity == DiagnosticSeverity.Error);
            if (errors.Any())
            {
                Logger.LogError($"Build Errors: {Compilation.AssemblyName}: {errors.Count()} " +
                                $"compilation errors: \n\t{string.Join("\n\t", errors.Where(e => false).Select(e => e.ToString()))}");
                Logger.LogDebug(String.Join("\n", errors));

                foreach (var error in errors)
                {
                    Errors.Add(error.ToString());
                }
            }
            else
            {
                Logger.LogInformation($"Project {Project.Name} compiled with no errors");
            }
            
            // Fallback logic: On fatal errors like msbuild is not installed or framework versions not installed
            // the build fails and does not give syntax trees. 
            if (Compilation.SyntaxTrees == null ||
                Compilation.SyntaxTrees.Count() == 0)
            {
                try
                {
                    Logger.LogError(syntaxAnalysisError);                   
                    Errors.Add(syntaxAnalysisError);

                    FallbackCompilation();
                    isSyntaxAnalysis = true;
                }
                catch (Exception e)
                {
                    Logger.LogError(e, "Error while running syntax analysis");
                }
            }
        }