From 657017b635f3e7264a1855905dfefc7fc77ea1d2 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Tue, 3 Oct 2023 16:04:49 +0200 Subject: [PATCH] [kotlin] add "Change to 'var'" quickfix for VAL_REASSIGNMENT error ^KTIJ-27251 fixed GitOrigin-RevId: 027acb61ebff368bfed60af447cd855219220d29 --- .../base/quickFix/ChangeVariableMutabilityFix.kt | 14 ++++++++++++++ .../idea/quickfix/KotlinK2QuickFixRegistrar.kt | 1 + .../capturedMemberValInitialization.kt | 5 +++-- .../capturedMemberValInitialization.kt.after | 5 +++-- .../quickfix/variables/changeMutability/const.kt | 5 +++-- .../variables/changeMutability/const.kt.after | 5 +++-- .../variables/changeMutability/localInGetter.kt | 5 +++-- .../changeMutability/localInGetter.kt.after | 5 +++-- .../changeMutability/valReassignmentLocal.kt | 5 +++-- .../changeMutability/valReassignmentLocal.kt.after | 5 +++-- .../changeMutability/valReassignmentOuterDecl.kt | 5 +++-- .../valReassignmentOuterDecl.kt.after | 5 +++-- .../changeMutability/valReassignmentProperty.kt | 5 +++-- .../valReassignmentProperty.kt.after | 5 +++-- .../valReassignmentPropertyConstructorParameter.kt | 5 +++-- ...assignmentPropertyConstructorParameter.kt.after | 5 +++-- 16 files changed, 57 insertions(+), 28 deletions(-) diff --git a/plugins/kotlin/code-insight/impl-base/src/org/jetbrains/kotlin/idea/codeinsights/impl/base/quickFix/ChangeVariableMutabilityFix.kt b/plugins/kotlin/code-insight/impl-base/src/org/jetbrains/kotlin/idea/codeinsights/impl/base/quickFix/ChangeVariableMutabilityFix.kt index 850de0df5a39..490a88afce9a 100644 --- a/plugins/kotlin/code-insight/impl-base/src/org/jetbrains/kotlin/idea/codeinsights/impl/base/quickFix/ChangeVariableMutabilityFix.kt +++ b/plugins/kotlin/code-insight/impl-base/src/org/jetbrains/kotlin/idea/codeinsights/impl/base/quickFix/ChangeVariableMutabilityFix.kt @@ -4,7 +4,13 @@ package org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.analysis.api.fir.diagnostics.KtFirDiagnostic import org.jetbrains.kotlin.idea.base.resources.KotlinBundle +import org.jetbrains.kotlin.idea.codeinsight.api.applicators.fixes.KotlinDiagnosticFixFactory +import org.jetbrains.kotlin.idea.codeinsight.api.applicators.fixes.KotlinDiagnosticModCommandFixFactory +import org.jetbrains.kotlin.idea.codeinsight.api.applicators.fixes.diagnosticFixFactories +import org.jetbrains.kotlin.idea.codeinsight.api.applicators.fixes.diagnosticFixFactory +import org.jetbrains.kotlin.idea.codeinsight.api.applicators.fixes.diagnosticModCommandFixFactory import org.jetbrains.kotlin.idea.codeinsight.api.classic.quickfixes.KotlinPsiOnlyQuickFixAction import org.jetbrains.kotlin.idea.codeinsight.api.classic.quickfixes.QuickFixesPsiBasedFactory import org.jetbrains.kotlin.idea.codeinsight.api.classic.quickfixes.quickFixesPsiBasedFactory @@ -52,6 +58,14 @@ class ChangeVariableMutabilityFix( listOf(ChangeVariableMutabilityFix(psiElement.property, true)) } + val VAL_REASSIGNMENT: KotlinDiagnosticFixFactory = diagnosticFixFactory(KtFirDiagnostic.ValReassignment::class) { diagnostic -> + val property = diagnostic.variable.psi as? KtValVarKeywordOwner ?: return@diagnosticFixFactory emptyList() + listOf( + ChangeVariableMutabilityFix(property, makeVar = true) + ) + } + + val VAR_OVERRIDDEN_BY_VAL_FACTORY: QuickFixesPsiBasedFactory = quickFixesPsiBasedFactory { psiElement: PsiElement -> when (psiElement) { diff --git a/plugins/kotlin/fir/src/org/jetbrains/kotlin/idea/quickfix/KotlinK2QuickFixRegistrar.kt b/plugins/kotlin/fir/src/org/jetbrains/kotlin/idea/quickfix/KotlinK2QuickFixRegistrar.kt index 0c883127a9bf..de8a8ffd0705 100644 --- a/plugins/kotlin/fir/src/org/jetbrains/kotlin/idea/quickfix/KotlinK2QuickFixRegistrar.kt +++ b/plugins/kotlin/fir/src/org/jetbrains/kotlin/idea/quickfix/KotlinK2QuickFixRegistrar.kt @@ -131,6 +131,7 @@ class KotlinK2QuickFixRegistrar : KotlinQuickFixRegistrar() { registerPsiQuickFixes(KtFirDiagnostic.VarAnnotationParameter::class, ChangeVariableMutabilityFix.VAR_ANNOTATION_PARAMETER_FACTORY) registerPsiQuickFixes(KtFirDiagnostic.InapplicableLateinitModifier::class, ChangeVariableMutabilityFix.LATEINIT_VAL_FACTORY) registerPsiQuickFixes(KtFirDiagnostic.ValWithSetter::class, ChangeVariableMutabilityFix.VAL_WITH_SETTER_FACTORY) + registerApplicator(ChangeVariableMutabilityFix.VAL_REASSIGNMENT) registerPsiQuickFixes(KtFirDiagnostic.MustBeInitialized::class, ChangeVariableMutabilityFix.MUST_BE_INITIALIZED_FACTORY) registerPsiQuickFixes(KtFirDiagnostic.MustBeInitializedWarning::class, ChangeVariableMutabilityFix.MUST_BE_INITIALIZED_FACTORY) registerPsiQuickFixes(KtFirDiagnostic.MustBeInitializedOrBeFinal::class, ChangeVariableMutabilityFix.MUST_BE_INITIALIZED_FACTORY) diff --git a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/capturedMemberValInitialization.kt b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/capturedMemberValInitialization.kt index e886946c83ef..3b76c00b21e8 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/capturedMemberValInitialization.kt +++ b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/capturedMemberValInitialization.kt @@ -14,5 +14,6 @@ class Test { t.some() } } -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix + +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix diff --git a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/capturedMemberValInitialization.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/capturedMemberValInitialization.kt.after index 09b684e186ab..bdd0f6dbeec2 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/capturedMemberValInitialization.kt.after +++ b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/capturedMemberValInitialization.kt.after @@ -14,5 +14,6 @@ class Test { t.some() } } -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix + +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix diff --git a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/const.kt b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/const.kt index 0c82a5a11e87..12437849de21 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/const.kt +++ b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/const.kt @@ -6,5 +6,6 @@ object A { A = 10 } } -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix + +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix diff --git a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/const.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/const.kt.after index a6aafa2107f0..1a60301402c1 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/const.kt.after +++ b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/const.kt.after @@ -6,5 +6,6 @@ object A { A = 10 } } -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix + +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix diff --git a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/localInGetter.kt b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/localInGetter.kt index a1f8a75b2855..d2713c093400 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/localInGetter.kt +++ b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/localInGetter.kt @@ -6,5 +6,6 @@ val String.prop: Int p = 2 return p } -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix + +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix diff --git a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/localInGetter.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/localInGetter.kt.after index 3f46a8ea922b..8c04d7e1f2b7 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/localInGetter.kt.after +++ b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/localInGetter.kt.after @@ -6,5 +6,6 @@ val String.prop: Int p = 2 return p } -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix + +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix diff --git a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentLocal.kt b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentLocal.kt index 79a2c5ff6df7..b5424b018cf0 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentLocal.kt +++ b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentLocal.kt @@ -4,5 +4,6 @@ fun foo() { a = 3 } -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix + +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix diff --git a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentLocal.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentLocal.kt.after index 4482d33f4049..d7c1339c1338 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentLocal.kt.after +++ b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentLocal.kt.after @@ -4,5 +4,6 @@ fun foo() { a = 3 } -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix + +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix diff --git a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentOuterDecl.kt b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentOuterDecl.kt index d9eb06abbc77..6a5b91a4a2de 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentOuterDecl.kt +++ b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentOuterDecl.kt @@ -5,5 +5,6 @@ fun bar() { a = 5 } -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix + +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix diff --git a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentOuterDecl.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentOuterDecl.kt.after index 6618c424e0a4..ffdedbf515e1 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentOuterDecl.kt.after +++ b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentOuterDecl.kt.after @@ -5,5 +5,6 @@ fun bar() { a = 5 } -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix + +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix diff --git a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentProperty.kt b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentProperty.kt index 726f20b65ca6..2933058b27bb 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentProperty.kt +++ b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentProperty.kt @@ -7,5 +7,6 @@ class A() { } } -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix + +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix diff --git a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentProperty.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentProperty.kt.after index 5c01b420ddd0..0b77987d0e21 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentProperty.kt.after +++ b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentProperty.kt.after @@ -7,5 +7,6 @@ class A() { } } -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix + +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix diff --git a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentPropertyConstructorParameter.kt b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentPropertyConstructorParameter.kt index 1778fc50d3a4..4d3b12b350ee 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentPropertyConstructorParameter.kt +++ b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentPropertyConstructorParameter.kt @@ -5,5 +5,6 @@ class A(val a: Int) { } } -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix + +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix diff --git a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentPropertyConstructorParameter.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentPropertyConstructorParameter.kt.after index 7c68efbc19fc..a30af201d4f3 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentPropertyConstructorParameter.kt.after +++ b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeMutability/valReassignmentPropertyConstructorParameter.kt.after @@ -5,5 +5,6 @@ class A(var a: Int) { } } -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix + +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix