From 2b30c1eb5d4609108d3f7cc6ac1c579acb4a724e Mon Sep 17 00:00:00 2001 From: Anastasiya Shadrina Date: Mon, 22 Nov 2021 15:00:25 +0700 Subject: [PATCH] [FE] Do not change original semantics in LabelResolver --- ...CompilerTestFE10TestdataTestGenerated.java | 6 +++++ ...irOldFrontendDiagnosticsTestGenerated.java | 6 +++++ ...DiagnosticsWithLightTreeTestGenerated.java | 6 +++++ .../kotlin/types/expressions/LabelResolver.kt | 7 ++--- .../noLabelsByClassName.fir.kt | 27 +++++++++++++++++++ .../contextReceivers/noLabelsByClassName.kt | 27 +++++++++++++++++++ .../contextReceivers/noLabelsByClassName.txt | 13 +++++++++ .../test/runners/DiagnosticTestGenerated.java | 6 +++++ 8 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/extensions/contextReceivers/noLabelsByClassName.fir.kt create mode 100644 compiler/testData/diagnostics/tests/extensions/contextReceivers/noLabelsByClassName.kt create mode 100644 compiler/testData/diagnostics/tests/extensions/contextReceivers/noLabelsByClassName.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 4163880d2be..298784f9981 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 @@ -10660,6 +10660,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/noExplicitReceiver.kt"); } + @Test + @TestMetadata("noLabelsByClassName.kt") + public void testNoLabelsByClassName() throws Exception { + runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/noLabelsByClassName.kt"); + } + @Test @TestMetadata("outerClass.kt") public void testOuterClass() 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 22a0fe71b7d..4b2ece5cc30 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 @@ -10660,6 +10660,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/noExplicitReceiver.kt"); } + @Test + @TestMetadata("noLabelsByClassName.kt") + public void testNoLabelsByClassName() throws Exception { + runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/noLabelsByClassName.kt"); + } + @Test @TestMetadata("outerClass.kt") public void testOuterClass() 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 8f6ea8c659c..836370cf02d 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 @@ -10660,6 +10660,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/noExplicitReceiver.kt"); } + @Test + @TestMetadata("noLabelsByClassName.kt") + public void testNoLabelsByClassName() throws Exception { + runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/noLabelsByClassName.kt"); + } + @Test @TestMetadata("outerClass.kt") public void testOuterClass() 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 1ffce713b86..eee785f454b 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LabelResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LabelResolver.kt @@ -57,7 +57,10 @@ object LabelResolver { is KtLambdaExpression -> result.addIfNotNull(getLabelForFunctionalExpression(element)) } val functionOrProperty = when (element) { - is KtNamedFunction -> element + is KtNamedFunction -> { + result.addIfNotNull(element.nameAsName ?: getLabelForFunctionalExpression(element)) + element + } is KtPropertyAccessor -> element.property else -> return result } @@ -66,8 +69,6 @@ object LabelResolver { functionOrProperty.contextReceivers .mapNotNullTo(result) { it.name()?.let { s -> Name.identifier(s) } } } - val name = functionOrProperty.nameAsName ?: getLabelForFunctionalExpression(functionOrProperty) - result.addIfNotNull(name) return result } diff --git a/compiler/testData/diagnostics/tests/extensions/contextReceivers/noLabelsByClassName.fir.kt b/compiler/testData/diagnostics/tests/extensions/contextReceivers/noLabelsByClassName.fir.kt new file mode 100644 index 00000000000..22725e03199 --- /dev/null +++ b/compiler/testData/diagnostics/tests/extensions/contextReceivers/noLabelsByClassName.fir.kt @@ -0,0 +1,27 @@ +fun Int.f() { + this@Int +} + +var Int.p: Int + get() { + this@Int + return@p 42 + } + set(value) { + this@Int + } + +class X { + var Int.p: Int + get() { + this@Int + return@p 42 + } + set(value) { + this@Int + } + + fun Int.f() { + this@Int + } +} diff --git a/compiler/testData/diagnostics/tests/extensions/contextReceivers/noLabelsByClassName.kt b/compiler/testData/diagnostics/tests/extensions/contextReceivers/noLabelsByClassName.kt new file mode 100644 index 00000000000..f3586fdded4 --- /dev/null +++ b/compiler/testData/diagnostics/tests/extensions/contextReceivers/noLabelsByClassName.kt @@ -0,0 +1,27 @@ +fun Int.f() { + this@Int +} + +var Int.p: Int + get() { + this@Int + return@p 42 + } + set(value) { + this@Int + } + +class X { + var Int.p: Int + get() { + this@Int + return@p 42 + } + set(value) { + this@Int + } + + fun Int.f() { + this@Int + } +} diff --git a/compiler/testData/diagnostics/tests/extensions/contextReceivers/noLabelsByClassName.txt b/compiler/testData/diagnostics/tests/extensions/contextReceivers/noLabelsByClassName.txt new file mode 100644 index 00000000000..04b93dfe612 --- /dev/null +++ b/compiler/testData/diagnostics/tests/extensions/contextReceivers/noLabelsByClassName.txt @@ -0,0 +1,13 @@ +package + +public var kotlin.Int.p: kotlin.Int +public fun kotlin.Int.f(): kotlin.Unit + +public final class X { + public constructor X() + public final var kotlin.Int.p: kotlin.Int + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + public final fun kotlin.Int.f(): 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 95d5035f23b..d38fa7094cf 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 @@ -10666,6 +10666,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/noExplicitReceiver.kt"); } + @Test + @TestMetadata("noLabelsByClassName.kt") + public void testNoLabelsByClassName() throws Exception { + runTest("compiler/testData/diagnostics/tests/extensions/contextReceivers/noLabelsByClassName.kt"); + } + @Test @TestMetadata("outerClass.kt") public void testOuterClass() throws Exception {