Skip to content
This repository was archived by the owner on Jan 7, 2021. It is now read-only.

Commit dc21cd1

Browse files
committed
Properly handle issues without a line number
See #197
1 parent 73823c7 commit dc21cd1

File tree

2 files changed

+53
-3
lines changed

2 files changed

+53
-3
lines changed

src/main/java/org/sonar/plugins/stash/issue/MarkdownPrinter.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,13 @@ private String fileNameList(List<PostJobIssue> issues) {
147147
issues.sort(issueFormatComparator);
148148

149149
for (PostJobIssue issue: issues.subList(0, Math.min(includeFilesInOverview, issues.size()))) {
150-
names.add(String.format("%s:%s", issuePathResolver.getIssuePath(issue), issue.line()));
150+
String path = issuePathResolver.getIssuePath(issue);
151+
Integer line = issue.line();
152+
if (line == null) {
153+
names.add(path);
154+
} else {
155+
names.add(String.format("%s:%s", path, line));
156+
}
151157
}
152158
if (issues.size() > includeFilesInOverview) {
153159
names.add("...");
@@ -171,13 +177,25 @@ private static String link(String title, String target) {
171177
.comparing(i -> issuePathResolver.getIssuePath(i).length());
172178

173179
private Comparator<PostJobIssue> issueLine = Comparator
174-
.comparing(PostJobIssue::line);
180+
// -1 sorts before all issues with lines
181+
.comparing(issue -> firstNonNull(issue.line(), -1));
175182

176183
private Comparator<PostJobIssue> fileNameLexical = Comparator
177184
.comparing(i -> issuePathResolver.getIssuePath(i));
178185

179186
private Comparator<PostJobIssue> issueFormatComparator =
180187
fileNameLength
181188
.thenComparing(issueLine)
182-
.thenComparing(fileNameLexical);
189+
.thenComparing(fileNameLexical)
190+
;
191+
192+
@SafeVarargs
193+
private static <T> T firstNonNull(T... args) {
194+
for (T t: args) {
195+
if (t != null) {
196+
return t;
197+
}
198+
}
199+
throw new IllegalStateException("At least one of the arguments should have been non-null");
200+
}
183201
}

src/test/java/org/sonar/plugins/stash/issue/MarkdownPrinterTest.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,38 @@ public void testPrintReportMarkdownWithIssueLimitation() {
157157
assertEquals(reportString, issueReportMarkdown);
158158
}
159159

160+
@Test
161+
public void testPrintReportMarkdownWithFileWideIssues() {
162+
PostJobIssue issueWithoutLine = new DefaultIssue().setKey("key36")
163+
.setSeverity(Severity.CRITICAL)
164+
.setMessage("messageCritical")
165+
.setRuleKey(RuleKey.of("RepoCritical", "RuleCritical"))
166+
.setInputComponent(new DefaultInputFile("foo2", "scripts/file2.example"))
167+
.setLine(null);
168+
report.add(issueWithoutLine);
169+
printer = new MarkdownPrinter(100, SONAR_URL, 100, new DummyIssuePathResolver());
170+
String issueReportMarkdown = printer.printReportMarkdown(report);
171+
String reportString = "## SonarQube analysis Overview\n"
172+
+ "| Total New Issues | 6 |\n"
173+
+ "|-----------------|------|\n"
174+
+ "| BLOCKER | 1 |\n"
175+
+ "| CRITICAL | 2 |\n"
176+
+ "| MAJOR | 3 |\n"
177+
+ "| MINOR | 0 |\n"
178+
+ "| INFO | 0 |\n\n\n"
179+
+ "| Issues list |\n"
180+
+ "|-------------|\n"
181+
+ "| *BLOCKER* - messageBlocker [[RepoBlocker:RuleBlocker](sonarqube/URL/coding_rules#rule_key=RepoBlocker:RuleBlocker)] |\n"
182+
+ "| &nbsp;&nbsp; *Files: scripts/file1.example:1* |\n"
183+
+ "| *CRITICAL* - messageCritical [[RepoCritical:RuleCritical](sonarqube/URL/coding_rules#rule_key=RepoCritical:RuleCritical)] |\n"
184+
+ "| &nbsp;&nbsp; *Files: scripts/file2.example, scripts/file2.example:1* |\n"
185+
+ "| *MAJOR* - messageMajor [[RepoMajor:RuleMajor](sonarqube/URL/coding_rules#rule_key=RepoMajor:RuleMajor)] |\n"
186+
+ "| &nbsp;&nbsp; *Files: scripts/file3.example:1, scripts/file3.example:15, scripts/tests/file3.example:5* |\n";
187+
188+
assertEquals(reportString, issueReportMarkdown);
189+
190+
}
191+
160192
@Test
161193
public void testPrintEmptyReportMarkdown() {
162194
report = new ArrayList<>();

0 commit comments

Comments
 (0)