summaryrefslogtreecommitdiffstats
path: root/server/sonar-server
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2016-03-01 16:50:31 +0100
committerJulien Lancelot <julien.lancelot@sonarsource.com>2016-03-02 14:19:36 +0100
commit9f6e09c73c158be3400a76991bfd0c66033d4eab (patch)
tree66b48dc8218b0f7da2a1cad385407414638c424d /server/sonar-server
parent84bc220fc84aaa1bbf88fc5c29ff7db113aef711 (diff)
downloadsonarqube-9f6e09c73c158be3400a76991bfd0c66033d4eab.tar.gz
sonarqube-9f6e09c73c158be3400a76991bfd0c66033d4eab.zip
SONAR-7333 Set issue type from rule type
Diffstat (limited to 'server/sonar-server')
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/issue/RuleImpl.java3
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/issue/IssueService.java29
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/issue/IssueServiceMediumTest.java16
3 files changed, 32 insertions, 16 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/issue/RuleImpl.java b/server/sonar-server/src/main/java/org/sonar/server/computation/issue/RuleImpl.java
index 001521960c2..f5d81dd6760 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/issue/RuleImpl.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/issue/RuleImpl.java
@@ -51,8 +51,7 @@ public class RuleImpl implements Rule {
this.status = dto.getStatus();
this.tags = union(dto.getSystemTags(), dto.getTags());
this.remediationFunction = effectiveRemediationFunction(dto);
- // TODO get rule type
- this.type = RuleType.CODE_SMELL;
+ this.type = RuleType.valueOf(dto.getType());
}
@Override
diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueService.java b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueService.java
index a2f7742c812..71f0d9b9db1 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueService.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueService.java
@@ -34,8 +34,8 @@ import org.apache.commons.lang.StringUtils;
import org.sonar.api.issue.ActionPlan;
import org.sonar.api.issue.Issue;
import org.sonar.api.rule.RuleKey;
+import org.sonar.api.rule.RuleStatus;
import org.sonar.api.rule.Severity;
-import org.sonar.api.rules.Rule;
import org.sonar.api.rules.RuleFinder;
import org.sonar.api.server.ServerSide;
import org.sonar.api.user.User;
@@ -44,11 +44,13 @@ import org.sonar.api.web.UserRole;
import org.sonar.core.issue.DefaultIssue;
import org.sonar.core.issue.DefaultIssueBuilder;
import org.sonar.core.issue.IssueChangeContext;
+import org.sonar.core.rule.RuleType;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.component.ComponentDto;
import org.sonar.db.issue.IssueDto;
import org.sonar.db.protobuf.DbFileSources;
+import org.sonar.db.rule.RuleDto;
import org.sonar.server.es.SearchOptions;
import org.sonar.server.es.SearchResult;
import org.sonar.server.exceptions.BadRequestException;
@@ -249,17 +251,17 @@ public class IssueService {
if (!ruleKey.isManual()) {
throw new IllegalArgumentException("Issues can be created only on rules marked as 'manual': " + ruleKey);
}
- Rule rule = getNullableRuleByKey(ruleKey);
- if (rule == null) {
+ Optional<RuleDto> rule = getRuleByKey(dbSession, ruleKey);
+ if (!rule.isPresent()) {
throw new IllegalArgumentException("Unknown rule: " + ruleKey);
}
DefaultIssue issue = new DefaultIssueBuilder()
.componentKey(component.getKey())
- // TODO use rule type: type(rule.type())
+ .type(RuleType.valueOf(rule.get().getType()))
.projectKey(project.getKey())
.line(line)
- .message(!Strings.isNullOrEmpty(message) ? message : rule.getName())
+ .message(!Strings.isNullOrEmpty(message) ? message : rule.get().getName())
.severity(Objects.firstNonNull(severity, Severity.MAJOR))
.ruleKey(ruleKey)
.reporter(userSession.getLogin())
@@ -292,23 +294,24 @@ public class IssueService {
throw new IllegalStateException(String.format("Issue '%s' has no project key", issue.key()));
}
issueStorage.save(session, issue);
- Rule rule = getNullableRuleByKey(issue.ruleKey());
+ Optional<RuleDto> rule = getRuleByKey(session, issue.getRuleKey());
ComponentDto project = dbClient.componentDao().selectOrFailByKey(session, projectKey);
notificationService.scheduleForSending(new IssueChangeNotification()
.setIssue(issue)
.setChangeAuthorLogin(context.login())
- .setRuleName(rule != null ? rule.getName() : null)
+ .setRuleName(rule.isPresent() ? rule.get().getName() : null)
.setProject(project.getKey(), project.name())
.setComponent(dbClient.componentDao().selectOrFailByKey(session, issue.componentKey()))
.setComment(comment));
}
- /**
- * Should use {@link org.sonar.server.rule.RuleService#getByKey(org.sonar.api.rule.RuleKey)}, but it's not possible as IssueNotifications is still used by the batch.
- * Can be null for removed rules
- */
- private Rule getNullableRuleByKey(RuleKey ruleKey) {
- return ruleFinder.findByKey(ruleKey);
+ private Optional<RuleDto> getRuleByKey(DbSession session, RuleKey ruleKey) {
+ Optional<RuleDto> rule = dbClient.ruleDao().selectByKey(session, ruleKey);
+ if (rule.isPresent() && rule.get().getStatus() != RuleStatus.REMOVED) {
+ return rule;
+ } else {
+ return Optional.absent();
+ }
}
public SearchResult<IssueDoc> search(IssueQuery query, SearchOptions options) {
diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueServiceMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueServiceMediumTest.java
index 2913daeb75d..e3f72de470c 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueServiceMediumTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueServiceMediumTest.java
@@ -33,6 +33,7 @@ import org.sonar.api.config.Settings;
import org.sonar.api.issue.DefaultTransitions;
import org.sonar.api.issue.Issue;
import org.sonar.api.rule.RuleKey;
+import org.sonar.api.rule.RuleStatus;
import org.sonar.api.rule.Severity;
import org.sonar.api.security.DefaultGroups;
import org.sonar.api.web.UserRole;
@@ -472,6 +473,16 @@ public class IssueServiceMediumTest {
service.createManualIssue("UNKNOWN", manualRule.getKey(), null, "Fix it", Severity.MINOR);
}
+ @Test(expected = IllegalArgumentException.class)
+ public void fail_create_manual_issue_on_removed_rule() {
+ RuleDto rule = newRule(RuleTesting.newXooX1().setStatus(RuleStatus.REMOVED));
+ ComponentDto project = newProject();
+ ComponentDto file = newFile(project);
+ userSessionRule.login("john").addProjectPermissions(UserRole.USER, project.key());
+
+ service.createManualIssue(file.key(), rule.getKey(), 10, "Fix it", null);
+ }
+
@Test
public void search_issues() {
RuleDto rule = newRule();
@@ -574,7 +585,10 @@ public class IssueServiceMediumTest {
}
private RuleDto newRule() {
- RuleDto rule = RuleTesting.newXooX1();
+ return newRule(RuleTesting.newXooX1());
+ }
+
+ private RuleDto newRule(RuleDto rule) {
tester.get(RuleDao.class).insert(session, rule);
session.commit();
ruleIndexer.index();