From 455db32199cb230ceeeb40a23bd81d030b5fef58 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Mon, 10 Sep 2018 10:10:43 +0300 Subject: [PATCH] "Remove parameter" quick fix: remove also type constraint #KT-26673 Fixed --- .../quickfix/RemoveUnusedFunctionParameterFix.kt | 15 ++++++++++++++- ...ParameterWithTypeParameterAndTypeConstraint.kt | 6 ++++++ ...terWithTypeParameterAndTypeConstraint.kt.after | 6 ++++++ ...arameterWithTypeParameterAndTypeConstraint2.kt | 6 ++++++ ...erWithTypeParameterAndTypeConstraint2.kt.after | 6 ++++++ .../idea/quickfix/QuickFixTestGenerated.java | 10 ++++++++++ 6 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 idea/testData/quickfix/changeSignature/removeUnusedParameterWithTypeParameterAndTypeConstraint.kt create mode 100644 idea/testData/quickfix/changeSignature/removeUnusedParameterWithTypeParameterAndTypeConstraint.kt.after create mode 100644 idea/testData/quickfix/changeSignature/removeUnusedParameterWithTypeParameterAndTypeConstraint2.kt create mode 100644 idea/testData/quickfix/changeSignature/removeUnusedParameterWithTypeParameterAndTypeConstraint2.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveUnusedFunctionParameterFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveUnusedFunctionParameterFix.kt index 1e0e315c0e6..691e4a31e59 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveUnusedFunctionParameterFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveUnusedFunctionParameterFix.kt @@ -23,7 +23,9 @@ import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.idea.caches.resolve.resolveToParameterDescriptorIfAny import org.jetbrains.kotlin.idea.intentions.RemoveEmptyPrimaryConstructorIntention +import org.jetbrains.kotlin.idea.references.KtSimpleNameReference import org.jetbrains.kotlin.idea.util.application.runWriteAction +import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode @@ -91,11 +93,22 @@ class RemoveUnusedFunctionParameterFix(parameter: KtParameter) : KotlinQuickFixA } fun runRemoveUnusedTypeParameters(typeParameters: List) { - val unusedTypeParams = typeParameters.filter { ReferencesSearch.search(it).findFirst() == null } + val unusedTypeParams = typeParameters.filter { typeParameter -> + ReferencesSearch.search(typeParameter).none { (it as? KtSimpleNameReference)?.expression?.parent !is KtTypeConstraint } + } if (unusedTypeParams.isEmpty()) return runWriteAction { unusedTypeParams.forEach { typeParameter -> val typeParameterList = typeParameter.parent as? KtTypeParameterList ?: return@forEach + val typeConstraintList = typeParameterList.parent.getChildOfType() + if (typeConstraintList != null) { + val typeConstraint = typeConstraintList.constraints.find { it.subjectTypeParameterName?.text == typeParameter.text } + if (typeConstraint != null) EditCommaSeparatedListHelper.removeItem(typeConstraint) + if (typeConstraintList.constraints.size == 0) { + val prev = typeConstraintList.getPrevSiblingIgnoringWhitespaceAndComments() + if (prev?.node?.elementType == KtTokens.WHERE_KEYWORD) prev?.delete() + } + } if (typeParameterList.parameters.size == 1) typeParameterList.delete() else diff --git a/idea/testData/quickfix/changeSignature/removeUnusedParameterWithTypeParameterAndTypeConstraint.kt b/idea/testData/quickfix/changeSignature/removeUnusedParameterWithTypeParameterAndTypeConstraint.kt new file mode 100644 index 00000000000..fc66c516b8d --- /dev/null +++ b/idea/testData/quickfix/changeSignature/removeUnusedParameterWithTypeParameterAndTypeConstraint.kt @@ -0,0 +1,6 @@ +// "Remove parameter 'x'" "true" +fun foo(x: X) where X : Number {} + +fun test() { + foo(1) +} \ No newline at end of file diff --git a/idea/testData/quickfix/changeSignature/removeUnusedParameterWithTypeParameterAndTypeConstraint.kt.after b/idea/testData/quickfix/changeSignature/removeUnusedParameterWithTypeParameterAndTypeConstraint.kt.after new file mode 100644 index 00000000000..cee8ab2d196 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/removeUnusedParameterWithTypeParameterAndTypeConstraint.kt.after @@ -0,0 +1,6 @@ +// "Remove parameter 'x'" "true" +fun foo() {} + +fun test() { + foo() +} \ No newline at end of file diff --git a/idea/testData/quickfix/changeSignature/removeUnusedParameterWithTypeParameterAndTypeConstraint2.kt b/idea/testData/quickfix/changeSignature/removeUnusedParameterWithTypeParameterAndTypeConstraint2.kt new file mode 100644 index 00000000000..b01711f8a66 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/removeUnusedParameterWithTypeParameterAndTypeConstraint2.kt @@ -0,0 +1,6 @@ +// "Remove parameter 'x'" "true" +fun bar(x: X, y: Y) where X : Number, Y : Number {} + +fun test() { + bar(1, 2) +} diff --git a/idea/testData/quickfix/changeSignature/removeUnusedParameterWithTypeParameterAndTypeConstraint2.kt.after b/idea/testData/quickfix/changeSignature/removeUnusedParameterWithTypeParameterAndTypeConstraint2.kt.after new file mode 100644 index 00000000000..a9d83219676 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/removeUnusedParameterWithTypeParameterAndTypeConstraint2.kt.after @@ -0,0 +1,6 @@ +// "Remove parameter 'x'" "true" +fun bar(y: Y) where Y : Number {} + +fun test() { + bar(2) +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 61438e080bc..5664ba6d2c6 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -1866,6 +1866,16 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/changeSignature/removeUnusedParameterWithTypeParameter7.kt"); } + @TestMetadata("removeUnusedParameterWithTypeParameterAndTypeConstraint.kt") + public void testRemoveUnusedParameterWithTypeParameterAndTypeConstraint() throws Exception { + runTest("idea/testData/quickfix/changeSignature/removeUnusedParameterWithTypeParameterAndTypeConstraint.kt"); + } + + @TestMetadata("removeUnusedParameterWithTypeParameterAndTypeConstraint2.kt") + public void testRemoveUnusedParameterWithTypeParameterAndTypeConstraint2() throws Exception { + runTest("idea/testData/quickfix/changeSignature/removeUnusedParameterWithTypeParameterAndTypeConstraint2.kt"); + } + @TestMetadata("removeUnusedPrimaryConstructorParameter.kt") public void testRemoveUnusedPrimaryConstructorParameter() throws Exception { runTest("idea/testData/quickfix/changeSignature/removeUnusedPrimaryConstructorParameter.kt");