Added quick fix for "Unused receiver parameter".

This commit is contained in:
Evgeny Gerashchenko
2015-03-19 21:41:12 +03:00
parent 1946360a80
commit f7883fb1df
7 changed files with 56 additions and 3 deletions
@@ -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"
}
}
@@ -0,0 +1 @@
org.jetbrains.kotlin.idea.inspections.UnusedReceiverParameterInspection
@@ -0,0 +1,4 @@
// "Remove redundant receiver parameter" "true"
fun foo() {
}
@@ -0,0 +1,3 @@
// "Remove redundant receiver parameter" "true"
val v: Int
get() = 123
@@ -0,0 +1,4 @@
// "Remove redundant receiver parameter" "true"
fun <caret>Any.foo() {
}
@@ -0,0 +1,3 @@
// "Remove redundant receiver parameter" "true"
val <caret>Any.v: Int
get() = 123
@@ -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)