]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-22537 add support for short and full description in adhoc rule created from...
authorSteve Marion <steve.marion@sonarsource.com>
Fri, 26 Jul 2024 09:13:16 +0000 (11:13 +0200)
committersonartech <sonartech@sonarsource.com>
Mon, 29 Jul 2024 20:02:48 +0000 (20:02 +0000)
sonar-scanner-engine/src/main/java/org/sonar/scanner/externalissue/sarif/RuleMapper.java
sonar-scanner-engine/src/test/java/org/sonar/scanner/externalissue/sarif/RuleMapperTest.java

index 5638088fd114ffbdf9bf1636d40bc48082228934..1c4f387fc20039ce2d34168ba315291145efd41b 100644 (file)
@@ -20,6 +20,7 @@
 package org.sonar.scanner.externalissue.sarif;
 
 import javax.annotation.Nullable;
+import org.apache.commons.lang3.StringUtils;
 import org.sonar.api.batch.sensor.SensorContext;
 import org.sonar.api.batch.sensor.rule.NewAdHocRule;
 import org.sonar.api.scanner.ScannerSide;
@@ -38,13 +39,25 @@ public class RuleMapper {
   }
 
   NewAdHocRule mapRule(ReportingDescriptor rule, String driverName, @Nullable Result.Level ruleSeverity, @Nullable Result.Level ruleSeverityForNewTaxonomy) {
-    return sensorContext.newAdHocRule()
+
+    NewAdHocRule newAdHocRule = sensorContext.newAdHocRule()
       .severity(ResultMapper.toSonarQubeSeverity(ruleSeverity))
       .type(ResultMapper.DEFAULT_TYPE)
       .ruleId(rule.getId())
       .engineId(driverName)
-      .name(join(":", driverName, rule.getId()))
       .cleanCodeAttribute(ResultMapper.DEFAULT_CLEAN_CODE_ATTRIBUTE)
       .addDefaultImpact(ResultMapper.DEFAULT_SOFTWARE_QUALITY, ResultMapper.toSonarQubeImpactSeverity(ruleSeverityForNewTaxonomy));
+
+    if (rule.getShortDescription() != null && !StringUtils.isBlank(rule.getShortDescription().getText())) {
+      newAdHocRule.name(rule.getShortDescription().getText());
+    } else {
+      newAdHocRule.name(join(":", driverName, rule.getId()));
+    }
+
+    if (rule.getFullDescription() != null && !StringUtils.isBlank(rule.getFullDescription().getText())) {
+      newAdHocRule.description(rule.getFullDescription().getText());
+    }
+
+    return newAdHocRule;
   }
 }
index da6cb4137f200805815bd1fc193af0c33cb17c81..5dbf2c36aad1bea7887b6442c554a19ccb9d2ff4 100644 (file)
@@ -29,6 +29,7 @@ import org.mockito.MockitoAnnotations;
 import org.sonar.api.batch.sensor.SensorContext;
 import org.sonar.api.batch.sensor.rule.NewAdHocRule;
 import org.sonar.api.batch.sensor.rule.internal.DefaultAdHocRule;
+import org.sonar.sarif.pojo.MultiformatMessageString;
 import org.sonar.sarif.pojo.ReportingDescriptor;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -40,6 +41,8 @@ public class RuleMapperTest {
 
   private static final String RULE_ID = "test_rules_id";
   private static final String DRIVER_NAME = "driverName";
+  private static final String SHORT_DESCRIPTION = "short_description";
+  private static final String LONG_DESCRIPTION = "loooooooooooooooooooooong description of the rule";
 
   @Mock
   private SensorContext sensorContext;
@@ -56,7 +59,28 @@ public class RuleMapperTest {
   @Test
   public void mapRule_shouldCorrectlyMapToNewAdHocRule() {
     ReportingDescriptor rule = new ReportingDescriptor().withId(RULE_ID);
-    NewAdHocRule expected = new DefaultAdHocRule()
+    NewAdHocRule expected = buildDefaultExpected();
+
+    NewAdHocRule result = ruleMapper.mapRule(rule, DRIVER_NAME, WARNING, WARNING);
+    assertThat(result).usingRecursiveComparison().isEqualTo(expected);
+  }
+
+  @Test
+  public void bbmapRule_shouldCorrectlyMapToNewAdHocRuleWithDescription() {
+    ReportingDescriptor rule = new ReportingDescriptor()
+      .withId(RULE_ID)
+      .withShortDescription(new MultiformatMessageString().withText(SHORT_DESCRIPTION))
+      .withFullDescription(new MultiformatMessageString().withText(LONG_DESCRIPTION));
+    NewAdHocRule expected = buildDefaultExpected()
+      .name(SHORT_DESCRIPTION)
+      .description(LONG_DESCRIPTION);
+
+    NewAdHocRule result = ruleMapper.mapRule(rule, DRIVER_NAME, WARNING, WARNING);
+    assertThat(result).usingRecursiveComparison().isEqualTo(expected);
+  }
+
+  private static DefaultAdHocRule buildDefaultExpected() {
+    return new DefaultAdHocRule()
       .severity(ResultMapper.DEFAULT_SEVERITY)
       .type(ResultMapper.DEFAULT_TYPE)
       .ruleId(RULE_ID)
@@ -64,10 +88,5 @@ public class RuleMapperTest {
       .name(String.join(":", DRIVER_NAME, RULE_ID))
       .cleanCodeAttribute(ResultMapper.DEFAULT_CLEAN_CODE_ATTRIBUTE)
       .addDefaultImpact(ResultMapper.DEFAULT_SOFTWARE_QUALITY, org.sonar.api.issue.impact.Severity.MEDIUM);
-
-    NewAdHocRule result = ruleMapper.mapRule(rule, DRIVER_NAME, WARNING, WARNING);
-
-    assertThat(result).usingRecursiveComparison().isEqualTo(expected);
   }
-
 }