Remove parentheses after deleting the last unused constructor parameter
So #KT-16636 Fixed
This commit is contained in:
committed by
Mikhail Glukhikh
parent
7ade2bb708
commit
c5b7d0f0df
@@ -58,6 +58,7 @@ import org.jetbrains.kotlin.idea.findUsages.KotlinFindUsagesHandlerFactory
|
|||||||
import org.jetbrains.kotlin.idea.findUsages.handlers.KotlinFindClassUsagesHandler
|
import org.jetbrains.kotlin.idea.findUsages.handlers.KotlinFindClassUsagesHandler
|
||||||
import org.jetbrains.kotlin.idea.highlighter.markers.hasActualsFor
|
import org.jetbrains.kotlin.idea.highlighter.markers.hasActualsFor
|
||||||
import org.jetbrains.kotlin.idea.imports.importableFqName
|
import org.jetbrains.kotlin.idea.imports.importableFqName
|
||||||
|
import org.jetbrains.kotlin.idea.quickfix.RemoveUnusedFunctionParameterFix
|
||||||
import org.jetbrains.kotlin.idea.references.mainReference
|
import org.jetbrains.kotlin.idea.references.mainReference
|
||||||
import org.jetbrains.kotlin.idea.references.resolveMainReferenceToDescriptors
|
import org.jetbrains.kotlin.idea.references.resolveMainReferenceToDescriptors
|
||||||
import org.jetbrains.kotlin.idea.search.usagesSearch.dataClassComponentFunction
|
import org.jetbrains.kotlin.idea.search.usagesSearch.dataClassComponentFunction
|
||||||
@@ -386,9 +387,14 @@ class SafeDeleteFix(declaration: KtDeclaration) : LocalQuickFix {
|
|||||||
override fun applyFix(project: Project, descriptor: ProblemDescriptor) {
|
override fun applyFix(project: Project, descriptor: ProblemDescriptor) {
|
||||||
val declaration = descriptor.psiElement.getStrictParentOfType<KtDeclaration>() ?: return
|
val declaration = descriptor.psiElement.getStrictParentOfType<KtDeclaration>() ?: return
|
||||||
if (!FileModificationService.getInstance().prepareFileForWrite(declaration.containingFile)) return
|
if (!FileModificationService.getInstance().prepareFileForWrite(declaration.containingFile)) return
|
||||||
ApplicationManager.getApplication().invokeLater(
|
if (declaration is KtParameter && declaration.parent is KtParameterList && declaration.parent?.parent is KtFunction) {
|
||||||
{ SafeDeleteHandler.invoke(project, arrayOf(declaration), false) },
|
RemoveUnusedFunctionParameterFix(declaration).invoke(project, declaration.findExistingEditor(), declaration.containingKtFile)
|
||||||
ModalityState.NON_MODAL
|
}
|
||||||
)
|
else {
|
||||||
|
ApplicationManager.getApplication().invokeLater(
|
||||||
|
{ SafeDeleteHandler.invoke(project, arrayOf(declaration), false) },
|
||||||
|
ModalityState.NON_MODAL
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,14 +18,16 @@ package org.jetbrains.kotlin.idea.quickfix
|
|||||||
|
|
||||||
import com.intellij.openapi.editor.Editor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
|
import org.jetbrains.kotlin.descriptors.MemberDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
||||||
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
||||||
import org.jetbrains.kotlin.diagnostics.Errors
|
import org.jetbrains.kotlin.diagnostics.Errors
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
|
||||||
import org.jetbrains.kotlin.psi.KtFunctionLiteral
|
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.KtParameter
|
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||||
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
|
|
||||||
class RemoveUnusedFunctionParameterFix(parameter: KtParameter) : KotlinQuickFixAction<KtParameter>(parameter) {
|
class RemoveUnusedFunctionParameterFix(parameter: KtParameter) : KotlinQuickFixAction<KtParameter>(parameter) {
|
||||||
override fun getFamilyName() = ChangeFunctionSignatureFix.FAMILY_NAME
|
override fun getFamilyName() = ChangeFunctionSignatureFix.FAMILY_NAME
|
||||||
@@ -36,8 +38,23 @@ class RemoveUnusedFunctionParameterFix(parameter: KtParameter) : KotlinQuickFixA
|
|||||||
|
|
||||||
override fun invoke(project: Project, editor: Editor?, file: KtFile) {
|
override fun invoke(project: Project, editor: Editor?, file: KtFile) {
|
||||||
val element = element ?: return
|
val element = element ?: return
|
||||||
val parameterDescriptor = element.unsafeResolveToDescriptor() as ValueParameterDescriptor
|
val primaryConstructor = element.parent?.parent as? KtPrimaryConstructor
|
||||||
ChangeFunctionSignatureFix.runRemoveParameter(parameterDescriptor, element)
|
val parameterList = element.parent as? KtParameterList
|
||||||
|
if (primaryConstructor != null && parameterList?.parameters?.size == 1 &&
|
||||||
|
(primaryConstructor.getContainingClassOrObject().resolveToDescriptorIfAny() as? MemberDescriptor)?.isExpect == false) {
|
||||||
|
runWriteAction {
|
||||||
|
parameterList.delete()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
val context = element.analyze()
|
||||||
|
val parameterDescriptor = context[BindingContext.VALUE_PARAMETER, element] as? ValueParameterDescriptor ?: return
|
||||||
|
ChangeFunctionSignatureFix.runRemoveParameter(parameterDescriptor, element)
|
||||||
|
val nextParameter = parameterList?.parameters?.getOrNull(parameterDescriptor.index)
|
||||||
|
if (editor != null && nextParameter != null) {
|
||||||
|
editor.caretModel.moveToOffset(nextParameter.startOffset)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object : KotlinSingleIntentionActionFactory() {
|
companion object : KotlinSingleIntentionActionFactory() {
|
||||||
|
|||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
// "Remove parameter 'a'" "true"
|
||||||
|
|
||||||
|
class Foo(<caret>a: String)
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
// "Remove parameter 'a'" "true"
|
||||||
|
|
||||||
|
class Foo<caret>
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
// "Remove parameter 'a'" "true"
|
||||||
|
|
||||||
|
class Foo(<caret>a: String, b: String)
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
// "Remove parameter 'a'" "true"
|
||||||
|
|
||||||
|
class Foo(<caret>b: String)
|
||||||
+1
-1
@@ -1,2 +1,2 @@
|
|||||||
// "Safe delete 'property'" "true"
|
// "Safe delete 'property'" "true"
|
||||||
class UnusedPropertyAsConstructorParameter()
|
class UnusedPropertyAsConstructorParameter<caret>
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
// "Safe delete 'property'" "true"
|
||||||
|
class UnusedPropertyAsConstructorParameter(val <caret>property: String, val foo: String)
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
// "Safe delete 'property'" "true"
|
||||||
|
class UnusedPropertyAsConstructorParameter(<caret>val foo: String)
|
||||||
@@ -1423,6 +1423,18 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
|||||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/changeSignature/removeUnusedParameter.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/changeSignature/removeUnusedParameter.kt");
|
||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("removeUnusedPrimaryConstructorParameter.kt")
|
||||||
|
public void testRemoveUnusedPrimaryConstructorParameter() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/changeSignature/removeUnusedPrimaryConstructorParameter.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("removeUnusedPrimaryConstructorParameter2.kt")
|
||||||
|
public void testRemoveUnusedPrimaryConstructorParameter2() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/changeSignature/removeUnusedPrimaryConstructorParameter2.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("idea/testData/quickfix/changeToLabeledReturn")
|
@TestMetadata("idea/testData/quickfix/changeToLabeledReturn")
|
||||||
@@ -9071,6 +9083,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("unusedPropertyAsConstructorParameter2.kt")
|
||||||
|
public void testUnusedPropertyAsConstructorParameter2() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/removeUnused/unusedPropertyAsConstructorParameter2.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("unusedTypeParameter.kt")
|
@TestMetadata("unusedTypeParameter.kt")
|
||||||
public void testUnusedTypeParameter() throws Exception {
|
public void testUnusedTypeParameter() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/removeUnused/unusedTypeParameter.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/removeUnused/unusedTypeParameter.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user