Beispiel #1
0
        static IssueStats[] GetScriptIssuesSummary(ProjectReport projectReport)
        {
            var statsDict = new Dictionary <int, IssueStats>();

            var scriptIssues    = projectReport.GetIssues(IssueCategory.Code);
            var numScriptIssues = scriptIssues.Length;

            for (var i = 0; i < numScriptIssues; ++i)
            {
                var descriptor = scriptIssues[i].descriptor;

                var        id = descriptor.id;
                IssueStats stats;
                if (!statsDict.TryGetValue(id, out stats))
                {
                    stats = new IssueStats {
                        id = id
                    };
                }

                ++stats.numOccurrences;

                if (scriptIssues[i].isPerfCriticalContext)
                {
                    ++stats.numHotPathOccurrences;
                }

                statsDict[id] = stats;
            }

            return(statsDict.Values.OrderByDescending(x => x.numOccurrences).Take(k_MaxIssuesInAnalyzeSummary).ToArray());
        }
Beispiel #2
0
        private IssueStats GetIssueStats([NotNull] QualityCondition qualityCondition)
        {
            IssueStats issueStats;

            if (!_issueStatsByCondition.TryGetValue(qualityCondition, out issueStats))
            {
                issueStats = new IssueStats();
                _issueStatsByCondition.Add(qualityCondition, issueStats);
            }

            return(issueStats);
        }
Beispiel #3
0
        public void Process([NotNull] QaErrorEventArgs args)
        {
            Assert.ArgumentNotNull(args, nameof(args));

            QaError qaError = args.QaError;

            QualitySpecificationElement element = _elementsByTest[qaError.Test];

            QualityCondition qualityCondition = element.QualityCondition;

            if (element.StopOnError)
            {
                foreach (InvolvedRow involvedRow in qaError.InvolvedRows)
                {
                    var stopInfo = new StopInfo(qualityCondition, qaError.Description);
                    _rowsWithStopConditions.Add(involvedRow.TableName, involvedRow.OID,
                                                stopInfo);
                }
            }

            if (IsIssueGeometryOutsideTestPerimeter(qaError, qualityCondition))
            {
                args.Cancel = true;
                return;
            }

            IssueStats issueStats = GetIssueStats(qualityCondition);

            if (ExistsExceptionFor(qaError, element))
            {
                issueStats.AddException();
                return;
            }

            issueStats.AddIssue();

            if (element.AllowErrors)
            {
                WarningCount++;
            }
            else
            {
                ErrorCount++;
                Fulfilled = false;
            }

            _issueWriter.WriteIssue(qaError, element);
        }
Beispiel #4
0
        public void AddIssue(Issue issue, IGeometry errorGeometry)
        {
            AssertVerifying();

            IssueStats issueStats;

            if (!_issuesByQualityCondition.TryGetValue(
                    issue.QualitySpecificationElement,
                    out issueStats))
            {
                issueStats = new IssueStats();
                _issuesByQualityCondition.Add(issue.QualitySpecificationElement,
                                              issueStats);
            }

            issueStats.IssueCount = issueStats.IssueCount + 1;

            if (_issueContexts != IssueReportingContexts.None)
            {
                issueStats.AddIssue(CreateXmlIssue(issue, errorGeometry));
            }
        }
Beispiel #5
0
        // -------------------------------------------------------------------------------------------------------------

        static IssueStats[] CollectSelectionStats(IssueTableItem[] selectedItems)
        {
            var selectionsDict   = new Dictionary <int, IssueStats>();
            var selectedRoots    = selectedItems.Where(item => item.hasChildren);
            var selectedChildren = selectedItems.Where(item => item.parent != null);

            foreach (var rootItem in selectedRoots)
            {
                var        id = rootItem.ProblemDescriptor.id;
                IssueStats issueStats;
                if (!selectionsDict.TryGetValue(id, out issueStats))
                {
                    issueStats = new IssueStats {
                        id = id, numOccurrences = rootItem.children.Count
                    };
                    selectionsDict[id] = issueStats;
                }

                foreach (var child in rootItem.children)
                {
                    if (((IssueTableItem)child).ProjectIssue.isPerfCriticalContext)
                    {
                        ++issueStats.numHotPathOccurrences;
                    }
                }

                selectionsDict[id] = issueStats;
            }

            foreach (var childItem in selectedChildren)
            {
                var        id = childItem.ProblemDescriptor.id;
                IssueStats summary;
                if (!selectionsDict.TryGetValue(id, out summary))
                {
                    summary = new IssueStats
                    {
                        id = id
                    };
                    selectionsDict[id] = summary;
                }

                // Ensure that if an issue is selected AND its root/parent issue has been selected
                // that we don't count the child one. Otherwise we over-report.
                if (!selectedRoots.Any(item => item.ProblemDescriptor.id == id))
                {
                    ++summary.numOccurrences;

                    if (childItem.ProjectIssue.isPerfCriticalContext)
                    {
                        ++summary.numHotPathOccurrences;
                    }
                }

                selectionsDict[id] = summary;
            }

            var selectionsArray =
                selectionsDict.Values.OrderByDescending(x => x.numOccurrences).Take(5).ToArray();

            return(selectionsArray);
        }