From 1946360a809606ee1b004fed01461c55ef507ccb Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Thu, 19 Mar 2015 20:57:10 +0300 Subject: [PATCH] Introduced "Unused receiver parameter" inspection. --- .../kotlin/idea/JetBundle.properties | 3 + .../UnusedReceiverParameter.html | 5 ++ idea/src/META-INF/plugin.xml | 7 ++ .../UnusedReceiverParameterInspection.kt | 78 +++++++++++++++++++ .../calledInFunction.kt | 3 + .../implicitReceiverOfExtensionFunction.kt | 5 ++ .../inspectionData/expected.xml | 34 ++++++++ .../inspectionData/inspections.test | 1 + .../irrelevantCallInFunction.kt | 5 ++ .../irrelevantThisInFunction.kt | 5 ++ .../unusedButOverride.kt | 11 +++ .../unusedInFunction.kt | 3 + .../unusedInProperty.kt | 6 ++ .../usedExplicitlyInFunction.kt | 3 + .../unusedReceiverParameter/usedInProperty.kt | 6 ++ .../JetInspectionTestGenerated.java | 6 ++ 16 files changed, 181 insertions(+) create mode 100644 idea/resources/inspectionDescriptions/UnusedReceiverParameter.html create mode 100644 idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt create mode 100644 idea/testData/inspections/unusedReceiverParameter/calledInFunction.kt create mode 100644 idea/testData/inspections/unusedReceiverParameter/implicitReceiverOfExtensionFunction.kt create mode 100644 idea/testData/inspections/unusedReceiverParameter/inspectionData/expected.xml create mode 100644 idea/testData/inspections/unusedReceiverParameter/inspectionData/inspections.test create mode 100644 idea/testData/inspections/unusedReceiverParameter/irrelevantCallInFunction.kt create mode 100644 idea/testData/inspections/unusedReceiverParameter/irrelevantThisInFunction.kt create mode 100644 idea/testData/inspections/unusedReceiverParameter/unusedButOverride.kt create mode 100644 idea/testData/inspections/unusedReceiverParameter/unusedInFunction.kt create mode 100644 idea/testData/inspections/unusedReceiverParameter/unusedInProperty.kt create mode 100644 idea/testData/inspections/unusedReceiverParameter/usedExplicitlyInFunction.kt create mode 100644 idea/testData/inspections/unusedReceiverParameter/usedInProperty.kt diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties index d9dc3e9fb58..74c0d571179 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties @@ -127,6 +127,9 @@ unused.function=Function ''{0}'' is never used unused.property=Property ''{0}'' is never used unused.type.parameter=Type parameter ''{0}'' is never used +unused.receiver.parameter=Receiver parameter is never used +unused.receiver.parameter.remove=Remove redundant receiver parameter + livetemplate.description.main=main() function livetemplate.description.soutp=Prints function parameter names and values to System.out livetemplate.description.iter=Iterate over elements of iterable (for-in loop) diff --git a/idea/resources/inspectionDescriptions/UnusedReceiverParameter.html b/idea/resources/inspectionDescriptions/UnusedReceiverParameter.html new file mode 100644 index 00000000000..f6a08820c4c --- /dev/null +++ b/idea/resources/inspectionDescriptions/UnusedReceiverParameter.html @@ -0,0 +1,5 @@ + + +This inspection reports unused receiver parameter of extension functions and properties. + + diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 553e3e85bb2..8ce262c555d 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -864,6 +864,13 @@ level="WARNING" /> + + + + unusedInProperty.kt + 1 + light_idea_test_case + + Unused receiver parameter + Receiver parameter is never used + + + unusedInFunction.kt + 1 + light_idea_test_case + + Unused receiver parameter + Receiver parameter is never used + + + irrelevantThisInFunction.kt + 1 + light_idea_test_case + + Unused receiver parameter + Receiver parameter is never used + + + irrelevantCallInFunction.kt + 1 + light_idea_test_case + + Unused receiver parameter + Receiver parameter is never used + + diff --git a/idea/testData/inspections/unusedReceiverParameter/inspectionData/inspections.test b/idea/testData/inspections/unusedReceiverParameter/inspectionData/inspections.test new file mode 100644 index 00000000000..b52677b6e0f --- /dev/null +++ b/idea/testData/inspections/unusedReceiverParameter/inspectionData/inspections.test @@ -0,0 +1 @@ +// INSPECTION_CLASS: org.jetbrains.kotlin.idea.inspections.UnusedReceiverParameterInspection diff --git a/idea/testData/inspections/unusedReceiverParameter/irrelevantCallInFunction.kt b/idea/testData/inspections/unusedReceiverParameter/irrelevantCallInFunction.kt new file mode 100644 index 00000000000..6bb7a4ff209 --- /dev/null +++ b/idea/testData/inspections/unusedReceiverParameter/irrelevantCallInFunction.kt @@ -0,0 +1,5 @@ +fun String.foo() { + fun String.local() { + println(length()) + } +} \ No newline at end of file diff --git a/idea/testData/inspections/unusedReceiverParameter/irrelevantThisInFunction.kt b/idea/testData/inspections/unusedReceiverParameter/irrelevantThisInFunction.kt new file mode 100644 index 00000000000..4f0708c7c4d --- /dev/null +++ b/idea/testData/inspections/unusedReceiverParameter/irrelevantThisInFunction.kt @@ -0,0 +1,5 @@ +fun Any.foo() { + fun Any.local() { + println(this) + } +} \ No newline at end of file diff --git a/idea/testData/inspections/unusedReceiverParameter/unusedButOverride.kt b/idea/testData/inspections/unusedReceiverParameter/unusedButOverride.kt new file mode 100644 index 00000000000..d49759c28f7 --- /dev/null +++ b/idea/testData/inspections/unusedReceiverParameter/unusedButOverride.kt @@ -0,0 +1,11 @@ +open class Foo { + open fun Any.foo() { + + } +} + +class Bar: Foo() { + override fun Any.foo() { + + } +} \ No newline at end of file diff --git a/idea/testData/inspections/unusedReceiverParameter/unusedInFunction.kt b/idea/testData/inspections/unusedReceiverParameter/unusedInFunction.kt new file mode 100644 index 00000000000..9d34c4eac6a --- /dev/null +++ b/idea/testData/inspections/unusedReceiverParameter/unusedInFunction.kt @@ -0,0 +1,3 @@ +fun String.foo() { + println() +} \ No newline at end of file diff --git a/idea/testData/inspections/unusedReceiverParameter/unusedInProperty.kt b/idea/testData/inspections/unusedReceiverParameter/unusedInProperty.kt new file mode 100644 index 00000000000..2f36c8f5a00 --- /dev/null +++ b/idea/testData/inspections/unusedReceiverParameter/unusedInProperty.kt @@ -0,0 +1,6 @@ +val String.something: Int + get() = 42 + +fun main(args: Array) { + "".something +} \ No newline at end of file diff --git a/idea/testData/inspections/unusedReceiverParameter/usedExplicitlyInFunction.kt b/idea/testData/inspections/unusedReceiverParameter/usedExplicitlyInFunction.kt new file mode 100644 index 00000000000..3c0e210fcf6 --- /dev/null +++ b/idea/testData/inspections/unusedReceiverParameter/usedExplicitlyInFunction.kt @@ -0,0 +1,3 @@ +fun String.foo() { + println(this) +} \ No newline at end of file diff --git a/idea/testData/inspections/unusedReceiverParameter/usedInProperty.kt b/idea/testData/inspections/unusedReceiverParameter/usedInProperty.kt new file mode 100644 index 00000000000..29e39b87750 --- /dev/null +++ b/idea/testData/inspections/unusedReceiverParameter/usedInProperty.kt @@ -0,0 +1,6 @@ +val String.doubleLength: Int + get() = length() * 2 + +fun main(args: Array) { + "".doubleLength +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/JetInspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/JetInspectionTestGenerated.java index 7dc4536cc67..c001d36975c 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/JetInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/JetInspectionTestGenerated.java @@ -87,6 +87,12 @@ public class JetInspectionTestGenerated extends AbstractJetInspectionTest { doTest(fileName); } + @TestMetadata("unusedReceiverParameter/inspectionData/inspections.test") + public void testUnusedReceiverParameter_inspectionData_Inspections_test() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/inspections/unusedReceiverParameter/inspectionData/inspections.test"); + doTest(fileName); + } + @TestMetadata("unusedSymbol/class/inspectionData/inspections.test") public void testUnusedSymbol_class_inspectionData_Inspections_test() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/inspections/unusedSymbol/class/inspectionData/inspections.test");