From: Julien Lancelot Date: Thu, 20 Mar 2014 17:57:40 +0000 (+0100) Subject: SONAR-5056 Fix issue when removing characteristic and rules linked with default chara... X-Git-Tag: 4.3~334 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=d93268cebc05e32cf5fee908538350d44859962b;p=sonarqube.git SONAR-5056 Fix issue when removing characteristic and rules linked with default characteristic linked on it was updated --- 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 75afe603f4f..701a5b9f81e 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 @@ -81,7 +81,7 @@ public class RulesProvider extends ProviderAdapter { if (ruleDto.hasCharacteristic()) { newRule.setDebtCharacteristic(effectiveCharacteristic(ruleDto, ruleKey, debtModel).key()); - newRule.setDebtRemediationFunction(effectiveFunction(ruleDto, ruleKey, newRule, durations)); + newRule.setDebtRemediationFunction(effectiveFunction(ruleDto, ruleKey, durations)); } for (RuleParamDto ruleParamDto : paramDtosByRuleId.get(ruleDto.getId())) { @@ -103,7 +103,7 @@ public class RulesProvider extends ProviderAdapter { return characteristic; } - private DebtRemediationFunction effectiveFunction(RuleDto ruleDto, RuleKey ruleKey, NewRule newRule, Durations durations) { + private DebtRemediationFunction effectiveFunction(RuleDto ruleDto, RuleKey ruleKey, Durations durations) { String function = ruleDto.getRemediationFunction(); String defaultFunction = ruleDto.getDefaultRemediationFunction(); if (function != null) { 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 d87e6b3189b..08106710bfe 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 @@ -173,6 +173,17 @@ public class RulesProviderTest extends AbstractDaoTestCase { assertThat(rule.debtRemediationFunction()).isNull(); } + @Test + public void build_rules_with_default_characteristic_and_disable_characteristic() throws Exception { + setupData("build_rules_with_default_characteristic_and_disable_characteristic"); + + Rules rules = provider.provide(ruleDao, debtModel, durations); + + Rule rule = rules.find(RuleKey.of("checkstyle", "AvoidNull")); + assertThat(rule.debtCharacteristic()).isNull(); + assertThat(rule.debtRemediationFunction()).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_default_characteristic_and_disable_characteristic.xml b/sonar-batch/src/test/resources/org/sonar/batch/rule/RulesProviderTest/build_rules_with_default_characteristic_and_disable_characteristic.xml new file mode 100644 index 00000000000..695d1dfcb4e --- /dev/null +++ b/sonar-batch/src/test/resources/org/sonar/batch/rule/RulesProviderTest/build_rules_with_default_characteristic_and_disable_characteristic.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/sonar-core/src/main/java/org/sonar/core/rule/RuleDao.java b/sonar-core/src/main/java/org/sonar/core/rule/RuleDao.java index 0324dac5cb0..74878a71ff6 100644 --- a/sonar-core/src/main/java/org/sonar/core/rule/RuleDao.java +++ b/sonar-core/src/main/java/org/sonar/core/rule/RuleDao.java @@ -63,17 +63,17 @@ public class RuleDao implements BatchComponent, ServerComponent { return getMapper(session).selectNonManual(); } - public List selectByCharacteristicOrSubCharacteristicId(Integer characteristicOrSubCharacteristicId) { + public List selectBySubCharacteristicId(Integer characteristicOrSubCharacteristicId) { SqlSession session = mybatis.openSession(); try { - return selectByCharacteristicOrSubCharacteristicId(characteristicOrSubCharacteristicId, session); + return selectBySubCharacteristicId(characteristicOrSubCharacteristicId, session); } finally { MyBatis.closeQuietly(session); } } - public List selectByCharacteristicOrSubCharacteristicId(Integer characteristicOrSubCharacteristicId, SqlSession session) { - return getMapper(session).selectByCharacteristicOrSubCharacteristicId(characteristicOrSubCharacteristicId); + public List selectBySubCharacteristicId(Integer characteristicOrSubCharacteristicId, SqlSession session) { + return getMapper(session).selectBySubCharacteristicId(characteristicOrSubCharacteristicId); } public List selectOverridingDebt(List repositories) { 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 86ab08a3dcd..e53232b57f9 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 @@ -315,7 +315,7 @@ public final class RuleDto { } public boolean hasCharacteristic(){ - return (characteristicId != null && !RuleDto.DISABLED_CHARACTERISTIC_ID.equals(characteristicId)) || defaultCharacteristicId != null; + return ((characteristicId != null && !RuleDto.DISABLED_CHARACTERISTIC_ID.equals(characteristicId))) || (characteristicId == null && defaultCharacteristicId != null); } @Override diff --git a/sonar-core/src/main/java/org/sonar/core/rule/RuleMapper.java b/sonar-core/src/main/java/org/sonar/core/rule/RuleMapper.java index 9b49070b0d0..5976f9c2dd2 100644 --- a/sonar-core/src/main/java/org/sonar/core/rule/RuleMapper.java +++ b/sonar-core/src/main/java/org/sonar/core/rule/RuleMapper.java @@ -30,7 +30,7 @@ public interface RuleMapper { List selectNonManual(); - List selectByCharacteristicOrSubCharacteristicId(int id); + List selectBySubCharacteristicId(int characteristicId); List selectOverridingDebt(@Param("repositories") List repositories); diff --git a/sonar-core/src/main/resources/org/sonar/core/rule/RuleMapper.xml b/sonar-core/src/main/resources/org/sonar/core/rule/RuleMapper.xml index 7f61cd090d4..16d37d6a426 100644 --- a/sonar-core/src/main/resources/org/sonar/core/rule/RuleMapper.xml +++ b/sonar-core/src/main/resources/org/sonar/core/rule/RuleMapper.xml @@ -4,75 +4,74 @@ - id, - plugin_rule_key as "ruleKey", - plugin_name as "repositoryKey", - description, - status, - name, - plugin_config_key as "configKey", - priority as "severity", - cardinality, - language as "language", - parent_id as "parentId", - note_data as "noteData", - note_user_login as "noteUserLogin", - note_created_at as "noteCreatedAt", - note_updated_at as "noteUpdatedAt", - characteristic_id as "characteristicId", - default_characteristic_id as "defaultCharacteristicId", - remediation_function as "remediationFunction", - default_remediation_function as "defaultRemediationFunction", - remediation_factor as "remediationFactor", - default_remediation_factor as "defaultRemediationFactor", - remediation_offset as "remediationOffset", - default_remediation_offset as "defaultRemediationOffset", - effort_to_fix_description as "effortToFixDescription", - created_at as "createdAt", - updated_at as "updatedAt" + r.id, + r.plugin_rule_key as "ruleKey", + r.plugin_name as "repositoryKey", + r.description, + r.status, + r.name, + r.plugin_config_key as "configKey", + r.priority as "severity", + r.cardinality, + r.language as "language", + r.parent_id as "parentId", + r.note_data as "noteData", + r.note_user_login as "noteUserLogin", + r.note_created_at as "noteCreatedAt", + r.note_updated_at as "noteUpdatedAt", + r.characteristic_id as "characteristicId", + r.default_characteristic_id as "defaultCharacteristicId", + r.remediation_function as "remediationFunction", + r.default_remediation_function as "defaultRemediationFunction", + r.remediation_factor as "remediationFactor", + r.default_remediation_factor as "defaultRemediationFactor", + r.remediation_offset as "remediationOffset", + r.default_remediation_offset as "defaultRemediationOffset", + r.effort_to_fix_description as "effortToFixDescription", + r.created_at as "createdAt", + r.updated_at as "updatedAt" - + select from rules r - and characteristic_id in (select c.id from characteristics c where (c.id=#{id} or c.parent_id=#{id}) and c.enabled=${_true}) - and status!='REMOVED' + and (r.characteristic_id=#{characteristicId} or r.default_characteristic_id=#{characteristicId})