private void computeTotalViolations(DecoratorContext context) { if (context.getMeasure(CoreMetrics.VIOLATIONS) == null) { Collection<Measure> childrenViolations = context.getChildrenMeasures(CoreMetrics.VIOLATIONS); Double sum = MeasureUtils.sum(true, childrenViolations); context.saveMeasure(CoreMetrics.VIOLATIONS, sum + context.getViolations().size()); } }
private void computeViolationsPerRules(DecoratorContext context) { Map<RulePriority, Multiset<Rule>> rulesPerSeverity = Maps.newHashMap(); for (Violation violation : context.getViolations()) { Multiset<Rule> rulesBag = initRules(rulesPerSeverity, violation.getSeverity()); rulesBag.add(violation.getRule()); } for (RulePriority severity : RulePriority.values()) { Metric metric = SeverityUtils.severityToViolationMetric(severity); Collection<Measure> children = context.getChildrenMeasures(MeasuresFilters.rules(metric)); for (Measure child : children) { RuleMeasure childRuleMeasure = (RuleMeasure) child; Rule rule = childRuleMeasure.getRule(); if (rule != null && MeasureUtils.hasValue(childRuleMeasure)) { Multiset<Rule> rulesBag = initRules(rulesPerSeverity, severity); rulesBag.add(rule, childRuleMeasure.getIntValue()); } } Multiset<Rule> rulesBag = rulesPerSeverity.get(severity); if (rulesBag != null) { for (Multiset.Entry<Rule> entry : rulesBag.entrySet()) { RuleMeasure measure = RuleMeasure.createForRule(metric, entry.getElement(), (double) entry.getCount()); measure.setSeverity(severity); context.saveMeasure(measure); } } } }
private int saveValue(DecoratorContext context, Metric metric, String ruleKey) { int result; result = MeasureUtils.sum(true, context.getChildrenMeasures(metric)).intValue(); for (Violation violation : context.getViolations()) { if (violation.getRule().getKey().equals(ruleKey)) { result++; } } context.saveMeasure(metric, (double) result); return result; }
@Test public void shouldNotSaveDataWhenNoMeasures() { NewCoverageAggregator aggregator = new NewCoverageAggregator(); DecoratorContext context = mock(DecoratorContext.class); when(context.getChildrenMeasures(CoreMetrics.NEW_LINES_TO_COVER)) .thenReturn(Collections.<Measure>emptyList()); aggregator.aggregate(context, CoreMetrics.NEW_LINES_TO_COVER, 3); verify(context, never()).saveMeasure(Matchers.<Measure>anyObject()); }
@Test public void shouldSaveZeroOnProjects() { when(resource.getScope()).thenReturn(Scopes.PROJECT); when(context.getViolations()).thenReturn(Collections.<Violation>emptyList()); when(context.getChildrenMeasures((MeasuresFilter) anyObject())) .thenReturn(Collections.<Measure>emptyList()); decorator.decorate(resource, context); verify(context).saveMeasure(CoreMetrics.VIOLATIONS, 0.0); }
private long getDevelopmentCost(DecoratorContext context) { InputFile file = fs.inputFile(fs.predicates().hasRelativePath(context.getResource().getKey())); if (file != null) { String language = file.language(); return getMeasureValue(context, sqaleRatingSettings.getSizeMetric(language, metrics)) * sqaleRatingSettings.getDevCost(language); } else { Collection<Measure> childrenMeasures = context.getChildrenMeasures(CoreMetrics.DEVELOPMENT_COST); Double sum = sum(childrenMeasures); return sum.longValue(); } }
private void computeViolationsPerSeverities(DecoratorContext context) { Multiset<RulePriority> severitiesBag = HashMultiset.create(); for (Violation violation : context.getViolations()) { severitiesBag.add(violation.getSeverity()); } for (RulePriority severity : RulePriority.values()) { Metric metric = SeverityUtils.severityToViolationMetric(severity); if (context.getMeasure(metric) == null) { Collection<Measure> children = context.getChildrenMeasures(MeasuresFilters.metric(metric)); int sum = MeasureUtils.sum(true, children).intValue() + severitiesBag.count(severity); context.saveMeasure(metric, (double) sum); } } }
@Test public void shouldCountViolationsBySeverity() { when(resource.getScope()).thenReturn(Scopes.PROJECT); when(context.getViolations()).thenReturn(createViolations()); when(context.getChildrenMeasures((MeasuresFilter) anyObject())) .thenReturn(Collections.<Measure>emptyList()); decorator.decorate(resource, context); verify(context).saveMeasure(CoreMetrics.BLOCKER_VIOLATIONS, 0.0); verify(context).saveMeasure(CoreMetrics.CRITICAL_VIOLATIONS, 2.0); verify(context).saveMeasure(CoreMetrics.MAJOR_VIOLATIONS, 1.0); verify(context).saveMeasure(CoreMetrics.MINOR_VIOLATIONS, 1.0); verify(context).saveMeasure(CoreMetrics.INFO_VIOLATIONS, 0.0); }
/** See http://jira.codehaus.org/browse/SONAR-1729 */ @Test public void shouldNotCountViolationsIfMeasureAlreadyExists() { when(resource.getScope()).thenReturn(Scopes.PROJECT); when(context.getViolations()).thenReturn(createViolations()); when(context.getChildrenMeasures((MeasuresFilter) anyObject())) .thenReturn(Collections.<Measure>emptyList()); when(context.getMeasure(CoreMetrics.VIOLATIONS)) .thenReturn(new Measure(CoreMetrics.VIOLATIONS, 3000.0)); when(context.getMeasure(CoreMetrics.MAJOR_VIOLATIONS)) .thenReturn(new Measure(CoreMetrics.MAJOR_VIOLATIONS, 500.0)); decorator.decorate(resource, context); verify(context, never()).saveMeasure(eq(CoreMetrics.VIOLATIONS), anyDouble()); // not changed verify(context, never()) .saveMeasure(eq(CoreMetrics.MAJOR_VIOLATIONS), anyDouble()); // not changed verify(context, times(1)) .saveMeasure(eq(CoreMetrics.CRITICAL_VIOLATIONS), anyDouble()); // did not exist }
@Test public void shouldSumValues() { NewCoverageAggregator aggregator = new NewCoverageAggregator(); DecoratorContext context = mock(DecoratorContext.class); when(context.getChildrenMeasures(CoreMetrics.NEW_LINES_TO_COVER)) .thenReturn(Arrays.asList(newMeasure(null, 3.0, 2.0), newMeasure(null, 13.0, null))); aggregator.aggregate(context, CoreMetrics.NEW_LINES_TO_COVER, 3); verify(context) .saveMeasure( argThat( new ArgumentMatcher<Measure>() { @Override public boolean matches(Object o) { Measure m = (Measure) o; return m.getVariation2() == 16.0 && m.getVariation3() == 2.0; } })); }
/** {@inheritDoc} */ public void decorate(Resource resource, DecoratorContext context) { if (ResourceUtils.isProject(resource)) { Collection<Measure> childMeasures = context.getChildrenMeasures(CodesizeMetrics.CODE_COUNTERS); if (!childMeasures.isEmpty()) { Measure projectMeasure = context.getMeasure(CodesizeMetrics.CODE_COUNTERS); final PropertiesBuilder<String, Integer> counters = new PropertiesBuilder<String, Integer>(CodesizeMetrics.CODE_COUNTERS); if (projectMeasure != null) { Map<String, Integer> map = KeyValueFormat.parseStringInt(projectMeasure.getData()); counters.addAll(map); } for (Measure childMeasure : childMeasures) { Map<String, Integer> childcounters = KeyValueFormat.parseStringInt(childMeasure.getData()); for (Entry<String, Integer> entry : childcounters.entrySet()) { String key = entry.getKey(); Integer value = entry.getValue(); if (counters.getProps().containsKey(key)) { counters.add(key, value + counters.getProps().get(key)); } else { counters.add(key, value); } } } if (projectMeasure != null) { projectMeasure.setData(counters.buildData()); } else { context.saveMeasure(counters.build()); } } } }
private double computeTechnicalDebt( Metric metric, DecoratorContext context, TechnicalDebtRequirement requirement, Collection<Issue> issues) { double value = 0.0; if (issues != null) { for (Issue issue : issues) { value += converter.toDays(((DefaultIssue) issue).technicalDebt()); } } for (Measure measure : context.getChildrenMeasures( MeasuresFilters.characteristic(metric, requirement.toCharacteristic()))) { if (measure.getCharacteristic() != null && measure.getCharacteristic().equals(requirement.toCharacteristic()) && measure.getValue() != null) { value += measure.getValue(); } } return value; }
private int sumChildren(DecoratorContext context, Metric metric) { return MeasureUtils.sum(true, context.getChildrenMeasures(metric)).intValue(); }