From 97ad45993a48f860cf5957a204bca1fdbe4d7ee4 Mon Sep 17 00:00:00 2001 From: Pierre Date: Fri, 25 Feb 2022 14:40:37 +0100 Subject: [PATCH] SONAR-13588 External issue tags should inherit external rule tags --- .../org/sonar/xoo/rule/XooRulesDefinition.java | 3 ++- .../projectanalysis/issue/RuleTagsCopier.java | 4 +--- .../projectanalysis/issue/RuleTagsCopierTest.java | 15 ++++++++++++++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/XooRulesDefinition.java b/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/XooRulesDefinition.java index 7692f38f393..11c01bde690 100644 --- a/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/XooRulesDefinition.java +++ b/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/XooRulesDefinition.java @@ -225,7 +225,8 @@ public class XooRulesDefinition implements RulesDefinition { .setType(OnePredefinedRuleExternalIssuePerLineSensor.TYPE) .setScope(RuleScope.ALL) .setHtmlDescription("Generates one external issue in each line") - .setName("One external issue per line"); + .setName("One external issue per line") + .setTags("riri", "fifi", "loulou"); repo.done(); } diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/RuleTagsCopier.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/RuleTagsCopier.java index f48110bb5ae..ad98507da26 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/RuleTagsCopier.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/RuleTagsCopier.java @@ -37,9 +37,7 @@ public class RuleTagsCopier extends IssueVisitor { if (issue.isNew()) { // analyzer can provide some tags. They must be merged with rule tags Rule rule = ruleRepository.getByKey(issue.ruleKey()); - if (!rule.isExternal()) { - issue.setTags(union(issue.tags(), rule.getTags())); - } + issue.setTags(union(issue.tags(), rule.getTags())); } } } diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/RuleTagsCopierTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/RuleTagsCopierTest.java index 51a5773d3a6..f6465fdea37 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/RuleTagsCopierTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/RuleTagsCopierTest.java @@ -29,15 +29,18 @@ import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.sonar.db.rule.RuleTesting.XOO_X1; +import static org.sonar.db.rule.RuleTesting.XOO_X2; public class RuleTagsCopierTest { DumbRule rule = new DumbRule(XOO_X1); + DumbRule externalRule = new DumbRule(XOO_X2).setIsExternal(true); @org.junit.Rule - public RuleRepositoryRule ruleRepository = new RuleRepositoryRule().add(rule); + public RuleRepositoryRule ruleRepository = new RuleRepositoryRule().add(rule).add(externalRule); DefaultIssue issue = new DefaultIssue().setRuleKey(rule.getKey()); + DefaultIssue externalIssue = new DefaultIssue().setRuleKey(externalRule.getKey()); RuleTagsCopier underTest = new RuleTagsCopier(ruleRepository); @Test @@ -50,6 +53,16 @@ public class RuleTagsCopierTest { assertThat(issue.tags()).containsExactly("bug", "performance"); } + @Test + public void copy_tags_if_new_external_issue() { + externalRule.setTags(Sets.newHashSet("es_lint", "java")); + externalIssue.setNew(true); + + underTest.onIssue(mock(Component.class), externalIssue); + + assertThat(externalIssue.tags()).containsExactly("es_lint", "java"); + } + @Test public void do_not_copy_tags_if_existing_issue() { rule.setTags(Sets.newHashSet("bug", "performance")); -- 2.39.5