}
private void writeIssue(IssueQueryResult result, DefaultIssue issue, JsonWriter json) {
+ String message = issue.message();
+ String ruleName = result.rule(issue).getName();
Component component = result.component(issue);
Component project = result.project(issue);
String actionPlanKey = issue.actionPlanKey();
.prop("project", issue.projectKey())
.prop("projectLongName", project != null ? project.longName() : null)
.prop("rule", issue.ruleKey().toString())
- .prop("ruleName", result.rule(issue).getName())
+ .prop("ruleName", ruleName)
.prop("line", issue.line())
- .prop("message",issue.message())
+ .prop("message", message != null ? message : ruleName)
.prop("resolution", issue.resolution())
.prop("status", issue.status())
.prop("severity", issue.severity())
hash = {
:maxResultsReached => results.maxResultsReached,
:paging => paging_to_hash(results.paging),
- :issues => results.issues.map { |issue| Issue.to_hash(issue) },
+ :issues => results.issues.map { |issue| Issue.to_hash(issue, results.rule(issue).name) },
:components => results.components.map { |component| component_to_hash(component) },
:projects => results.projects.map { |project| component_to_hash(project) },
:rules => results.rules.map { |rule| Rule.to_hash(rule) },
class Issue
- def self.to_hash(issue)
+ def self.to_hash(issue, rule_name=nil)
hash = {
:key => issue.key,
:component => issue.componentKey,
}
hash[:resolution] = issue.resolution if issue.resolution
hash[:severity] = issue.severity if issue.severity
- hash[:message] = issue.message if issue.message
+ hash[:message] = issue.message ? issue.message : rule_name
hash[:line] = issue.line.to_i if issue.line
hash[:effortToFix] = issue.effortToFix.to_f if issue.effortToFix
hash[:technicalDebt] = technical_debt_to_hash(issue.technicalDebt) if issue.technicalDebt
<td><img src="<%= ApplicationController.root_context -%>/images/priority/<%= issue.severity() -%>.png" title="<%= message('severity.' + issue.severity()) -%>"/></td>
<td>
<a class="rule-modal" href="#" onclick="return openModalWindow('<%= url_for :controller => 'issue', :action => 'show', :id => issue.key, :modal => true -%>', {'width': 800})">
- <%= h truncate(issue.message, :length => 100) -%></a>
+ <!-- SONAR-4785 Display rule name if issue has no message -->
+ <%= h truncate(issue.message ? issue.message : results.rule(issue).name, :length => 100) -%></a>
<% if last_comment %>
<div class="comment-excerpt">
<img src="<%= ApplicationController.root_context -%>/images/reviews/comment.png"/>
request.execute().assertJson(getClass(), "show_issue_with_changelog.json");
}
+ /**
+ * SONAR-4785
+ */
+ @Test
+ public void show_issue_display_name_when_no_message() throws Exception {
+ Issue issue = createStandardIssue().setMessage(null);
+ issues.add(issue);
+
+ MockUserSession.set();
+ WsTester.TestRequest request = tester.newRequest("show").setParam("key", issue.key());
+ request.execute().assertJson(getClass(), "show_issue_display_name_when_no_message.json");
+ }
+
private DefaultIssue createStandardIssue() {
DefaultIssue issue = createIssue();
addComponentAndProject();
private DefaultIssue createIssue() {
return new DefaultIssue()
.setKey("ABCD")
+ .setMessage("Fix it")
.setComponentKey("org.sonar.server.issue.IssueClient")
.setProjectKey("org.sonar.Sonar")
.setRuleKey(RuleKey.of("squid", "AvoidCycle"))
--- /dev/null
+{
+ "issue": {
+ "key": "ABCD",
+ "component": "org.sonar.server.issue.IssueClient",
+ "componentLongName": "SonarQube :: Issue Client",
+ "componentQualifier": "FIL",
+ "project": "org.sonar.Sonar",
+ "projectLongName": "SonarQube",
+ "rule": "squid:AvoidCycle",
+ "ruleName": "Avoid cycle",
+ "message": "Avoid cycle",
+ "creationDate": "2014-01-22T19:10:03+0100",
+ "fCreationDate": "Jan 22, 2014 10:03 AM",
+ "transitions": [],
+ "actions": [],
+ "comments": [],
+ "changelog": [
+ {
+ "creationDate": "2014-01-22T19:10:03+0100",
+ "fCreationDate": "Jan 22, 2014 10:03 AM",
+ "diffs": ["Created"]
+ }
+ ]
+ }
+}
"projectLongName": "SonarQube",
"rule": "squid:AvoidCycle",
"ruleName": "Avoid cycle",
+ "message": "Fix it",
"creationDate": "2014-01-22T19:10:03+0100",
"fCreationDate": "Jan 22, 2014 10:03 AM",
"transitions": [],
"project": "org.sonar.Sonar",
"rule": "squid:AvoidCycle",
"ruleName": "Avoid cycle",
+ "message": "Fix it",
"creationDate": "2014-01-22T19:10:03+0100",
"fCreationDate": "Jan 22, 2014 10:03 AM",
"transitions": [],
"projectLongName": "SonarQube",
"rule": "squid:AvoidCycle",
"ruleName": "Avoid cycle",
+ "message": "Fix it",
"actionPlan" : "AP-ABCD",
"actionPlanName" : "Version 4.2",
"creationDate": "2014-01-22T19:10:03+0100",
"projectLongName": "SonarQube",
"rule": "squid:AvoidCycle",
"ruleName": "Avoid cycle",
+ "message": "Fix it",
"status": "OPEN",
"creationDate": "2014-01-22T19:10:03+0100",
"fCreationDate": "Jan 22, 2014 10:03 AM",
"projectLongName": "SonarQube",
"rule": "squid:AvoidCycle",
"ruleName": "Avoid cycle",
+ "message": "Fix it",
"status": "OPEN",
"creationDate": "2014-01-22T19:10:03+0100",
"fCreationDate": "Jan 22, 2014 10:03 AM",
"projectLongName": "SonarQube",
"rule": "squid:AvoidCycle",
"ruleName": "Avoid cycle",
+ "message": "Fix it",
"status": "OPEN",
"creationDate": "2014-01-22T19:10:03+0100",
"fCreationDate": "Jan 22, 2014 10:03 AM",
"projectLongName": "SonarQube",
"rule": "squid:AvoidCycle",
"ruleName": "Avoid cycle",
+ "message": "Fix it",
"creationDate": "2014-01-22T19:10:03+0100",
"fCreationDate": "Jan 22, 2014 10:03 AM",
"transitions": [],
"projectLongName": "SonarQube",
"rule": "squid:AvoidCycle",
"ruleName": "Avoid cycle",
+ "message": "Fix it",
"characteristic": "Maintainability",
"subCharacteristic": "Readability",
"creationDate": "2014-01-22T19:10:03+0100",
"projectLongName": "SonarQube",
"rule": "squid:AvoidCycle",
"ruleName": "Avoid cycle",
+ "message": "Fix it",
"creationDate": "2014-01-22T19:10:03+0100",
"fCreationDate": "Jan 22, 2014 10:03 AM",
"transitions": [],
"projectLongName": "SonarQube",
"rule": "squid:AvoidCycle",
"ruleName": "Avoid cycle",
+ "message": "Fix it",
"creationDate": "2014-01-22T19:10:03+0100",
"fCreationDate": "Jan 22, 2014 10:03 AM",
"updateDate": "2014-01-23T19:10:03+0100",
"projectLongName": "SonarQube",
"rule": "squid:AvoidCycle",
"ruleName": "Avoid cycle",
+ "message": "Fix it",
"status": "OPEN",
"creationDate": "2014-01-22T19:10:03+0100",
"fCreationDate": "Jan 22, 2014 10:03 AM",
"projectLongName": "SonarQube",
"rule": "squid:AvoidCycle",
"ruleName": "Avoid cycle",
+ "message": "Fix it",
"debt": "2 hours 1 minutes",
"creationDate": "2014-01-22T19:10:03+0100",
"fCreationDate": "Jan 22, 2014 10:03 AM",
"projectLongName": "SonarQube",
"rule": "squid:AvoidCycle",
"ruleName": "Avoid cycle",
+ "message": "Fix it",
"status": "RESOLVED",
"resolution": "FIXED",
"creationDate": "2014-01-22T19:10:03+0100",
"projectLongName": "SonarQube",
"rule": "squid:AvoidCycle",
"ruleName": "Avoid cycle",
+ "message": "Fix it",
"assignee": "john",
"assigneeName": "John",
"reporter": "steven",
"projectLongName": "SonarQube",
"rule": "squid:AvoidCycle",
"ruleName": "Avoid cycle",
+ "message": "Fix it",
"assignee": "john",
"assigneeName": "John",
"status": "OPEN",