예제 #1
0
        private async Task <IDEProjectResult> AnalyzeProjectFiles(string projectPath, string fileContent, string filePath, List <string> preportReferences, List <string> currentReferences)
        {
            try
            {
                var configuration = new AnalyzerConfiguration(LanguageOptions.CSharp)
                {
                    MetaDataSettings =
                    {
                        LiteralExpressions    = true,
                        MethodInvocations     = true,
                        ReferenceData         = true,
                        Annotations           = true,
                        DeclarationNodes      = true,
                        LoadBuildData         = true,
                        LocationData          = true,
                        InterfaceDeclarations = true
                    }
                };
                var analyzer         = CodeAnalyzerFactory.GetAnalyzer(configuration, _logger);
                var ideProjectResult = await analyzer.AnalyzeFile(projectPath, filePath, fileContent, preportReferences, currentReferences);

                return(ideProjectResult);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error while analyzing files");
            }
            finally
            {
                CommonUtils.RunGarbageCollection(_logger, "PortingAssistantAnalysisHandler.AnalyzeFileIncremental");
            }
            return(null);
        }
예제 #2
0
        public async Task <Dictionary <string, ProjectAnalysisResult> > AnalyzeSolution(
            string solutionFilename, List <string> projects, string targetFramework = "netcoreapp3.1")
        {
            try
            {
                var configuration = new AnalyzerConfiguration(LanguageOptions.CSharp)
                {
                    MetaDataSettings =
                    {
                        LiteralExpressions    = true,
                        MethodInvocations     = true,
                        ReferenceData         = true,
                        Annotations           = true,
                        DeclarationNodes      = true,
                        LoadBuildData         = true,
                        LocationData          = true,
                        InterfaceDeclarations = true
                    }
                };
                var analyzer      = CodeAnalyzerFactory.GetAnalyzer(configuration, _logger);
                var analyzersTask = await analyzer.AnalyzeSolution(solutionFilename);

                var analysisActions = AnalyzeActions(projects, targetFramework, analyzersTask, solutionFilename);

                return(projects
                       .Select((project) => new KeyValuePair <string, ProjectAnalysisResult>(project, AnalyzeProject(project, analyzersTask, analysisActions, targetFramework)))
                       .Where(p => p.Value != null)
                       .ToDictionary(p => p.Key, p => p.Value));
            }
            finally
            {
                CommonUtils.RunGarbageCollection(_logger, "PortingAssistantAnalysisHandler.AnalyzeSolution");
            }
        }
예제 #3
0
        public AnalyzerCLI()
        {
            Configuration = new AnalyzerConfiguration(LanguageOptions.CSharp)
            {
                ExportSettings =
                {
                    GenerateJsonOutput = false,
                },

                MetaDataSettings =
                {
                    LiteralExpressions = true,
                    MethodInvocations  = true
                }
            };
        }
예제 #4
0
 public CSharpCodeAnalyzer(AnalyzerConfiguration configuration, ILogger logger)
     : base(configuration, logger)
 {
 }
예제 #5
0
 /// <summary>
 /// Initializes and return a new CodeAnalyzer
 /// </summary>
 /// <param name="configuration">Configuration of the analyzer</param>
 /// <param name="logger">Logger object</param>
 /// <returns></returns>
 public static CodeAnalyzer GetAnalyzer(AnalyzerConfiguration configuration, ILogger logger)
 {
     return(new CSharpCodeAnalyzer(configuration, logger));
 }
예제 #6
0
 protected CodeAnalyzer(AnalyzerConfiguration configuration, ILogger logger)
 {
     AnalyzerConfiguration = configuration;
     Logger = logger;
 }