From 1d8eb6dc9e1fb2c331335a0bebbb401b81574325 Mon Sep 17 00:00:00 2001 From: Egor Kulikov Date: Mon, 22 May 2023 17:48:19 +0200 Subject: [PATCH] [FIR] Only take receiver on lambda if present ^KTIJ-25127 fixed --- .../kotlin/analysis/api/fir/components/KtFirCallResolver.kt | 2 +- .../testdata/getOrBuildFir/calls/noReceiverOnLambda.kt | 5 +++++ .../testdata/getOrBuildFir/calls/noReceiverOnLambda.txt | 6 ++++++ .../api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java | 6 ++++++ .../low/level/api/fir/SourceGetOrBuildFirTestGenerated.java | 6 ++++++ 5 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 analysis/low-level-api-fir/testdata/getOrBuildFir/calls/noReceiverOnLambda.kt create mode 100644 analysis/low-level-api-fir/testdata/getOrBuildFir/calls/noReceiverOnLambda.txt diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt index 4630e7565c2..976296df066 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt @@ -425,7 +425,7 @@ internal class KtFirCallResolver( dispatchReceiverValue = KtExplicitReceiverValue(explicitReceiverPsi, dispatchReceiver.typeRef.coneType.asKtType(), false, token) if (firstArgIsExtensionReceiver) { - extensionReceiverValue = (fir as FirFunctionCall).arguments.first().toKtReceiverValue() + extensionReceiverValue = (fir as FirFunctionCall).arguments.firstOrNull()?.toKtReceiverValue() } else { extensionReceiverValue = extensionReceiver.toKtReceiverValue() } diff --git a/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/noReceiverOnLambda.kt b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/noReceiverOnLambda.kt new file mode 100644 index 00000000000..872eae17c41 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/noReceiverOnLambda.kt @@ -0,0 +1,5 @@ +class SomeTest + +fun dslSpeedTest(f2: SomeTest.() -> Unit) { + f2() +} diff --git a/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/noReceiverOnLambda.txt b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/noReceiverOnLambda.txt new file mode 100644 index 00000000000..76ef646a28c --- /dev/null +++ b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/noReceiverOnLambda.txt @@ -0,0 +1,6 @@ +KT element: KtCallExpression +FIR element: FirImplicitInvokeCallImpl +FIR source kind: KtRealSourceElementKind + +FIR element rendered: +R|/f2|.R|SubstitutionOverride#|() diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java index 485b5cbb2e3..cbb9f4a3183 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java @@ -359,6 +359,12 @@ public class OutOfContentRootGetOrBuildFirTestGenerated extends AbstractOutOfCon runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/calls/invokeCallArgumentList.kt"); } + @Test + @TestMetadata("noReceiverOnLambda.kt") + public void testNoReceiverOnLambda() throws Exception { + runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/calls/noReceiverOnLambda.kt"); + } + @Test @TestMetadata("qualifiedCallInsidePropertyInsideConstructor.kt") public void testQualifiedCallInsidePropertyInsideConstructor() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java index ff585c2dcf1..b879dceda4e 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java @@ -359,6 +359,12 @@ public class SourceGetOrBuildFirTestGenerated extends AbstractSourceGetOrBuildFi runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/calls/invokeCallArgumentList.kt"); } + @Test + @TestMetadata("noReceiverOnLambda.kt") + public void testNoReceiverOnLambda() throws Exception { + runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/calls/noReceiverOnLambda.kt"); + } + @Test @TestMetadata("qualifiedCallInsidePropertyInsideConstructor.kt") public void testQualifiedCallInsidePropertyInsideConstructor() throws Exception {