From bc0773b2197dbdc18cf6f495eba28db4d449c9b3 Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Mon, 24 Jun 2019 11:16:45 +0300 Subject: [PATCH] [NI] Capture receiver of invoke-based call #KT-32133 Fixed --- .../kotlin/fir/FirDiagnosticsSmokeTestGenerated.java | 5 +++++ .../kotlin/resolve/calls/tower/PSICallResolver.kt | 2 +- .../capturedTypes/invokeCallWithCapturedReceiver.kt | 10 ++++++++++ .../capturedTypes/invokeCallWithCapturedReceiver.txt | 11 +++++++++++ .../kotlin/checkers/DiagnosticsTestGenerated.java | 5 +++++ .../javac/DiagnosticsUsingJavacTestGenerated.java | 5 +++++ 6 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/diagnostics/tests/inference/capturedTypes/invokeCallWithCapturedReceiver.kt create mode 100644 compiler/testData/diagnostics/tests/inference/capturedTypes/invokeCallWithCapturedReceiver.txt diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java index e90b94b6a0e..b541f1d1692 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java @@ -9835,6 +9835,11 @@ public class FirDiagnosticsSmokeTestGenerated extends AbstractFirDiagnosticsSmok runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/expectedTypeMismatchWithInVariance.kt"); } + @TestMetadata("invokeCallWithCapturedReceiver.kt") + public void testInvokeCallWithCapturedReceiver() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/invokeCallWithCapturedReceiver.kt"); + } + @TestMetadata("kt25302.kt") public void testKt25302() throws Exception { runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/kt25302.kt"); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt index 0aee6b6e18b..d8ef1849cf6 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt @@ -477,7 +477,7 @@ class PSICallResolver( variableReceiver, context.dataFlowInfo.getCollectedTypes(dataFlowValue, context.languageVersionSettings), dataFlowValue.isStable - ) + ).prepareReceiverRegardingCaptureTypes() } } diff --git a/compiler/testData/diagnostics/tests/inference/capturedTypes/invokeCallWithCapturedReceiver.kt b/compiler/testData/diagnostics/tests/inference/capturedTypes/invokeCallWithCapturedReceiver.kt new file mode 100644 index 00000000000..7d205289439 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/capturedTypes/invokeCallWithCapturedReceiver.kt @@ -0,0 +1,10 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER + +class Inv1 + +operator fun Inv1.invoke(action: T.() -> Unit) {} + +fun test(inv: Inv1) { + inv { } + inv.invoke { } +} diff --git a/compiler/testData/diagnostics/tests/inference/capturedTypes/invokeCallWithCapturedReceiver.txt b/compiler/testData/diagnostics/tests/inference/capturedTypes/invokeCallWithCapturedReceiver.txt new file mode 100644 index 00000000000..1c73f3733a6 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/capturedTypes/invokeCallWithCapturedReceiver.txt @@ -0,0 +1,11 @@ +package + +public fun test(/*0*/ inv: Inv1): kotlin.Unit +public operator fun Inv1.invoke(/*0*/ action: T.() -> kotlin.Unit): kotlin.Unit + +public final class Inv1 { + public constructor Inv1() + 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 +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index 84f051f3742..399bd766a19 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -9842,6 +9842,11 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/expectedTypeMismatchWithInVariance.kt"); } + @TestMetadata("invokeCallWithCapturedReceiver.kt") + public void testInvokeCallWithCapturedReceiver() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/invokeCallWithCapturedReceiver.kt"); + } + @TestMetadata("kt25302.kt") public void testKt25302() throws Exception { runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/kt25302.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index 6d262a4921f..dd556a98a8d 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -9837,6 +9837,11 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/expectedTypeMismatchWithInVariance.kt"); } + @TestMetadata("invokeCallWithCapturedReceiver.kt") + public void testInvokeCallWithCapturedReceiver() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/invokeCallWithCapturedReceiver.kt"); + } + @TestMetadata("kt25302.kt") public void testKt25302() throws Exception { runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/kt25302.kt");