From d79f7cbc35d890f53ebcb380a87aba8479f3a946 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Fri, 14 Mar 2014 14:19:17 +0100 Subject: [PATCH] SONAR-5141 Minor improvement --- .../technicaldebt/TechnicalDebtDecorator.java | 23 ++++++++----------- .../TechnicalDebtDecoratorTest.java | 13 ++++++----- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/technicaldebt/TechnicalDebtDecorator.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/technicaldebt/TechnicalDebtDecorator.java index 633a5f26b22..c17c7021098 100644 --- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/technicaldebt/TechnicalDebtDecorator.java +++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/technicaldebt/TechnicalDebtDecorator.java @@ -99,30 +99,25 @@ public final class TechnicalDebtDecorator implements Decorator { // Aggregate rules debt from current issues (and populate current characteristic debt) for (Issue issue : issues) { Long debt = ((DefaultIssue) issue).debtInMinutes(); - if (computeDebt(debt, issue.ruleKey(), ruleDebts, characteristicDebts)) { - total += debt; - } + total += computeDebt(debt, issue.ruleKey(), ruleDebts, characteristicDebts); } // Aggregate rules debt from children (and populate children characteristics debt) for (Measure measure : context.getChildrenMeasures(MeasuresFilters.rules(CoreMetrics.TECHNICAL_DEBT))) { Long debt = measure.getValue().longValue(); RuleMeasure ruleMeasure = (RuleMeasure) measure; - if (computeDebt(debt, ruleMeasure.getRule().ruleKey(), ruleDebts, characteristicDebts)) { - total += debt; - } + total += computeDebt(debt, ruleMeasure.getRule().ruleKey(), ruleDebts, characteristicDebts); } context.saveMeasure(CoreMetrics.TECHNICAL_DEBT, total.doubleValue()); saveOnRule(context, ruleDebts); - for (Characteristic characteristic : model.characteristics()) { Long debt = characteristicDebts.get(characteristic); - saveTechnicalDebt(context, characteristic, debt != null ? debt.doubleValue() : 0d, false); + saveCharacteristicMeasure(context, characteristic, debt != null ? debt.doubleValue() : 0d, false); } } - private boolean computeDebt(@Nullable Long debt, RuleKey ruleKey, SumMap ruleDebts, SumMap characteristicDebts) { + private Long computeDebt(@Nullable Long debt, RuleKey ruleKey, SumMap ruleDebts, SumMap characteristicDebts) { if (debt != null) { Rule rule = rules.find(ruleKey); if (rule != null) { @@ -133,12 +128,12 @@ public final class TechnicalDebtDecorator implements Decorator { ruleDebts.add(ruleKey, debt); characteristicDebts.add(characteristic, debt); propagateTechnicalDebtInParents(characteristic.parent(), debt, characteristicDebts); - return true; + return debt; } } } } - return false; + return 0L; } private void propagateTechnicalDebtInParents(@Nullable Characteristic characteristic, long value, SumMap characteristicDebts) { @@ -152,13 +147,13 @@ public final class TechnicalDebtDecorator implements Decorator { for (Map.Entry entry : ruleDebts.entrySet()) { org.sonar.api.rules.Rule oldRule = ruleFinder.findByKey(entry.getKey()); if (oldRule != null) { - saveTechnicalDebt(context, oldRule, entry.getValue().doubleValue(), ResourceUtils.isEntity(context.getResource())); + saveRuleMeasure(context, oldRule, entry.getValue().doubleValue(), ResourceUtils.isEntity(context.getResource())); } } } @VisibleForTesting - void saveTechnicalDebt(DecoratorContext context, Characteristic characteristic, Double value, boolean inMemory) { + void saveCharacteristicMeasure(DecoratorContext context, Characteristic characteristic, Double value, boolean inMemory) { // we need the value on projects (root or module) even if value==0 in order to display correctly the SQALE history chart (see SQALE-122) // BUT we don't want to save zero-values for non top-characteristics (see SQALE-147) if (value > 0.0 || (ResourceUtils.isProject(context.getResource()) && characteristic.isRoot())) { @@ -169,7 +164,7 @@ public final class TechnicalDebtDecorator implements Decorator { } @VisibleForTesting - void saveTechnicalDebt(DecoratorContext context, org.sonar.api.rules.Rule rule, Double value, boolean inMemory) { + void saveRuleMeasure(DecoratorContext context, org.sonar.api.rules.Rule rule, Double value, boolean inMemory) { // we need the value on projects (root or module) even if value==0 in order to display correctly the SQALE history chart (see SQALE-122) // BUT we don't want to save zero-values for non top-characteristics (see SQALE-147) if (value > 0.0) { diff --git a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/technicaldebt/TechnicalDebtDecoratorTest.java b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/technicaldebt/TechnicalDebtDecoratorTest.java index 3db3b2493d1..958c1eb522d 100644 --- a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/technicaldebt/TechnicalDebtDecoratorTest.java +++ b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/technicaldebt/TechnicalDebtDecoratorTest.java @@ -21,7 +21,6 @@ package org.sonar.plugins.core.technicaldebt; import com.google.common.collect.Lists; -import java.util.Collections; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; @@ -51,6 +50,8 @@ import org.sonar.api.technicaldebt.batch.internal.DefaultCharacteristic; import org.sonar.api.test.IsMeasure; import org.sonar.api.utils.Duration; +import java.util.Collections; + import static com.google.common.collect.Lists.newArrayList; import static org.fest.assertions.Assertions.assertThat; import static org.mockito.Matchers.any; @@ -232,13 +233,13 @@ public class TechnicalDebtDecoratorTest { // for a project DecoratorContext context = mock(DecoratorContext.class); when(context.getResource()).thenReturn(new Project("foo")); - decorator.saveTechnicalDebt(context, (Characteristic) null, 12.0, false); + decorator.saveCharacteristicMeasure(context, (Characteristic) null, 12.0, false); verify(context, times(1)).saveMeasure(new Measure(CoreMetrics.TECHNICAL_DEBT)); // or for a file context = mock(DecoratorContext.class); when(context.getResource()).thenReturn(new File("foo")); - decorator.saveTechnicalDebt(context, (Characteristic) null, 12.0, false); + decorator.saveCharacteristicMeasure(context, (Characteristic) null, 12.0, false); verify(context, times(1)).saveMeasure(new Measure(CoreMetrics.TECHNICAL_DEBT)); } @@ -250,7 +251,7 @@ public class TechnicalDebtDecoratorTest { // this is a top characteristic DefaultCharacteristic rootCharacteristic = new DefaultCharacteristic().setKey("root"); - decorator.saveTechnicalDebt(context, rootCharacteristic, 0.0, true); + decorator.saveCharacteristicMeasure(context, rootCharacteristic, 0.0, true); verify(context, times(1)).saveMeasure(new Measure(CoreMetrics.TECHNICAL_DEBT).setCharacteristic(rootCharacteristic)); } @@ -265,7 +266,7 @@ public class TechnicalDebtDecoratorTest { DefaultCharacteristic rootCharacteristic = new DefaultCharacteristic().setKey("EFFICIENCY"); DefaultCharacteristic characteristic = new DefaultCharacteristic().setKey("MEMORY_EFFICIENCY").setParent(rootCharacteristic); - decorator.saveTechnicalDebt(context, characteristic, 0.0, true); + decorator.saveCharacteristicMeasure(context, characteristic, 0.0, true); verify(context, never()).saveMeasure(any(Measure.class)); } @@ -274,7 +275,7 @@ public class TechnicalDebtDecoratorTest { DecoratorContext context = mock(DecoratorContext.class); when(context.getResource()).thenReturn(new File("foo")); - decorator.saveTechnicalDebt(context, (Characteristic) null, 0.0, true); + decorator.saveCharacteristicMeasure(context, (Characteristic) null, 0.0, true); verify(context, never()).saveMeasure(new Measure(CoreMetrics.TECHNICAL_DEBT)); } -- 2.39.5