From a61648651b9e6e4636a5c4badf14a486951c3b58 Mon Sep 17 00:00:00 2001 From: Victor Petukhov Date: Wed, 27 Jul 2022 20:16:02 +0200 Subject: [PATCH] [FE 1.0] Use original receivers for NI while DSL scope violation checking Original receivers are already use in the near place ^KT-46969 Fixed --- ...CompilerTestFE10TestdataTestGenerated.java | 6 +++++ ...irOldFrontendDiagnosticsTestGenerated.java | 6 +++++ ...DiagnosticsWithLightTreeTestGenerated.java | 6 +++++ .../checkers/DslScopeViolationCallChecker.kt | 3 ++- .../tests/resolve/dslMarker/kt46969.kt | 26 +++++++++++++++++++ .../tests/resolve/dslMarker/kt46969.txt | 20 ++++++++++++++ .../test/runners/DiagnosticTestGenerated.java | 6 +++++ 7 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/diagnostics/tests/resolve/dslMarker/kt46969.kt create mode 100644 compiler/testData/diagnostics/tests/resolve/dslMarker/kt46969.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 2622149cc68..e63edac73bd 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 @@ -26061,6 +26061,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/resolve/dslMarker/kt31360.kt"); } + @Test + @TestMetadata("kt46969.kt") + public void testKt46969() throws Exception { + runTest("compiler/testData/diagnostics/tests/resolve/dslMarker/kt46969.kt"); + } + @Test @TestMetadata("markedReceiverWithCapturedTypeArgument.kt") public void testMarkedReceiverWithCapturedTypeArgument() 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 903d7f0642f..31bdbc0f2a3 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 @@ -26061,6 +26061,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/resolve/dslMarker/kt31360.kt"); } + @Test + @TestMetadata("kt46969.kt") + public void testKt46969() throws Exception { + runTest("compiler/testData/diagnostics/tests/resolve/dslMarker/kt46969.kt"); + } + @Test @TestMetadata("markedReceiverWithCapturedTypeArgument.kt") public void testMarkedReceiverWithCapturedTypeArgument() 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 17fce1943a4..fa0d3e5ab9d 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 @@ -26061,6 +26061,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/resolve/dslMarker/kt31360.kt"); } + @Test + @TestMetadata("kt46969.kt") + public void testKt46969() throws Exception { + runTest("compiler/testData/diagnostics/tests/resolve/dslMarker/kt46969.kt"); + } + @Test @TestMetadata("markedReceiverWithCapturedTypeArgument.kt") public void testMarkedReceiverWithCapturedTypeArgument() throws Exception { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/DslScopeViolationCallChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/DslScopeViolationCallChecker.kt index e0005a11c19..223ccf3c819 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/DslScopeViolationCallChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/DslScopeViolationCallChecker.kt @@ -47,11 +47,12 @@ object DslScopeViolationCallChecker : CallChecker { reportOn: PsiElement, context: CallCheckerContext ) { + val isNewInferenceEnabled = context.languageVersionSettings.supportsFeature(LanguageFeature.NewInference) val receiversUntilOneFromTheCall = context.scope.parentsWithSelf .filterIsInstance() .flatMap { listOfNotNull(it.implicitReceiver) + it.contextReceiversGroup } - .map { it.value } + .map { if (isNewInferenceEnabled) it.value.original else it.value } .takeWhile { it != callImplicitReceiver }.toList() if (receiversUntilOneFromTheCall.isEmpty()) return diff --git a/compiler/testData/diagnostics/tests/resolve/dslMarker/kt46969.kt b/compiler/testData/diagnostics/tests/resolve/dslMarker/kt46969.kt new file mode 100644 index 00000000000..40ed2ab6546 --- /dev/null +++ b/compiler/testData/diagnostics/tests/resolve/dslMarker/kt46969.kt @@ -0,0 +1,26 @@ +// FIR_IDENTICAL +@DslMarker +annotation class Foo + +@Foo +interface Scope { + fun value(value: T) +} + +fun foo(block: Scope.() -> Unit) {} + +inline fun Scope<*>.nested(noinline block: Scope.() -> Unit) {} +inline fun Scope<*>.nested2(noinline block: Scope.() -> Unit) {} + + +fun main() { + foo { + nested { + value(1) + + nested2 { + value("foo") + } + } + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/resolve/dslMarker/kt46969.txt b/compiler/testData/diagnostics/tests/resolve/dslMarker/kt46969.txt new file mode 100644 index 00000000000..d0e4e4d33be --- /dev/null +++ b/compiler/testData/diagnostics/tests/resolve/dslMarker/kt46969.txt @@ -0,0 +1,20 @@ +package + +public fun foo(/*0*/ block: Scope.() -> kotlin.Unit): kotlin.Unit +public fun main(): kotlin.Unit +public inline fun Scope<*>.nested(/*0*/ noinline block: Scope.() -> kotlin.Unit): kotlin.Unit +public inline fun Scope<*>.nested2(/*0*/ noinline block: Scope.() -> kotlin.Unit): kotlin.Unit + +@kotlin.DslMarker public final annotation class Foo : kotlin.Annotation { + public constructor Foo() + 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 +} + +@Foo public interface Scope { + 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 abstract fun value(/*0*/ value: T): 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 e534e28329c..f441e8abbf6 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 @@ -26073,6 +26073,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/resolve/dslMarker/kt31360.kt"); } + @Test + @TestMetadata("kt46969.kt") + public void testKt46969() throws Exception { + runTest("compiler/testData/diagnostics/tests/resolve/dslMarker/kt46969.kt"); + } + @Test @TestMetadata("markedReceiverWithCapturedTypeArgument.kt") public void testMarkedReceiverWithCapturedTypeArgument() throws Exception {