From 23605e08bef5ec424d08acc2fe546a15e6aed40e Mon Sep 17 00:00:00 2001 From: Mark Punzalan Date: Thu, 20 May 2021 00:15:26 +0000 Subject: [PATCH] FIR IDE: Enable RemoveValVarFromParameterFix for VAL_OR_VAR_ON_*_PARAMETER. --- .../generators/tests/idea/GenerateTests.kt | 1 + .../idea/quickfix/MainKtQuickFixRegistrar.kt | 8 +++- .../HighLevelQuickFixTestGenerated.java | 48 +++++++++++++++++++ .../quickfix/RemoveValVarFromParameterFix.kt | 28 +++++------ 4 files changed, 66 insertions(+), 19 deletions(-) rename idea/{ => idea-frontend-independent}/src/org/jetbrains/kotlin/idea/quickfix/RemoveValVarFromParameterFix.kt (50%) diff --git a/generators/idea-generator/tests/org/jetbrains/kotlin/generators/tests/idea/GenerateTests.kt b/generators/idea-generator/tests/org/jetbrains/kotlin/generators/tests/idea/GenerateTests.kt index 4bde0eb70c3..efbf2254577 100644 --- a/generators/idea-generator/tests/org/jetbrains/kotlin/generators/tests/idea/GenerateTests.kt +++ b/generators/idea-generator/tests/org/jetbrains/kotlin/generators/tests/idea/GenerateTests.kt @@ -1146,6 +1146,7 @@ fun main(args: Array) { model("quickfix/replaceWithDotCall", pattern = pattern, filenameStartsLowerCase = true) model("quickfix/replaceWithSafeCall", pattern = pattern, filenameStartsLowerCase = true) model("quickfix/variables/changeMutability", pattern = pattern, filenameStartsLowerCase = true) + model("quickfix/variables/removeValVarFromParameter", pattern = pattern, filenameStartsLowerCase = true) model("quickfix/when", pattern = pattern, filenameStartsLowerCase = true) model("quickfix/wrapWithSafeLetCall", pattern = pattern, filenameStartsLowerCase = true) model("quickfix/typeMismatch/componentFunctionReturnTypeMismatch", pattern = pattern, filenameStartsLowerCase = true) diff --git a/idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/MainKtQuickFixRegistrar.kt b/idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/MainKtQuickFixRegistrar.kt index 41ba8862e03..c1982935ade 100644 --- a/idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/MainKtQuickFixRegistrar.kt +++ b/idea/idea-fir/src/org/jetbrains/kotlin/idea/quickfix/MainKtQuickFixRegistrar.kt @@ -14,7 +14,7 @@ import org.jetbrains.kotlin.idea.quickfix.fixes.* import org.jetbrains.kotlin.idea.quickfix.fixes.InitializePropertyQuickFixFactory class MainKtQuickFixRegistrar : KtQuickFixRegistrar() { - private val modifiers = KtQuickFixesListBuilder.registerPsiQuickFix { + private val keywords = KtQuickFixesListBuilder.registerPsiQuickFix { registerPsiQuickFixes(KtFirDiagnostic.RedundantModifier::class, RemoveModifierFix.removeRedundantModifier) registerPsiQuickFixes(KtFirDiagnostic.IncompatibleModifiers::class, RemoveModifierFix.removeNonRedundantModifier) registerPsiQuickFixes(KtFirDiagnostic.RepeatedModifier::class, RemoveModifierFix.removeNonRedundantModifier) @@ -63,6 +63,10 @@ class MainKtQuickFixRegistrar : KtQuickFixRegistrar() { KtFirDiagnostic.AbstractClassMemberNotImplemented::class, AddModifierFix.addAbstractModifier ) + registerPsiQuickFixes(KtFirDiagnostic.ValOrVarOnLoopParameter::class, RemoveValVarFromParameterFix) + registerPsiQuickFixes(KtFirDiagnostic.ValOrVarOnFunParameter::class, RemoveValVarFromParameterFix) + registerPsiQuickFixes(KtFirDiagnostic.ValOrVarOnCatchParameter::class, RemoveValVarFromParameterFix) + registerPsiQuickFixes(KtFirDiagnostic.ValOrVarOnSecondaryConstructorParameter::class, RemoveValVarFromParameterFix) } private val propertyInitialization = KtQuickFixesListBuilder.registerPsiQuickFix { @@ -124,7 +128,7 @@ class MainKtQuickFixRegistrar : KtQuickFixRegistrar() { } override val list: KtQuickFixesList = KtQuickFixesList.createCombined( - modifiers, + keywords, propertyInitialization, overrides, imports, diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/quickfix/HighLevelQuickFixTestGenerated.java b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/quickfix/HighLevelQuickFixTestGenerated.java index e86fb5bddfb..de5fb84d974 100644 --- a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/quickfix/HighLevelQuickFixTestGenerated.java +++ b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/quickfix/HighLevelQuickFixTestGenerated.java @@ -1493,6 +1493,54 @@ public class HighLevelQuickFixTestGenerated extends AbstractHighLevelQuickFixTes } } + @TestMetadata("idea/testData/quickfix/variables/removeValVarFromParameter") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class RemoveValVarFromParameter extends AbstractHighLevelQuickFixTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); + } + + public void testAllFilesPresentInRemoveValVarFromParameter() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/testData/quickfix/variables/removeValVarFromParameter"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), null, true); + } + + @TestMetadata("catchParameter.kt") + public void testCatchParameter() throws Exception { + runTest("idea/testData/quickfix/variables/removeValVarFromParameter/catchParameter.kt"); + } + + @TestMetadata("constructorParameter.kt") + public void testConstructorParameter() throws Exception { + runTest("idea/testData/quickfix/variables/removeValVarFromParameter/constructorParameter.kt"); + } + + @TestMetadata("funParameter.kt") + public void testFunParameter() throws Exception { + runTest("idea/testData/quickfix/variables/removeValVarFromParameter/funParameter.kt"); + } + + @TestMetadata("loopMultiParameter.kt") + public void testLoopMultiParameter() throws Exception { + runTest("idea/testData/quickfix/variables/removeValVarFromParameter/loopMultiParameter.kt"); + } + + @TestMetadata("loopParameter.kt") + public void testLoopParameter() throws Exception { + runTest("idea/testData/quickfix/variables/removeValVarFromParameter/loopParameter.kt"); + } + + @TestMetadata("parameterWithComment.kt") + public void testParameterWithComment() throws Exception { + runTest("idea/testData/quickfix/variables/removeValVarFromParameter/parameterWithComment.kt"); + } + + @TestMetadata("secondaryConstructorParameter.kt") + public void testSecondaryConstructorParameter() throws Exception { + runTest("idea/testData/quickfix/variables/removeValVarFromParameter/secondaryConstructorParameter.kt"); + } + } + @TestMetadata("idea/testData/quickfix/when") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveValVarFromParameterFix.kt b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/RemoveValVarFromParameterFix.kt similarity index 50% rename from idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveValVarFromParameterFix.kt rename to idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/RemoveValVarFromParameterFix.kt index 7bd532fd8ad..9d92eca1234 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveValVarFromParameterFix.kt +++ b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/RemoveValVarFromParameterFix.kt @@ -1,32 +1,24 @@ /* - * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.idea.quickfix +import com.intellij.codeInsight.intention.IntentionAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project -import org.jetbrains.kotlin.diagnostics.Diagnostic +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtValVarKeywordOwner -import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext - -class RemoveValVarFromParameterFix(element: KtValVarKeywordOwner) : KotlinQuickFixAction(element) { - private val varOrVal: String - - init { - val valOrVarNode = - element.valOrVarKeyword ?: throw AssertionError("Val or var node not found for " + element.getElementTextWithContext()) - varOrVal = valOrVarNode.text - } +import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType +class RemoveValVarFromParameterFix(element: KtValVarKeywordOwner) : KotlinPsiOnlyQuickFixAction(element) { override fun getFamilyName() = KotlinBundle.message("remove.val.var.from.parameter") override fun getText(): String { - val element = element ?: return "" - val varOrVal = element.valOrVarKeyword?.text ?: return familyName + val varOrVal = element?.valOrVarKeyword?.text ?: return familyName return KotlinBundle.message("remove.0.from.parameter", varOrVal) } @@ -34,8 +26,10 @@ class RemoveValVarFromParameterFix(element: KtValVarKeywordOwner) : KotlinQuickF element?.valOrVarKeyword?.delete() } - companion object : KotlinSingleIntentionActionFactory() { - override fun createAction(diagnostic: Diagnostic) = - RemoveValVarFromParameterFix(diagnostic.psiElement.parent as KtValVarKeywordOwner) + companion object : QuickFixesPsiBasedFactory(PsiElement::class, PsiElementSuitabilityCheckers.ALWAYS_SUITABLE) { + override fun doCreateQuickFix(psiElement: PsiElement): List { + val owner = psiElement.getNonStrictParentOfType() ?: return emptyList() + return listOf(RemoveValVarFromParameterFix(owner)) + } } }