Skip to content

Commit 08b24e0

Browse files
committed
Print IDE-compatible links for method/class sources
1 parent 24360f0 commit 08b24e0

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/DiscoveryIssueException.java

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import org.junit.platform.commons.JUnitException;
2121
import org.junit.platform.commons.util.Preconditions;
2222
import org.junit.platform.engine.DiscoveryIssue;
23+
import org.junit.platform.engine.support.descriptor.ClassSource;
24+
import org.junit.platform.engine.support.descriptor.MethodSource;
2325

2426
class DiscoveryIssueException extends JUnitException {
2527

@@ -47,15 +49,31 @@ public String getMessage() {
4749
StringBuilder message = new StringBuilder(super.getMessage());
4850
if (issues != null) { // after deserialization
4951
message.append(":");
50-
for (DiscoveryIssue issue : issues) {
51-
message.append("\n- [").append(issue.severity()).append("] ").append(issue.message());
52-
issue.source().ifPresent(s -> message.append(" at ").append(s).append("]"));
53-
issue.cause().ifPresent(t -> message.append("\n Caused by: ").append(getStackTrace(t)));
52+
for (int i = 0; i < issues.size(); i++) {
53+
DiscoveryIssue issue = issues.get(i);
54+
message.append("\n\n(").append(i + 1).append(") [").append(issue.severity()).append("] ").append(
55+
issue.message());
56+
issue.source().ifPresent(source -> {
57+
message.append("\n Source: ").append(source);
58+
if (source instanceof MethodSource) {
59+
MethodSource methodSource = (MethodSource) source;
60+
appendIdeCompatibleLink(message, methodSource.getClassName(), methodSource.getMethodName());
61+
}
62+
else if (source instanceof ClassSource) {
63+
ClassSource classSource = (ClassSource) source;
64+
appendIdeCompatibleLink(message, classSource.getClassName(), "<no-method>");
65+
}
66+
});
67+
issue.cause().ifPresent(t -> message.append("\n Cause: ").append(getStackTrace(t)));
5468
}
5569
}
5670
return message.toString();
5771
}
5872

73+
private static void appendIdeCompatibleLink(StringBuilder message, String className, String methodName) {
74+
message.append("\n at ").append(className).append(".").append(methodName).append("(SourceFile:0)");
75+
}
76+
5977
private static String getStackTrace(Throwable cause) {
6078
StringWriter stringWriter = new StringWriter();
6179
try (PrintWriter writer = new PrintWriter(stringWriter, true)) {

0 commit comments

Comments
 (0)