From 856cb1ba1c597dedbb8c673fba61baad71e2d5bc Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Thu, 13 Mar 2014 09:05:24 +0100 Subject: [PATCH] SONAR-5056 When loading rules on batch side, do not load rule debt informations if characteristic has been disabled by user --- .../org/sonar/batch/rule/RulesProvider.java | 20 ++++++++++--------- .../sonar/batch/rule/RulesProviderTest.java | 13 ++++++++++++ ...uild_rules_with_disable_characteristic.xml | 9 +++++++++ .../java/org/sonar/core/rule/RuleDto.java | 6 +++--- 4 files changed, 36 insertions(+), 12 deletions(-) create mode 100644 sonar-batch/src/test/resources/org/sonar/batch/rule/RulesProviderTest/build_rules_with_disable_characteristic.xml diff --git a/sonar-batch/src/main/java/org/sonar/batch/rule/RulesProvider.java b/sonar-batch/src/main/java/org/sonar/batch/rule/RulesProvider.java index 9d68bc326ab..75d7c9ae587 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/rule/RulesProvider.java +++ b/sonar-batch/src/main/java/org/sonar/batch/rule/RulesProvider.java @@ -78,15 +78,17 @@ public class RulesProvider extends ProviderAdapter { .setDescription(ruleDto.getDescription()) .setStatus(RuleStatus.valueOf(ruleDto.getStatus())); // TODO should we set metadata ? - Integer characteristicId = ruleDto.getCharacteristicId(); - Integer defaultCharacteristicId = ruleDto.getDefaultCharacteristicId(); - if (characteristicId != null) { - Characteristic characteristic = characteristic(characteristicId, ruleKey, debtModel); - updateRuleDebtDefinitions(newRule, ruleKey, characteristic, ruleDto.getRemediationFunction(), ruleDto.getRemediationFactor(), ruleDto.getRemediationOffset(), durations); - } else if (defaultCharacteristicId != null) { - Characteristic characteristic = characteristic(defaultCharacteristicId, ruleKey, debtModel); - updateRuleDebtDefinitions(newRule, ruleKey, characteristic, ruleDto.getDefaultRemediationFunction(), ruleDto.getDefaultRemediationFactor(), - ruleDto.getDefaultRemediationOffset(), durations); + if (!ruleDto.isCharacteristicDisabled()) { + Integer characteristicId = ruleDto.getCharacteristicId(); + Integer defaultCharacteristicId = ruleDto.getDefaultCharacteristicId(); + if (characteristicId != null) { + Characteristic characteristic = characteristic(characteristicId, ruleKey, debtModel); + updateRuleDebtDefinitions(newRule, ruleKey, characteristic, ruleDto.getRemediationFunction(), ruleDto.getRemediationFactor(), ruleDto.getRemediationOffset(), durations); + } else if (defaultCharacteristicId != null) { + Characteristic characteristic = characteristic(defaultCharacteristicId, ruleKey, debtModel); + updateRuleDebtDefinitions(newRule, ruleKey, characteristic, ruleDto.getDefaultRemediationFunction(), ruleDto.getDefaultRemediationFactor(), + ruleDto.getDefaultRemediationOffset(), durations); + } } for (RuleParamDto ruleParamDto : paramDtosByRuleId.get(ruleDto.getId())) { newRule.addParam(ruleParamDto.getName()) diff --git a/sonar-batch/src/test/java/org/sonar/batch/rule/RulesProviderTest.java b/sonar-batch/src/test/java/org/sonar/batch/rule/RulesProviderTest.java index 5b457dd01c0..14be820ef4f 100644 --- a/sonar-batch/src/test/java/org/sonar/batch/rule/RulesProviderTest.java +++ b/sonar-batch/src/test/java/org/sonar/batch/rule/RulesProviderTest.java @@ -144,6 +144,19 @@ public class RulesProviderTest extends AbstractDaoTestCase { assertThat(rule.offset()).isNull(); } + @Test + public void build_rules_with_disable_characteristic() throws Exception { + setupData("build_rules_with_disable_characteristic"); + + Rules rules = provider.provide(ruleDao, debtModel, durations); + + Rule rule = rules.find(RuleKey.of("checkstyle", "AvoidNull")); + assertThat(rule.characteristic()).isNull(); + assertThat(rule.function()).isNull(); + assertThat(rule.factor()).isNull(); + assertThat(rule.offset()).isNull(); + } + @Test public void fail_if_characteristic_not_found() throws Exception { setupData("fail_if_characteristic_not_found"); diff --git a/sonar-batch/src/test/resources/org/sonar/batch/rule/RulesProviderTest/build_rules_with_disable_characteristic.xml b/sonar-batch/src/test/resources/org/sonar/batch/rule/RulesProviderTest/build_rules_with_disable_characteristic.xml new file mode 100644 index 00000000000..eb181a7080b --- /dev/null +++ b/sonar-batch/src/test/resources/org/sonar/batch/rule/RulesProviderTest/build_rules_with_disable_characteristic.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/sonar-core/src/main/java/org/sonar/core/rule/RuleDto.java b/sonar-core/src/main/java/org/sonar/core/rule/RuleDto.java index 1a15490d8a6..d0a8b978db3 100644 --- a/sonar-core/src/main/java/org/sonar/core/rule/RuleDto.java +++ b/sonar-core/src/main/java/org/sonar/core/rule/RuleDto.java @@ -32,7 +32,7 @@ import java.util.Date; public final class RuleDto { - public final static Integer DISABLED_CHARACTERISTIC_ID = -1; + public static final Integer DISABLED_CHARACTERISTIC_ID = -1; private Integer id; private String repositoryKey; @@ -314,8 +314,8 @@ public final class RuleDto { return this; } - public boolean isCharacteristicOverridden(){ - return !DISABLED_CHARACTERISTIC_ID.equals(characteristicId); + public boolean isCharacteristicDisabled(){ + return DISABLED_CHARACTERISTIC_ID.equals(characteristicId); } @Override -- 2.39.5