public override WorkflowResult Process(WorkflowResult workflowResult = null, CancellationToken cancellationToken = default) { CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture; CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.InvariantCulture; var result = workflowResult ?? new WorkflowResult(AnalyzedLanguages.ToList(), ThreadCount, Stage); result.BaseLanguages = GetBaseLanguages(AnalyzedLanguages).ToList(); result.RenderStages = RenderStages; result.IsFoldConstants = IsFoldConstants; IEnumerable <string> fileNames = SourceRepository.GetFileNames(); if (fileNames is IList <string> fileNamesList) { result.TotalFilesCount = fileNamesList.Count; } else { Task.Factory.StartNew(() => result.TotalFilesCount = fileNames.Count()); } try { List <PatternRoot> patterns = ConvertPatterns(result); var parallelOptions = PrepareParallelOptions(cancellationToken); Parallel.ForEach( fileNames, parallelOptions, fileName => { var patternMatcher = new PatternMatcher { Logger = Logger, Patterns = patterns, IsIgnoreFilenameWildcards = IsIgnoreFilenameWildcards, UstConstantFolder = IsFoldConstants ? new UstConstantFolder() : null }; ProcessFileWithTimeout(fileName, patternMatcher, result, parallelOptions.CancellationToken); }); } catch (OperationCanceledException) { Logger.LogInfo("Scan cancelled"); } DumpJsonOutput(result); result.ErrorCount = logger?.ErrorCount ?? 0; result.RootPath = SourceRepository.RootPath; return(result); }
public override WorkflowResult Process(WorkflowResult workflowResult = null, CancellationToken cancellationToken = default(CancellationToken)) { Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; BaseLanguages = GetBaseLanguages(AnalyzedLanguages); var result = workflowResult ?? new WorkflowResult(AnalyzedLanguages.ToArray(), ThreadCount, Stage, IsIncludeIntermediateResult); result.BaseLanguages = BaseLanguages.ToArray(); result.RenderStages = RenderStages; result.IsSimplifyUst = IsSimplifyUst; IEnumerable <string> fileNames = SourceCodeRepository.GetFileNames(); if (fileNames is IList <string> fileNamesList) { result.TotalFilesCount = fileNamesList.Count; } else { filesCountTask = Task.Factory.StartNew(() => result.TotalFilesCount = fileNames.Count()); } try { var patternMatcher = new PatternMatcher { Logger = Logger, Patterns = ConvertPatterns(result), IsIgnoreFilenameWildcards = IsIgnoreFilenameWildcards }; var parallelOptions = PrepareParallelOptions(cancellationToken); Parallel.ForEach( fileNames, parallelOptions, fileName => { Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; ProcessFileWithTimeout(fileName, patternMatcher, result, parallelOptions.CancellationToken); }); } catch (OperationCanceledException) { Logger.LogInfo("Scan has been cancelled"); } if (result.TotalProcessedFilesCount > 1) { AntlrParser.ClearCacheIfRequired(); } DumpJsonOutput(result); result.ErrorCount = logger?.ErrorCount ?? 0; return(result); }