From 6c2eb06351e22e9491116114421032a2b2436897 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 --- .../UnusedReceiverParameterInspection.kt | 4 ++++ .../unusedReceiverParameter/companionPure.kt | 13 +++++++++++++ .../unusedReceiverParameter/object.kt | 8 ++++++++ .../unusedReceiverParameter/object.kt.after | 8 ++++++++ .../inspections/LocalInspectionTestGenerated.java | 12 ++++++++++++ 5 files changed, 45 insertions(+) create mode 100644 idea/testData/inspectionsLocal/unusedReceiverParameter/companionPure.kt create mode 100644 idea/testData/inspectionsLocal/unusedReceiverParameter/object.kt create mode 100644 idea/testData/inspectionsLocal/unusedReceiverParameter/object.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt index 9e58c961e2d..3cbdceaca3e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt +++ b/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/idea/testData/inspectionsLocal/unusedReceiverParameter/companionPure.kt b/idea/testData/inspectionsLocal/unusedReceiverParameter/companionPure.kt new file mode 100644 index 00000000000..a6244c6bb17 --- /dev/null +++ b/idea/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/idea/testData/inspectionsLocal/unusedReceiverParameter/object.kt b/idea/testData/inspectionsLocal/unusedReceiverParameter/object.kt new file mode 100644 index 00000000000..81f4df19da6 --- /dev/null +++ b/idea/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/idea/testData/inspectionsLocal/unusedReceiverParameter/object.kt.after b/idea/testData/inspectionsLocal/unusedReceiverParameter/object.kt.after new file mode 100644 index 00000000000..26977295ae5 --- /dev/null +++ b/idea/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 diff --git a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java index fc40139b995..c9f69264649 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/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");