private void ValidateMetricsList(CodeMetricsRunner runner, TaskMetricList ml) { foreach (TaskMetric p in ml) { if (String.IsNullOrEmpty(p.ProviderName)) throw new MSBuildCodeMetricsTaskException("ProviderName must be informed in Metrics property"); if (!_providers.ContainsKey(p.ProviderName)) throw new MSBuildCodeMetricsTaskException("Invalid provider name in Metrics property: ProviderName: " + p.ProviderName); if (String.IsNullOrEmpty(p.MetricName)) throw new MSBuildCodeMetricsTaskException("Metric name in property Metrics can't be null (ProviderName: " + p.ProviderName); if (!runner.IsMetricRegistered(p.ProviderName, p.MetricName)) throw new MSBuildCodeMetricsTaskException("Provider " + p.ProviderName + " doesn't know how to handle metric " + p.MetricName); } }
private TaskMetricList ParseMetrics() { if (Metrics == null) throw new ArgumentNullException("Metrics"); if (Metrics.Length <= 0) throw new MSBuildCodeMetricsTaskException("At least one Metrics must be informed in Metrics property"); TaskMetricList ml = new TaskMetricList(); foreach (ITaskItem i in Metrics) { string metricName = i.ItemSpec; string providerName = i.GetMetadata("ProviderName"); List<int> ranges = new List<int>(); ParseRanges(i, ranges); if (ShowSummaryReport && (ranges == null || ranges.Count <= 0)) throw new MSBuildCodeMetricsTaskException("Ranges can't be null if you need a summary report. ProviderName: " + providerName + ", MetricName: " + metricName); string files = i.GetMetadata("Files"); if (String.IsNullOrEmpty(files)) throw new MSBuildCodeMetricsTaskException("Files must be informed in Metrics property. ProviderName: " + providerName + ", Metric: " + metricName); List<string> fileList = files.Split(';').ToList(); var metric = new TaskMetric(providerName, metricName, ranges, fileList); metric.HigherRangeFailMessage = i.GetMetadata("HigherRangeFailMessage"); metric.LowerRangeFailMessage = i.GetMetadata("LowerRangeFailMessage"); ml.Add(metric); } return ml; }
private void RunBuildFailChecks(MSBuildCodeMetricsReport report, TaskMetricList ml) { ml.ForEach(m => { if (!String.IsNullOrEmpty(m.HigherRangeFailMessage)) if (report.Summary.Metrics.First(metric => metric.MetricName == m.MetricName).Ranges[0].Count > 0) throw new MSBuildCodeMetricsTaskException(m.HigherRangeFailMessage); if (!String.IsNullOrEmpty(m.LowerRangeFailMessage)) { var ranges = report.Summary.Metrics.First(metric => metric.MetricName == m.MetricName).Ranges; if (ranges[ranges.Count - 1].Count > 0) throw new MSBuildCodeMetricsTaskException(m.LowerRangeFailMessage); } }); }
private MSBuildCodeMetricsReport GenerateReport(CodeMetricsRunner runner, TaskMetricList ml) { MSBuildCodeMetricsReport report = runner.GenerateReport(ml.ToMetricList(), ShowSummaryReport, ShowDetailsReport); if (FileOutput) GenerateFileOutput(report); if (ShowConsoleOutput) GenerateConsoleOutput(report); return report; }