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.highlighter.markers.hasActualsFor
|
||||
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.resolveMainReferenceToDescriptors
|
||||
import org.jetbrains.kotlin.idea.search.usagesSearch.dataClassComponentFunction
|
||||
@@ -386,9 +387,14 @@ class SafeDeleteFix(declaration: KtDeclaration) : LocalQuickFix {
|
||||
override fun applyFix(project: Project, descriptor: ProblemDescriptor) {
|
||||
val declaration = descriptor.psiElement.getStrictParentOfType<KtDeclaration>() ?: return
|
||||
if (!FileModificationService.getInstance().prepareFileForWrite(declaration.containingFile)) return
|
||||
ApplicationManager.getApplication().invokeLater(
|
||||
{ SafeDeleteHandler.invoke(project, arrayOf(declaration), false) },
|
||||
ModalityState.NON_MODAL
|
||||
)
|
||||
if (declaration is KtParameter && declaration.parent is KtParameterList && declaration.parent?.parent is KtFunction) {
|
||||
RemoveUnusedFunctionParameterFix(declaration).invoke(project, declaration.findExistingEditor(), declaration.containingKtFile)
|
||||
}
|
||||
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.project.Project
|
||||
import org.jetbrains.kotlin.descriptors.MemberDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
||||
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
||||
import org.jetbrains.kotlin.diagnostics.Errors
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.KtFunctionLiteral
|
||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
||||
import org.jetbrains.kotlin.psi.KtParameter
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
|
||||
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
|
||||
class RemoveUnusedFunctionParameterFix(parameter: KtParameter) : KotlinQuickFixAction<KtParameter>(parameter) {
|
||||
override fun getFamilyName() = ChangeFunctionSignatureFix.FAMILY_NAME
|
||||
@@ -36,8 +38,23 @@ class RemoveUnusedFunctionParameterFix(parameter: KtParameter) : KotlinQuickFixA
|
||||
|
||||
override fun invoke(project: Project, editor: Editor?, file: KtFile) {
|
||||
val element = element ?: return
|
||||
val parameterDescriptor = element.unsafeResolveToDescriptor() as ValueParameterDescriptor
|
||||
ChangeFunctionSignatureFix.runRemoveParameter(parameterDescriptor, element)
|
||||
val primaryConstructor = element.parent?.parent as? KtPrimaryConstructor
|
||||
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() {
|
||||
|
||||
+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"
|
||||
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");
|
||||
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")
|
||||
@@ -9071,6 +9083,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
||||
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")
|
||||
public void testUnusedTypeParameter() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/removeUnused/unusedTypeParameter.kt");
|
||||
|
||||
Reference in New Issue
Block a user