Example #1
0
        public async Task <IList <ICodeInspectionResult> > FindIssuesAsync(VBProject project)
        {
            await Task.Yield();

            RaiseResetEvent();

            var code = await _parser.ParseAsync(project);

            var allIssues = new ConcurrentBag <ICodeInspectionResult>();

            var inspections = _inspections.Where(inspection => inspection.Severity != CodeInspectionSeverity.DoNotShow)
                              .Select(inspection =>
                                      new Task(() =>
            {
                var inspectionResults = inspection.GetInspectionResults(code);
                var results           = inspectionResults as IList <CodeInspectionResultBase> ?? inspectionResults.ToList();

                if (results.Any())
                {
                    RaiseIssuesFoundEvent(results);

                    foreach (var inspectionResult in results)
                    {
                        allIssues.Add(inspectionResult);
                    }
                }
            })).ToArray();

            foreach (var inspection in inspections)
            {
                inspection.Start();
            }

            Task.WaitAll(inspections);

            return(allIssues.ToList());
        }