aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-db-dao
diff options
context:
space:
mode:
authorLéo Geoffroy <leo.geoffroy@sonarsource.com>2023-08-02 11:31:28 +0200
committersonartech <sonartech@sonarsource.com>2023-08-18 20:02:47 +0000
commit5f96642125af3af740f79d19e299ca79dbd89545 (patch)
treeafa11af73470ab5fc8bcb7e644399c0d963c37de /server/sonar-db-dao
parentec36845bbb03ae52ff98f6a2da2eca346336acd5 (diff)
downloadsonarqube-5f96642125af3af740f79d19e299ca79dbd89545.tar.gz
sonarqube-5f96642125af3af740f79d19e299ca79dbd89545.zip
SONAR-20021 Add clean code attribute to RuleDto and IssueDto
Diffstat (limited to 'server/sonar-db-dao')
-rw-r--r--server/sonar-db-dao/src/it/java/org/sonar/db/issue/IssueDaoIT.java4
-rw-r--r--server/sonar-db-dao/src/it/java/org/sonar/db/rule/RuleDaoIT.java5
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/issue/IssueDto.java12
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDto.java13
-rw-r--r--server/sonar-db-dao/src/main/resources/org/sonar/db/issue/IssueMapper.xml2
-rw-r--r--server/sonar-db-dao/src/main/resources/org/sonar/db/rule/RuleMapper.xml6
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/issue/IssueDtoTest.java4
-rw-r--r--server/sonar-db-dao/src/testFixtures/java/org/sonar/db/rule/RuleTesting.java2
8 files changed, 44 insertions, 4 deletions
diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/issue/IssueDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/issue/IssueDaoIT.java
index 5a3f2a1214c..6d6d1f8d4c8 100644
--- a/server/sonar-db-dao/src/it/java/org/sonar/db/issue/IssueDaoIT.java
+++ b/server/sonar-db-dao/src/it/java/org/sonar/db/issue/IssueDaoIT.java
@@ -142,7 +142,7 @@ public class IssueDaoIT {
IssueDto issue = underTest.selectOrFailByKey(db.getSession(), ISSUE_KEY1);
assertThat(issue).usingRecursiveComparison()
- .ignoringFields("filePath", "issueCreationDate", "issueUpdateDate", "issueCloseDate")
+ .ignoringFields("filePath", "issueCreationDate", "issueUpdateDate", "issueCloseDate", "cleanCodeAttribute")
.isEqualTo(expected);
assertThat(issue.parseMessageFormattings()).isEqualTo(MESSAGE_FORMATTING);
assertThat(issue.getIssueCreationDate()).isNotNull();
@@ -150,6 +150,7 @@ public class IssueDaoIT {
assertThat(issue.getIssueCloseDate()).isNotNull();
assertThat(issue.getRuleRepo()).isEqualTo(RULE.getRepositoryKey());
assertThat(issue.getRule()).isEqualTo(RULE.getRuleKey());
+ assertThat(issue.getCleanCodeAttribute()).isEqualTo(RULE.getCleanCodeAttribute());
assertThat(issue.parseLocations()).isNull();
}
@@ -776,6 +777,7 @@ public class IssueDaoIT {
dto.setCodeVariants(Set.of("variant1", "variant2"));
return dto;
}
+
private void prepareTables() {
underTest.insert(db.getSession(), newIssueDto(ISSUE_KEY1)
.setMessage("the message")
diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/rule/RuleDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/rule/RuleDaoIT.java
index 498680a1873..d705cfdf883 100644
--- a/server/sonar-db-dao/src/it/java/org/sonar/db/rule/RuleDaoIT.java
+++ b/server/sonar-db-dao/src/it/java/org/sonar/db/rule/RuleDaoIT.java
@@ -37,6 +37,7 @@ import org.junit.Test;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rule.RuleStatus;
import org.sonar.api.rule.Severity;
+import org.sonar.api.rules.CleanCodeAttribute;
import org.sonar.api.rules.RuleQuery;
import org.sonar.api.rules.RuleType;
import org.sonar.api.server.debt.DebtRemediationFunction;
@@ -238,6 +239,7 @@ public class RuleDaoIT {
assertThat(actual.getRuleDescriptionSectionDtos()).usingRecursiveFieldByFieldElementComparator()
.containsExactlyInAnyOrderElementsOf(expected.getRuleDescriptionSectionDtos());
assertThat(actual.getEducationPrinciples()).isEqualTo(expected.getEducationPrinciples());
+ assertThat(actual.getCleanCodeAttribute()).isEqualTo(expected.getCleanCodeAttribute());
}
@Test
@@ -456,6 +458,7 @@ public class RuleDaoIT {
.setSystemTags(newHashSet("systag1", "systag2"))
.setSecurityStandards(newHashSet("owaspTop10:a1", "cwe:123"))
.setType(RuleType.BUG)
+ .setCleanCodeAttribute(CleanCodeAttribute.CLEAR)
.setScope(Scope.ALL)
.setCreatedAt(1_500_000_000_000L)
.setUpdatedAt(2_000_000_000_000L);
@@ -488,6 +491,7 @@ public class RuleDaoIT {
assertThat(ruleDto.getDescriptionFormat()).isEqualTo(RuleDto.Format.MARKDOWN);
assertThat(ruleDto.getRuleDescriptionSectionDtos()).usingRecursiveFieldByFieldElementComparator()
.containsOnly(sectionDto);
+ assertThat(ruleDto.getCleanCodeAttribute()).isEqualTo(CleanCodeAttribute.CLEAR);
}
@Test
@@ -517,6 +521,7 @@ public class RuleDaoIT {
.setSecurityStandards(newHashSet("owaspTop10:a1", "cwe:123"))
.setScope(Scope.ALL)
.setType(RuleType.BUG)
+ .setCleanCodeAttribute(CleanCodeAttribute.TRUSTWORTHY)
.setUpdatedAt(2_000_000_000_000L);
underTest.update(db.getSession(), ruleToUpdate);
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/issue/IssueDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/issue/IssueDto.java
index 06334fd6de6..0cd237eaedb 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/issue/IssueDto.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/issue/IssueDto.java
@@ -34,6 +34,7 @@ import javax.annotation.Nullable;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.sonar.api.rule.RuleKey;
+import org.sonar.api.rules.CleanCodeAttribute;
import org.sonar.api.rules.RuleType;
import org.sonar.api.utils.Duration;
import org.sonar.core.issue.DefaultIssue;
@@ -53,6 +54,7 @@ public final class IssueDto implements Serializable {
private static final Splitter STRING_LIST_SPLITTER = Splitter.on(STRING_LIST_SEPARATOR).trimResults().omitEmptyStrings();
private int type;
+ private CleanCodeAttribute cleanCodeAttribute;
private String kee;
private String componentUuid;
private String projectUuid;
@@ -492,6 +494,7 @@ public final class IssueDto implements Serializable {
this.ruleRepo = rule.getRepositoryKey();
this.language = rule.getLanguage();
this.isExternal = rule.isExternal();
+ this.cleanCodeAttribute = rule.getCleanCodeAttribute();
return this;
}
@@ -744,6 +747,15 @@ public final class IssueDto implements Serializable {
return this;
}
+ public CleanCodeAttribute getCleanCodeAttribute() {
+ return cleanCodeAttribute;
+ }
+
+ public IssueDto setCleanCodeAttribute(CleanCodeAttribute cleanCodeAttribute) {
+ this.cleanCodeAttribute = cleanCodeAttribute;
+ return this;
+ }
+
public Optional<String> getClosedChangeData() {
return Optional.ofNullable(closedChangeData);
}
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDto.java
index d88245d7486..ba3d01d4aa7 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDto.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDto.java
@@ -33,6 +33,7 @@ import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rule.RuleStatus;
+import org.sonar.api.rules.CleanCodeAttribute;
import org.sonar.api.rules.RuleType;
import static com.google.common.base.Preconditions.checkArgument;
@@ -98,6 +99,7 @@ public class RuleDto {
private String systemTagsField = null;
private String securityStandardsField = null;
private int type = 0;
+ private CleanCodeAttribute cleanCodeAttribute = null;
private Scope scope = null;
private RuleKey key = null;
@@ -241,7 +243,7 @@ public class RuleDto {
return deserializeStringSet(educationPrinciplesField);
}
- public RuleDto setEducationPrinciples(Set<String> educationPrinciples){
+ public RuleDto setEducationPrinciples(Set<String> educationPrinciples) {
this.educationPrinciplesField = serializeStringSet(educationPrinciples);
return this;
}
@@ -395,6 +397,15 @@ public class RuleDto {
return this;
}
+ public CleanCodeAttribute getCleanCodeAttribute() {
+ return cleanCodeAttribute;
+ }
+
+ public RuleDto setCleanCodeAttribute(CleanCodeAttribute cleanCodeAttribute) {
+ this.cleanCodeAttribute = cleanCodeAttribute;
+ return this;
+ }
+
public long getCreatedAt() {
return createdAt;
}
diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/issue/IssueMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/issue/IssueMapper.xml
index c24e040a0a0..0a6bb0f7a41 100644
--- a/server/sonar-db-dao/src/main/resources/org/sonar/db/issue/IssueMapper.xml
+++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/issue/IssueMapper.xml
@@ -32,6 +32,7 @@
r.plugin_name as ruleRepo,
r.language as language,
r.security_standards as securityStandards,
+ r.clean_code_attribute as cleanCodeAttribute,
p.kee as componentKey,
i.component_uuid as componentUuid,
p.path as filePath,
@@ -690,6 +691,7 @@
r.rule_type as ruleType,
r.plugin_name as ruleRepo,
r.plugin_rule_key as ruleKey,
+ r.clean_code_attribute as cleanCodeAttribute,
i.message as message,
i.message_formattings as messageFormattings,
i.severity as severity,
diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/rule/RuleMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/rule/RuleMapper.xml
index fcd120cd8b5..953157fac29 100644
--- a/server/sonar-db-dao/src/main/resources/org/sonar/db/rule/RuleMapper.xml
+++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/rule/RuleMapper.xml
@@ -39,7 +39,8 @@
r.ad_hoc_description as "adHocDescription",
r.ad_hoc_severity as "adHocSeverity",
r.ad_hoc_type as "adHocType",
- r.education_principles as "educationPrinciplesField"
+ r.education_principles as "educationPrinciplesField",
+ r.clean_code_attribute as "cleanCodeAttribute"
</sql>
<sql id="leftOuterJoinRulesDescriptionSections">
@@ -274,6 +275,7 @@
ad_hoc_severity,
ad_hoc_type,
education_principles,
+ clean_code_attribute,
created_at,
updated_at
)
@@ -313,6 +315,7 @@
#{adHocSeverity,jdbcType=VARCHAR},
#{adHocType,jdbcType=TINYINT},
#{educationPrinciplesField,jdbcType=VARCHAR},
+ #{cleanCodeAttribute,jdbcType=VARCHAR},
#{createdAt,jdbcType=BIGINT},
#{updatedAt,jdbcType=BIGINT}
)
@@ -354,6 +357,7 @@
ad_hoc_severity=#{adHocSeverity,jdbcType=VARCHAR},
ad_hoc_type=#{adHocType,jdbcType=TINYINT},
education_principles=#{educationPrinciplesField,jdbcType=VARCHAR},
+ clean_code_attribute=#{cleanCodeAttribute,jdbcType=VARCHAR},
updated_at=#{updatedAt,jdbcType=BIGINT}
where
uuid=#{uuid,jdbcType=VARCHAR}
diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/issue/IssueDtoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/issue/IssueDtoTest.java
index 9949cb0188a..766d78fcf50 100644
--- a/server/sonar-db-dao/src/test/java/org/sonar/db/issue/IssueDtoTest.java
+++ b/server/sonar-db-dao/src/test/java/org/sonar/db/issue/IssueDtoTest.java
@@ -30,6 +30,7 @@ import org.apache.commons.lang.time.DateUtils;
import org.junit.Test;
import org.sonar.api.issue.Issue;
import org.sonar.api.rule.RuleKey;
+import org.sonar.api.rules.CleanCodeAttribute;
import org.sonar.api.rules.RuleType;
import org.sonar.api.utils.Duration;
import org.sonar.core.issue.DefaultIssue;
@@ -117,13 +118,14 @@ public class IssueDtoTest {
public void set_rule() {
IssueDto dto = new IssueDto()
.setKee("100")
- .setRule(new RuleDto().setUuid("uuid-1").setRuleKey("AvoidCycle").setRepositoryKey("java").setIsExternal(true))
+ .setRule(new RuleDto().setUuid("uuid-1").setRuleKey("AvoidCycle").setRepositoryKey("java").setIsExternal(true).setCleanCodeAttribute(CleanCodeAttribute.CLEAR))
.setLanguage("xoo");
assertThat(dto.getRuleUuid()).isEqualTo("uuid-1");
assertThat(dto.getRuleRepo()).isEqualTo("java");
assertThat(dto.getRule()).isEqualTo("AvoidCycle");
assertThat(dto.getRuleKey()).hasToString("java:AvoidCycle");
+ assertThat(dto.getCleanCodeAttribute()).isEqualTo(CleanCodeAttribute.CLEAR);
assertThat(dto.getLanguage()).isEqualTo("xoo");
assertThat(dto.isExternal()).isTrue();
}
diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/rule/RuleTesting.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/rule/RuleTesting.java
index 6d5cc8f4cfd..7fbae9e48d5 100644
--- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/rule/RuleTesting.java
+++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/rule/RuleTesting.java
@@ -26,6 +26,7 @@ import javax.annotation.Nullable;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rule.RuleStatus;
import org.sonar.api.rule.Severity;
+import org.sonar.api.rules.CleanCodeAttribute;
import org.sonar.api.rules.RuleType;
import org.sonar.api.server.rule.RuleParamType;
import org.sonar.core.util.UuidFactory;
@@ -92,6 +93,7 @@ public class RuleTesting {
.setName("name_" + randomAlphanumeric(5))
.setDescriptionFormat(RuleDto.Format.HTML)
.setType(CODE_SMELL)
+ .setCleanCodeAttribute(CleanCodeAttribute.CLEAR)
.setStatus(RuleStatus.READY)
.setConfigKey("configKey_" + ruleKey.rule())
.setSeverity(Severity.ALL.get(nextInt(Severity.ALL.size())))