From ea33da3a8dc8e68e3db16cec371b64a4c7a7925a Mon Sep 17 00:00:00 2001 From: "Anastasia.Shadrina" Date: Tue, 21 Dec 2021 01:00:04 +0700 Subject: [PATCH] [FE] Fix: do not report ambiguous label if label map is empty --- .../DiagnosisCompilerTestFE10TestdataTestGenerated.java | 6 ++++++ .../runners/FirOldFrontendDiagnosticsTestGenerated.java | 6 ++++++ ...OldFrontendDiagnosticsWithLightTreeTestGenerated.java | 6 ++++++ .../jetbrains/kotlin/types/expressions/LabelResolver.kt | 2 +- .../extensions/contextReceivers/labelFromFunctionName.kt | 9 +++++++++ .../contextReceivers/labelFromFunctionName.txt | 3 +++ .../kotlin/test/runners/DiagnosticTestGenerated.java | 6 ++++++ 7 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/diagnostics/tests/extensions/contextReceivers/labelFromFunctionName.kt create mode 100644 compiler/testData/diagnostics/tests/extensions/contextReceivers/labelFromFunctionName.txt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java index de59f2092a5..a942ec57e80 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java @@ -10654,6 +10654,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/insideDeclaration.kt"); } + @Test + @TestMetadata("labelFromFunctionName.kt") + public void testLabelFromFunctionName() throws Exception { + runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/labelFromFunctionName.kt"); + } + @Test @TestMetadata("labelsFromClassNameForbidden.kt") public void testLabelsFromClassNameForbidden() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java index 6abdca9127b..fa35b37dfd6 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java @@ -10654,6 +10654,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/insideDeclaration.kt"); } + @Test + @TestMetadata("labelFromFunctionName.kt") + public void testLabelFromFunctionName() throws Exception { + runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/labelFromFunctionName.kt"); + } + @Test @TestMetadata("labelsFromClassNameForbidden.kt") public void testLabelsFromClassNameForbidden() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java index 5971b75e3e8..0e082924fb2 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java @@ -10654,6 +10654,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/insideDeclaration.kt"); } + @Test + @TestMetadata("labelFromFunctionName.kt") + public void testLabelFromFunctionName() throws Exception { + runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/labelFromFunctionName.kt"); + } + @Test @TestMetadata("labelsFromClassNameForbidden.kt") public void testLabelsFromClassNameForbidden() throws Exception { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LabelResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LabelResolver.kt index 7801defe363..b48b00efeeb 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LabelResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LabelResolver.kt @@ -190,7 +190,7 @@ object LabelResolver { ] val thisReceivers = labelNameToReceiverMap?.get(labelName.identifier) val thisReceiver = when { - thisReceivers == null -> declarationDescriptor.extensionReceiverParameter + thisReceivers.isNullOrEmpty() -> declarationDescriptor.extensionReceiverParameter thisReceivers.size == 1 -> thisReceivers.single() else -> { BindingContextUtils.reportAmbiguousLabel(context.trace, targetLabel, declarationsByLabel) diff --git a/compiler/testData/diagnostics/tests/extensions/contextReceivers/labelFromFunctionName.kt b/compiler/testData/diagnostics/tests/extensions/contextReceivers/labelFromFunctionName.kt new file mode 100644 index 00000000000..6ee715c533e --- /dev/null +++ b/compiler/testData/diagnostics/tests/extensions/contextReceivers/labelFromFunctionName.kt @@ -0,0 +1,9 @@ +// FIR_IDENTICAL +// !LANGUAGE: +ContextReceivers +// WITH_STDLIB + +fun testLabels(source: Collection) { + val r = buildList { + source.mapTo(this@buildList) { it.length } + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/extensions/contextReceivers/labelFromFunctionName.txt b/compiler/testData/diagnostics/tests/extensions/contextReceivers/labelFromFunctionName.txt new file mode 100644 index 00000000000..358a5e09e08 --- /dev/null +++ b/compiler/testData/diagnostics/tests/extensions/contextReceivers/labelFromFunctionName.txt @@ -0,0 +1,3 @@ +package + +public fun testLabels(/*0*/ source: kotlin.collections.Collection): kotlin.Unit 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 ea003f47870..3fadfd7128c 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 @@ -10660,6 +10660,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/insideDeclaration.kt"); } + @Test + @TestMetadata("labelFromFunctionName.kt") + public void testLabelFromFunctionName() throws Exception { + runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/labelFromFunctionName.kt"); + } + @Test @TestMetadata("labelsFromClassNameForbidden.kt") public void testLabelsFromClassNameForbidden() throws Exception {