From 0682a1f76da395ed2d23d2b164d39bbe10d04332 Mon Sep 17 00:00:00 2001 From: Kirill Rakhman Date: Mon, 30 Oct 2023 11:02:10 +0100 Subject: [PATCH] [FIR] Remove line breaks after context receivers in diagnostic messages #KT-62944 Fixed --- ...sticCompilerTestFE10TestdataTestGenerated.java | 6 ++++++ ...agnosticCompilerFE10TestDataTestGenerated.java | 6 ++++++ ...htTreeOldFrontendDiagnosticsTestGenerated.java | 6 ++++++ ...FirPsiOldFrontendDiagnosticsTestGenerated.java | 6 ++++++ .../diagnostics/FirDiagnosticRenderers.kt | 3 ++- .../jetbrains/kotlin/fir/renderer/FirRenderer.kt | 10 +++++++--- .../contextReceiverAmbiguity.diag.txt | 5 +++++ .../contextReceiverAmbiguity.fir.diag.txt | 1 + .../contextReceivers/contextReceiverAmbiguity.kt | 15 +++++++++++++++ .../test/runners/DiagnosticTestGenerated.java | 6 ++++++ 10 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverAmbiguity.diag.txt create mode 100644 compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverAmbiguity.fir.diag.txt create mode 100644 compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverAmbiguity.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java index 8d24d2b06d8..7deb2409036 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java @@ -12687,6 +12687,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/contextKeywordWithElvis.kt"); } + @Test + @TestMetadata("contextReceiverAmbiguity.kt") + public void testContextReceiverAmbiguity() throws Exception { + runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverAmbiguity.kt"); + } + @Test @TestMetadata("contextReceiverTypeParamsUsage.kt") public void testContextReceiverTypeParamsUsage() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java index fb17d5e3708..ba70371ad4a 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java @@ -12687,6 +12687,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/contextKeywordWithElvis.kt"); } + @Test + @TestMetadata("contextReceiverAmbiguity.kt") + public void testContextReceiverAmbiguity() throws Exception { + runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverAmbiguity.kt"); + } + @Test @TestMetadata("contextReceiverTypeParamsUsage.kt") public void testContextReceiverTypeParamsUsage() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java index 72f0c5ff1da..3a11045160e 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java @@ -12681,6 +12681,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/contextKeywordWithElvis.kt"); } + @Test + @TestMetadata("contextReceiverAmbiguity.kt") + public void testContextReceiverAmbiguity() throws Exception { + runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverAmbiguity.kt"); + } + @Test @TestMetadata("contextReceiverTypeParamsUsage.kt") public void testContextReceiverTypeParamsUsage() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java index ffb173cca57..9d1b4f4d85a 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java @@ -12687,6 +12687,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/contextKeywordWithElvis.kt"); } + @Test + @TestMetadata("contextReceiverAmbiguity.kt") + public void testContextReceiverAmbiguity() throws Exception { + runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverAmbiguity.kt"); + } + @Test @TestMetadata("contextReceiverTypeParamsUsage.kt") public void testContextReceiverTypeParamsUsage() throws Exception { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt index 82cd6cd7bc8..6f78fb67be4 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt @@ -45,7 +45,8 @@ object FirDiagnosticRenderers { callArgumentsRenderer = FirCallNoArgumentsRenderer(), modifierRenderer = FirPartialModifierRenderer(), valueParameterRenderer = FirValueParameterRendererNoDefaultValue(), - declarationRenderer = FirDeclarationRenderer("local ") + declarationRenderer = FirDeclarationRenderer("local "), + lineBreakAfterContextReceivers = false, ).renderElementAsString(symbol.fir, trim = true) is FirTypeParameterSymbol -> symbol.name.asString() else -> "???" diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt index 2be2fe936e8..3418d064430 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt @@ -18,8 +18,6 @@ import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.* import org.jetbrains.kotlin.fir.references.* import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag -import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol -import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid import org.jetbrains.kotlin.name.StandardClassIds @@ -48,6 +46,7 @@ class FirRenderer( override val fileAnnotationsContainerRenderer: FirFileAnnotationsContainerRenderer? = null, override val resolvedNamedReferenceRenderer: FirResolvedNamedReferenceRenderer = FirResolvedNamedReferenceRendererWithLabel(), override val resolvedQualifierRenderer: FirResolvedQualifierRenderer = FirResolvedQualifierRendererWithLabel(), + private val lineBreakAfterContextReceivers: Boolean = true, ) : FirRendererComponents { override val visitor = Visitor() @@ -149,7 +148,12 @@ class FirRenderer( print("context(") renderSeparated(contextReceivers, visitor) print(")") - printer.newLine() + + if (lineBreakAfterContextReceivers) { + printer.newLine() + } else { + print(" ") + } } private fun List.renderTypeParameters() { diff --git a/compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverAmbiguity.diag.txt b/compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverAmbiguity.diag.txt new file mode 100644 index 00000000000..81e5a8e17ea --- /dev/null +++ b/compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverAmbiguity.diag.txt @@ -0,0 +1,5 @@ +/contextReceiverAmbiguity.kt:13:9: error: overload resolution ambiguity: +context(String) public fun foo(x: Comparable<*>): Unit defined in root package in file contextReceiverAmbiguity.kt +context(String) public fun foo(x: Number): Unit defined in root package in file contextReceiverAmbiguity.kt + foo(1) + ^ diff --git a/compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverAmbiguity.fir.diag.txt b/compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverAmbiguity.fir.diag.txt new file mode 100644 index 00000000000..93f781a214d --- /dev/null +++ b/compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverAmbiguity.fir.diag.txt @@ -0,0 +1 @@ +/contextReceiverAmbiguity.kt:(203,206): error: Overload resolution ambiguity between candidates: [context(String) fun foo(x: Comparable<*>): Unit, context(String) fun foo(x: Number): Unit] diff --git a/compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverAmbiguity.kt b/compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverAmbiguity.kt new file mode 100644 index 00000000000..7c712b8c6f6 --- /dev/null +++ b/compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverAmbiguity.kt @@ -0,0 +1,15 @@ +// FIR_IDENTICAL +// !LANGUAGE: +ContextReceivers +// RENDER_DIAGNOSTICS_FULL_TEXT + +context(String) +fun foo(x: Comparable<*>) {} + +context(String) +fun foo(x: Number) {} + +fun test() { + with("") { + foo(1) + } +} \ No newline at end of file diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 47839b947be..125bce0e1ea 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -12687,6 +12687,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/contextKeywordWithElvis.kt"); } + @Test + @TestMetadata("contextReceiverAmbiguity.kt") + public void testContextReceiverAmbiguity() throws Exception { + runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/contextReceiverAmbiguity.kt"); + } + @Test @TestMetadata("contextReceiverTypeParamsUsage.kt") public void testContextReceiverTypeParamsUsage() throws Exception {