From 6eb14fb614c6eb3bd8e2e578d2b0c66b349736bc Mon Sep 17 00:00:00 2001 From: Som Snytt Date: Fri, 27 Oct 2023 21:40:34 -0700 Subject: [PATCH 1/2] Don't add explanation twice [Cherry-picked c17d94cd952868877f40a26d8925e88e1a281ee2] --- .../tools/dotc/reporting/MessageRendering.scala | 1 + .../src/dotty/tools/xsbt/DelegatingReporter.java | 16 ++++------------ 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/compiler/src/dotty/tools/dotc/reporting/MessageRendering.scala b/compiler/src/dotty/tools/dotc/reporting/MessageRendering.scala index f53359fb8b19..f01b0a735680 100644 --- a/compiler/src/dotty/tools/dotc/reporting/MessageRendering.scala +++ b/compiler/src/dotty/tools/dotc/reporting/MessageRendering.scala @@ -198,6 +198,7 @@ trait MessageRendering { end posStr /** Explanation rendered under "Explanation" header */ + @deprecated("Explanations are rendered with the message text", since="3.4") def explanation(m: Message)(using Context): String = { val sb = new StringBuilder( s"""| diff --git a/sbt-bridge/src/dotty/tools/xsbt/DelegatingReporter.java b/sbt-bridge/src/dotty/tools/xsbt/DelegatingReporter.java index e6ddbc51ea32..577ef028f194 100644 --- a/sbt-bridge/src/dotty/tools/xsbt/DelegatingReporter.java +++ b/sbt-bridge/src/dotty/tools/xsbt/DelegatingReporter.java @@ -48,22 +48,14 @@ public void printSummary(Context ctx) { public void doReport(Diagnostic dia, Context ctx) { Severity severity = severityOf(dia.level()); Position position = positionOf(dia.pos().nonInlined()); - - StringBuilder rendered = new StringBuilder(); - rendered.append(messageAndPos(dia, ctx)); Message message = dia.msg(); - StringBuilder messageBuilder = new StringBuilder(); - messageBuilder.append(message.message()); + StringBuilder messageBuilder = new StringBuilder(message.message()); String diagnosticCode = String.valueOf(message.errorId().errorNumber()); - boolean shouldExplain = Diagnostic.shouldExplain(dia, ctx); List actions = CollectionConverters.asJava(message.actions(ctx)); - if (shouldExplain && !message.explanation().isEmpty()) { - rendered.append(explanation(message, ctx)); + if (Diagnostic.shouldExplain(dia, ctx) && !message.explanation().isEmpty()) messageBuilder.append(System.lineSeparator()).append(explanation(message, ctx)); - } - - delegate.log(new Problem(position, messageBuilder.toString(), severity, rendered.toString(), diagnosticCode, actions, - lookupVirtualFileId)); + Problem problem = new Problem(position, messageBuilder.toString(), severity, messageAndPos(dia, ctx), diagnosticCode, actions, lookupVirtualFileId); + delegate.log(problem); } public void reportBasicWarning(String message) { From a567054793a323d3f17d0f034c6ebff4029714e4 Mon Sep 17 00:00:00 2001 From: Som Snytt Date: Mon, 30 Oct 2023 11:56:56 -0700 Subject: [PATCH 2/2] Leverage string concat, blue explain is not deprecated [Cherry-picked 5b5e67ee4a1953185ce4d503b9ae11a0ed45f516] --- .../dotty/tools/dotc/reporting/MessageRendering.scala | 1 - .../src/dotty/tools/xsbt/DelegatingReporter.java | 11 +++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/compiler/src/dotty/tools/dotc/reporting/MessageRendering.scala b/compiler/src/dotty/tools/dotc/reporting/MessageRendering.scala index f01b0a735680..f53359fb8b19 100644 --- a/compiler/src/dotty/tools/dotc/reporting/MessageRendering.scala +++ b/compiler/src/dotty/tools/dotc/reporting/MessageRendering.scala @@ -198,7 +198,6 @@ trait MessageRendering { end posStr /** Explanation rendered under "Explanation" header */ - @deprecated("Explanations are rendered with the message text", since="3.4") def explanation(m: Message)(using Context): String = { val sb = new StringBuilder( s"""| diff --git a/sbt-bridge/src/dotty/tools/xsbt/DelegatingReporter.java b/sbt-bridge/src/dotty/tools/xsbt/DelegatingReporter.java index 577ef028f194..3bcff72601a7 100644 --- a/sbt-bridge/src/dotty/tools/xsbt/DelegatingReporter.java +++ b/sbt-bridge/src/dotty/tools/xsbt/DelegatingReporter.java @@ -49,12 +49,15 @@ public void doReport(Diagnostic dia, Context ctx) { Severity severity = severityOf(dia.level()); Position position = positionOf(dia.pos().nonInlined()); Message message = dia.msg(); - StringBuilder messageBuilder = new StringBuilder(message.message()); + String text; + if (Diagnostic.shouldExplain(dia, ctx) && !message.explanation().isEmpty()) + text = message.message() + System.lineSeparator() + explanation(message, ctx); + else + text = message.message(); + String rendered = messageAndPos(dia, ctx); String diagnosticCode = String.valueOf(message.errorId().errorNumber()); List actions = CollectionConverters.asJava(message.actions(ctx)); - if (Diagnostic.shouldExplain(dia, ctx) && !message.explanation().isEmpty()) - messageBuilder.append(System.lineSeparator()).append(explanation(message, ctx)); - Problem problem = new Problem(position, messageBuilder.toString(), severity, messageAndPos(dia, ctx), diagnosticCode, actions, lookupVirtualFileId); + Problem problem = new Problem(position, text, severity, rendered, diagnosticCode, actions, lookupVirtualFileId); delegate.log(problem); }