From 5ef427e5b6f07db8fa8febc42ae658316b535693 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 23 Oct 2017 19:13:46 +0300 Subject: [PATCH] Do not report "unused receiver" on companion objects So #KT-19560 Fixed GitOrigin-RevId: 728ebf0f35336c9949ff955ef3d5c2bbdf9bbb4d --- .../UnusedReceiverParameterInspection.kt | 4 ++++ .../inspections/LocalInspectionTestGenerated.java | 12 ++++++++++++ .../unusedReceiverParameter/companionPure.kt | 13 +++++++++++++ .../unusedReceiverParameter/object.kt | 8 ++++++++ .../unusedReceiverParameter/object.kt.after | 8 ++++++++ 5 files changed, 45 insertions(+) create mode 100644 plugins/kotlin/idea/tests/testData/inspectionsLocal/unusedReceiverParameter/companionPure.kt create mode 100644 plugins/kotlin/idea/tests/testData/inspectionsLocal/unusedReceiverParameter/object.kt create mode 100644 plugins/kotlin/idea/tests/testData/inspectionsLocal/unusedReceiverParameter/object.kt.after diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt index 9e58c961e2d6..3cbdceaca3ee 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt @@ -50,6 +50,10 @@ class UnusedReceiverParameterInspection : AbstractKotlinInspection() { val receiverTypeReference = callableDeclaration.receiverTypeReference if (receiverTypeReference == null || receiverTypeReference.textRange.isEmpty) return + val context = receiverTypeReference.analyze() + val receiverType = context[BindingContext.TYPE, receiverTypeReference] ?: return + if (DescriptorUtils.isCompanionObject(receiverType.constructor.declarationDescriptor)) return + if (callableDeclaration.isOverridable() || callableDeclaration.hasModifier(KtTokens.OVERRIDE_KEYWORD) || callableDeclaration.hasModifier(KtTokens.OPERATOR_KEYWORD) || diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java index fc40139b995e..c9f692646491 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -2327,12 +2327,24 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { doTest(fileName); } + @TestMetadata("companionPure.kt") + public void testCompanionPure() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/unusedReceiverParameter/companionPure.kt"); + doTest(fileName); + } + @TestMetadata("infix.kt") public void testInfix() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/unusedReceiverParameter/infix.kt"); doTest(fileName); } + @TestMetadata("object.kt") + public void testObject() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/unusedReceiverParameter/object.kt"); + doTest(fileName); + } + @TestMetadata("operator.kt") public void testOperator() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/unusedReceiverParameter/operator.kt"); diff --git a/plugins/kotlin/idea/tests/testData/inspectionsLocal/unusedReceiverParameter/companionPure.kt b/plugins/kotlin/idea/tests/testData/inspectionsLocal/unusedReceiverParameter/companionPure.kt new file mode 100644 index 000000000000..a6244c6bb17f --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/inspectionsLocal/unusedReceiverParameter/companionPure.kt @@ -0,0 +1,13 @@ +// PROBLEM: none + +class Test { + companion object { + + } +} + +fun Test.Companion.foo() = 42 + +fun main(args: Array) { + Test.foo() +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/inspectionsLocal/unusedReceiverParameter/object.kt b/plugins/kotlin/idea/tests/testData/inspectionsLocal/unusedReceiverParameter/object.kt new file mode 100644 index 000000000000..81f4df19da6c --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/inspectionsLocal/unusedReceiverParameter/object.kt @@ -0,0 +1,8 @@ +object Test + +fun Test.foo() = 42 + +fun main(args: Array) { + val x = Test + x.foo() +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/inspectionsLocal/unusedReceiverParameter/object.kt.after b/plugins/kotlin/idea/tests/testData/inspectionsLocal/unusedReceiverParameter/object.kt.after new file mode 100644 index 000000000000..26977295ae5d --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/inspectionsLocal/unusedReceiverParameter/object.kt.after @@ -0,0 +1,8 @@ +object Test + +fun foo() = 42 + +fun main(args: Array) { + val x = Test + foo() +} \ No newline at end of file