From a755196f047cc2f36a9612134d4f1c3482ccb4c5 Mon Sep 17 00:00:00 2001 From: Benjamin Campomenosi <109955405+benjamin-campomenosi-sonarsource@users.noreply.github.com> Date: Fri, 21 Apr 2023 12:17:10 +0200 Subject: [PATCH] SONAR-19050 Update xoo-plugin : use new rule characteristics in some issues --- .../java/org/sonar/xoo/rule/XooRulesDefinition.java | 13 ++++++++----- .../org/sonar/xoo/rule/XooRulesDefinitionTest.java | 9 +++++++++ 2 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 c818dadcbc9..058a8154414 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 @@ -22,6 +22,7 @@ package org.sonar.xoo.rule; import javax.annotation.Nullable; import org.sonar.api.SonarRuntime; import org.sonar.api.rule.RuleScope; +import org.sonar.api.rules.RuleCharacteristic; import org.sonar.api.rules.RuleType; import org.sonar.api.server.rule.RuleDescriptionSection; import org.sonar.api.server.rule.RuleParamType; @@ -145,7 +146,7 @@ public class XooRulesDefinition implements RulesDefinition { NewRule oneBugIssuePerTestLine = repo.createRule(OneBugIssuePerTestLineSensor.RULE_KEY).setName("One Bug Issue Per Test Line") .setScope(RuleScope.TEST) - .setType(RuleType.BUG); + .setType(RuleType.BUG).setCharacteristic(RuleCharacteristic.COMPLIANT); addAllDescriptionSections(oneBugIssuePerTestLine, "Generate a bug issue on each line of a test file. It requires the metric \"lines\"."); oneBugIssuePerTestLine @@ -188,10 +189,10 @@ public class XooRulesDefinition implements RulesDefinition { NewRule hotspotWithRangeAndMultipleLocations = repo.createRule(MultilineHotspotSensor.RULE_KEY) .setName("Creates hotspots with ranges/multiple locations") - .setType(RuleType.SECURITY_HOTSPOT); + .setType(RuleType.SECURITY_HOTSPOT) + .setCharacteristic(RuleCharacteristic.PORTABLE); addAllDescriptionSections(hotspotWithRangeAndMultipleLocations, "Hotspot with range and multiple locations"); - NewRule issueOnEachFileWithExtUnknown = repo.createRule(OneIssuePerUnknownFileSensor.RULE_KEY).setName("Creates issues on each file with extension 'unknown'"); addAllDescriptionSections(issueOnEachFileWithExtUnknown, "This issue is generated on each file with extenstion 'unknown'"); @@ -202,13 +203,14 @@ public class XooRulesDefinition implements RulesDefinition { addAllDescriptionSections(oneBugIssuePerLine, "Generate a bug issue on each line of a file. It requires the metric \"lines\"."); NewRule oneCodeSmellIssuePerLine = repo.createRule(OneCodeSmellIssuePerLineSensor.RULE_KEY).setName("One Code Smell Issue Per Line") - .setType(RuleType.CODE_SMELL); + .setType(RuleType.CODE_SMELL) + .setCharacteristic(RuleCharacteristic.STRUCTURED); oneCodeSmellIssuePerLine .setDebtRemediationFunction(oneCodeSmellIssuePerLine.debtRemediationFunctions().linear("9min")); addAllDescriptionSections(oneCodeSmellIssuePerLine, "Generate a code smell issue on each line of a file. It requires the metric \"lines\"."); NewRule oneVulnerabilityIssuePerModule = repo.createRule(OneVulnerabilityIssuePerModuleSensor.RULE_KEY).setName("One Vulnerability Issue Per Module") - .setType(RuleType.VULNERABILITY); + .setType(RuleType.VULNERABILITY).setCharacteristic(RuleCharacteristic.ROBUST); addAllDescriptionSections(oneVulnerabilityIssuePerModule, "Generate an issue on each module"); oneVulnerabilityIssuePerModule @@ -274,6 +276,7 @@ public class XooRulesDefinition implements RulesDefinition { NewRule hotspotWithSingleContext = repo.createRule(HotspotWithSingleContextSensor.RULE_KEY) .setName("Find security hotspots, how_to_fix with single context") .setType(RuleType.SECURITY_HOTSPOT) + .setCharacteristic(RuleCharacteristic.SECURE) .setActivatedByDefault(false) .addDescriptionSection(howToFixSectionWithContext("single_context")); addDescriptionSectionsWithoutContexts(hotspotWithSingleContext, "Search for Security Hotspots with single context in Xoo files"); diff --git a/plugins/sonar-xoo-plugin/src/test/java/org/sonar/xoo/rule/XooRulesDefinitionTest.java b/plugins/sonar-xoo-plugin/src/test/java/org/sonar/xoo/rule/XooRulesDefinitionTest.java index 8d3ece2a71c..d851fb4f26f 100644 --- a/plugins/sonar-xoo-plugin/src/test/java/org/sonar/xoo/rule/XooRulesDefinitionTest.java +++ b/plugins/sonar-xoo-plugin/src/test/java/org/sonar/xoo/rule/XooRulesDefinitionTest.java @@ -25,6 +25,7 @@ import org.sonar.api.SonarEdition; import org.sonar.api.SonarQubeSide; import org.sonar.api.impl.server.RulesDefinitionContext; import org.sonar.api.internal.SonarRuntimeImpl; +import org.sonar.api.rules.RuleCharacteristic; import org.sonar.api.server.debt.DebtRemediationFunction; import org.sonar.api.server.rule.RulesDefinition; import org.sonar.api.utils.Version; @@ -55,6 +56,7 @@ public class XooRulesDefinitionTest { assertThat(rule.debtRemediationFunction().gapMultiplier()).isEqualTo("1min"); assertThat(rule.debtRemediationFunction().baseEffort()).isNull(); assertThat(rule.gapDescription()).isNotEmpty(); + assertThat(rule.characteristic()).isNull(); assertThat(rule.ruleDescriptionSections()).isNotEmpty(); assertThat(rule.ruleDescriptionSections().stream().anyMatch(rds -> rds.getContext().isPresent())).isTrue(); } @@ -114,6 +116,13 @@ public class XooRulesDefinitionTest { assertThat(repo.rules()).hasSize(2); } + @Test + public void define_xoo_rule_with_characteristic() { + RulesDefinition.Repository repo = context.repository("xoo"); + RulesDefinition.Rule oneCodeSmellIssuePerLine = repo.rule("OneCodeSmellIssuePerLine"); + assertThat(oneCodeSmellIssuePerLine.characteristic()).isEqualTo(RuleCharacteristic.STRUCTURED); + } + private RulesDefinition.Repository getRepository() { RulesDefinition.Repository repo = context.repository("xoo"); assertThat(repo).isNotNull(); -- 2.39.5