From f7883fb1dff6b25bddf0b039720dc34ac995606b Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Thu, 19 Mar 2015 21:41:12 +0300 Subject: [PATCH] Added quick fix for "Unused receiver parameter". --- .../UnusedReceiverParameterInspection.kt | 22 ++++++++++++++++--- .../quickfix/removeUnusedReceiver/.inspection | 1 + .../removeUnusedReceiver/afterInFunction.kt | 4 ++++ .../removeUnusedReceiver/afterInProperty.kt | 3 +++ .../removeUnusedReceiver/beforeInFunction.kt | 4 ++++ .../removeUnusedReceiver/beforeInProperty.kt | 3 +++ .../idea/quickfix/QuickFixTestGenerated.java | 22 +++++++++++++++++++ 7 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 idea/testData/quickfix/removeUnusedReceiver/.inspection create mode 100644 idea/testData/quickfix/removeUnusedReceiver/afterInFunction.kt create mode 100644 idea/testData/quickfix/removeUnusedReceiver/afterInProperty.kt create mode 100644 idea/testData/quickfix/removeUnusedReceiver/beforeInFunction.kt create mode 100644 idea/testData/quickfix/removeUnusedReceiver/beforeInProperty.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt index 67a79dad507..6bd71d147b2 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt @@ -17,7 +17,6 @@ package org.jetbrains.kotlin.idea.inspections import com.intellij.codeInspection.* -import com.intellij.extapi.psi.ASTDelegatePsiElement import com.intellij.openapi.project.Project import com.intellij.psi.PsiElementVisitor import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor @@ -27,7 +26,7 @@ import org.jetbrains.kotlin.idea.search.usagesSearch.descriptor import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.isOverridable -import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.psi.typeRefHelpers.setReceiverTypeReference import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver @@ -62,7 +61,12 @@ public class UnusedReceiverParameterInspection : AbstractKotlinInspection() { }) if (!used) { - holder.registerProblem(receiverTypeReference, JetBundle.message("unused.receiver.parameter"), ProblemHighlightType.LIKE_UNUSED_SYMBOL) // TODO add quick fix + holder.registerProblem( + receiverTypeReference, + JetBundle.message("unused.receiver.parameter"), + ProblemHighlightType.LIKE_UNUSED_SYMBOL, + MyQuickFix(callableDeclaration) + ) } } @@ -75,4 +79,16 @@ public class UnusedReceiverParameterInspection : AbstractKotlinInspection() { } } } + + private class MyQuickFix(val declaration: JetCallableDeclaration): LocalQuickFix { + override fun getName(): String { + return JetBundle.message("unused.receiver.parameter.remove") + } + + override fun applyFix(project: Project, descriptor: ProblemDescriptor?) { + declaration.setReceiverTypeReference(null) + } + + override fun getFamilyName(): String = "whatever" + } } diff --git a/idea/testData/quickfix/removeUnusedReceiver/.inspection b/idea/testData/quickfix/removeUnusedReceiver/.inspection new file mode 100644 index 00000000000..d2d61d0897d --- /dev/null +++ b/idea/testData/quickfix/removeUnusedReceiver/.inspection @@ -0,0 +1 @@ +org.jetbrains.kotlin.idea.inspections.UnusedReceiverParameterInspection \ No newline at end of file diff --git a/idea/testData/quickfix/removeUnusedReceiver/afterInFunction.kt b/idea/testData/quickfix/removeUnusedReceiver/afterInFunction.kt new file mode 100644 index 00000000000..c60bc4fb6fa --- /dev/null +++ b/idea/testData/quickfix/removeUnusedReceiver/afterInFunction.kt @@ -0,0 +1,4 @@ +// "Remove redundant receiver parameter" "true" +fun foo() { + +} diff --git a/idea/testData/quickfix/removeUnusedReceiver/afterInProperty.kt b/idea/testData/quickfix/removeUnusedReceiver/afterInProperty.kt new file mode 100644 index 00000000000..7664929571a --- /dev/null +++ b/idea/testData/quickfix/removeUnusedReceiver/afterInProperty.kt @@ -0,0 +1,3 @@ +// "Remove redundant receiver parameter" "true" +val v: Int + get() = 123 diff --git a/idea/testData/quickfix/removeUnusedReceiver/beforeInFunction.kt b/idea/testData/quickfix/removeUnusedReceiver/beforeInFunction.kt new file mode 100644 index 00000000000..449b9391b76 --- /dev/null +++ b/idea/testData/quickfix/removeUnusedReceiver/beforeInFunction.kt @@ -0,0 +1,4 @@ +// "Remove redundant receiver parameter" "true" +fun Any.foo() { + +} diff --git a/idea/testData/quickfix/removeUnusedReceiver/beforeInProperty.kt b/idea/testData/quickfix/removeUnusedReceiver/beforeInProperty.kt new file mode 100644 index 00000000000..19784d24f1d --- /dev/null +++ b/idea/testData/quickfix/removeUnusedReceiver/beforeInProperty.kt @@ -0,0 +1,3 @@ +// "Remove redundant receiver parameter" "true" +val Any.v: Int + get() = 123 diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 099cd88c5de..5ac7d801b7c 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -45,6 +45,7 @@ import java.util.regex.Pattern; QuickFixTestGenerated.Override.class, QuickFixTestGenerated.PlatformClasses.class, QuickFixTestGenerated.RemoveUnused.class, + QuickFixTestGenerated.RemoveUnusedReceiver.class, QuickFixTestGenerated.Supercalls.class, QuickFixTestGenerated.SupertypeInitialization.class, QuickFixTestGenerated.Suppress.class, @@ -3774,6 +3775,27 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { } } + @TestMetadata("idea/testData/quickfix/removeUnusedReceiver") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class RemoveUnusedReceiver extends AbstractQuickFixTest { + public void testAllFilesPresentInRemoveUnusedReceiver() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/removeUnusedReceiver"), Pattern.compile("^before(\\w+)\\.kt$"), true); + } + + @TestMetadata("beforeInFunction.kt") + public void testInFunction() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/removeUnusedReceiver/beforeInFunction.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInProperty.kt") + public void testInProperty() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/removeUnusedReceiver/beforeInProperty.kt"); + doTest(fileName); + } + } + @TestMetadata("idea/testData/quickfix/supercalls") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)