From f3be3f449a45ad860474f57634fcaec72a2f39a9 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Wed, 18 Dec 2019 21:57:49 +0900 Subject: [PATCH] Scope function conversion: do not suggest when invoked without receiver #KT-35525 Fixed --- .../idea/inspections/ScopeFunctionConversionInspection.kt | 6 +++--- .../inspectionsLocal/scopeFunctions/runToLet/noReceiver.kt | 5 +++++ .../idea/inspections/LocalInspectionTestGenerated.java | 5 +++++ 3 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 idea/testData/inspectionsLocal/scopeFunctions/runToLet/noReceiver.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/ScopeFunctionConversionInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/ScopeFunctionConversionInspection.kt index e0a6dbc6c19..b6e83c9d6ed 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/ScopeFunctionConversionInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/ScopeFunctionConversionInspection.kt @@ -80,9 +80,9 @@ private fun getCounterpart(expression: KtCallExpression): String? { } val bindingContext = callee.analyze(BodyResolveMode.PARTIAL) val resolvedCall = callee.getResolvedCall(bindingContext) ?: return null - if (resolvedCall.resultingDescriptor.fqNameSafe.asString() == "kotlin.$calleeName" && - nameResolvesToStdlib(expression, bindingContext, counterpartName) - ) { + val descriptor = resolvedCall.resultingDescriptor + if (descriptor.dispatchReceiverParameter == null && descriptor.extensionReceiverParameter == null) return null + if (descriptor.fqNameSafe.asString() == "kotlin.$calleeName" && nameResolvesToStdlib(expression, bindingContext, counterpartName)) { return counterpartName } } diff --git a/idea/testData/inspectionsLocal/scopeFunctions/runToLet/noReceiver.kt b/idea/testData/inspectionsLocal/scopeFunctions/runToLet/noReceiver.kt new file mode 100644 index 00000000000..552358593a4 --- /dev/null +++ b/idea/testData/inspectionsLocal/scopeFunctions/runToLet/noReceiver.kt @@ -0,0 +1,5 @@ +// WITH_RUNTIME +// PROBLEM: none +fun hello() { + run { } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java index a191d7a88d9..445671792cd 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -12246,6 +12246,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { runTest("idea/testData/inspectionsLocal/scopeFunctions/runToLet/capturedIt.kt"); } + @TestMetadata("noReceiver.kt") + public void testNoReceiver() throws Exception { + runTest("idea/testData/inspectionsLocal/scopeFunctions/runToLet/noReceiver.kt"); + } + @TestMetadata("simple.kt") public void testSimple() throws Exception { runTest("idea/testData/inspectionsLocal/scopeFunctions/runToLet/simple.kt");