From aec498a4ea8725802a3f8468e53b82b29e7e8702 Mon Sep 17 00:00:00 2001 From: Tianyu Geng Date: Mon, 22 Feb 2021 12:34:06 -0800 Subject: [PATCH] Add quickfixes for NON_FINAL_MEMBER_IN_FINAL_CLASS --- .../idea/quickfix/MainKtQuickFixRegistrar.kt | 6 +++++ .../kotlin/idea/quickfix/AddModifierFix.kt | 2 ++ .../kotlin/idea/quickfix/RemoveModifierFix.kt | 1 + .../kotlin/idea/quickfix/QuickFixRegistrar.kt | 26 ++++++++----------- .../modifiers/openMemberInFinalClass1.kt | 1 + .../openMemberInFinalClass1.kt.after | 1 + .../modifiers/openMemberInFinalClass2.kt | 1 + .../openMemberInFinalClass2.kt.after | 1 + .../modifiers/openMemberInFinalClass3.kt | 1 + .../openMemberInFinalClass3.kt.after | 1 + .../modifiers/openMemberInFinalClass4.kt | 1 + .../openMemberInFinalClass4.kt.after | 1 + 12 files changed, 28 insertions(+), 15 deletions(-) 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 25a8798c425..06dbb12d386 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 @@ -30,6 +30,12 @@ class MainKtQuickFixRegistrar : KtQuickFixRegistrar() { AddModifierFix.addAbstractToContainingClass, RemoveModifierFix.removeAbstractModifier ) + + registerPsiQuickFixes( + KtFirDiagnostic.NonFinalMemberInFinalClass::class, + AddModifierFix.addOpenToContainingClass, + RemoveModifierFix.removeOpenModifier + ) } private val overrides = KtQuickFixesListBuilder.registerPsiQuickFix { diff --git a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt index 02b13b0bd6d..cc315ee518b 100644 --- a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt +++ b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt @@ -109,6 +109,8 @@ open class AddModifierFix( val addAbstractModifier: QuickFixesPsiBasedFactory = AddModifierFix.createFactory(KtTokens.ABSTRACT_KEYWORD) val addAbstractToContainingClass: QuickFixesPsiBasedFactory = AddModifierFix.createFactory(KtTokens.ABSTRACT_KEYWORD, KtClassOrObject::class.java) + val addOpenToContainingClass: QuickFixesPsiBasedFactory = + AddModifierFix.createFactory(KtTokens.OPEN_KEYWORD, KtClassOrObject::class.java) private val modalityModifiers: Set = setOf(KtTokens.ABSTRACT_KEYWORD, KtTokens.OPEN_KEYWORD, KtTokens.FINAL_KEYWORD) diff --git a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/RemoveModifierFix.kt b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/RemoveModifierFix.kt index 0b30f6f8c32..e0f7090d3ae 100644 --- a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/RemoveModifierFix.kt +++ b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/RemoveModifierFix.kt @@ -60,6 +60,7 @@ class RemoveModifierFix( modifier = KtTokens.OPEN_KEYWORD, isRedundant = true ) + val removeOpenModifier = createRemoveModifierFromListOwnerPsiBasedFactory(KtTokens.OPEN_KEYWORD) @Deprecated( "For binary compatibility", diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt index 07c4e400838..8bb02fce77f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt @@ -26,7 +26,6 @@ import org.jetbrains.kotlin.idea.inspections.InfixCallFixActionFactory import org.jetbrains.kotlin.idea.inspections.PlatformUnresolvedProvider import org.jetbrains.kotlin.idea.inspections.RemoveAnnotationFix import org.jetbrains.kotlin.idea.intentions.* -import org.jetbrains.kotlin.idea.quickfix.RemoveModifierFix.Companion.createRemoveModifierFromListOwnerPsiBasedFactory import org.jetbrains.kotlin.idea.quickfix.createFromUsage.createCallable.* import org.jetbrains.kotlin.idea.quickfix.createFromUsage.createClass.CreateClassFromCallWithConstructorCalleeActionFactory import org.jetbrains.kotlin.idea.quickfix.createFromUsage.createClass.CreateClassFromConstructorCallActionFactory @@ -65,14 +64,13 @@ class QuickFixRegistrar : QuickFixContributor { quickFixes.register(this, *action) } - val removeAbstractModifierFactory = createRemoveModifierFromListOwnerPsiBasedFactory(ABSTRACT_KEYWORD ) val addAbstractModifierFactory = AddModifierFixMpp.createFactory(ABSTRACT_KEYWORD) - ABSTRACT_PROPERTY_IN_PRIMARY_CONSTRUCTOR_PARAMETERS.registerFactory(removeAbstractModifierFactory) + ABSTRACT_PROPERTY_IN_PRIMARY_CONSTRUCTOR_PARAMETERS.registerFactory(RemoveModifierFix.removeAbstractModifier) - ABSTRACT_PROPERTY_WITH_INITIALIZER.registerFactory(removeAbstractModifierFactory, RemovePartsFromPropertyFix) - ABSTRACT_PROPERTY_WITH_GETTER.registerFactory(removeAbstractModifierFactory, RemovePartsFromPropertyFix) - ABSTRACT_PROPERTY_WITH_SETTER.registerFactory(removeAbstractModifierFactory, RemovePartsFromPropertyFix) + ABSTRACT_PROPERTY_WITH_INITIALIZER.registerFactory(RemoveModifierFix.removeAbstractModifier, RemovePartsFromPropertyFix) + ABSTRACT_PROPERTY_WITH_GETTER.registerFactory(RemoveModifierFix.removeAbstractModifier, RemovePartsFromPropertyFix) + ABSTRACT_PROPERTY_WITH_SETTER.registerFactory(RemoveModifierFix.removeAbstractModifier, RemovePartsFromPropertyFix) PROPERTY_INITIALIZER_IN_INTERFACE.registerFactory(RemovePartsFromPropertyFix, ConvertPropertyInitializerToGetterIntention) @@ -84,11 +82,11 @@ class QuickFixRegistrar : QuickFixContributor { MUST_BE_INITIALIZED.registerFactory(InitializePropertyQuickFixFactory) val addAbstractToClassFactory = AddModifierFixMpp.createFactory(ABSTRACT_KEYWORD, KtClassOrObject::class.java) - ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS.registerFactory(removeAbstractModifierFactory, addAbstractToClassFactory) + ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS.registerFactory(RemoveModifierFix.removeAbstractModifier, addAbstractToClassFactory) - ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS.registerFactory(removeAbstractModifierFactory, addAbstractToClassFactory) + ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS.registerFactory(RemoveModifierFix.removeAbstractModifier, addAbstractToClassFactory) - ABSTRACT_FUNCTION_WITH_BODY.registerFactory(removeAbstractModifierFactory, RemoveFunctionBodyFix) + ABSTRACT_FUNCTION_WITH_BODY.registerFactory(RemoveModifierFix.removeAbstractModifier, RemoveFunctionBodyFix) NON_ABSTRACT_FUNCTION_WITH_NO_BODY.registerFactory(addAbstractModifierFactory, AddFunctionBodyFix) @@ -116,8 +114,7 @@ class QuickFixRegistrar : QuickFixContributor { USELESS_ELVIS.registerFactory(RemoveUselessElvisFix) USELESS_ELVIS_RIGHT_IS_NULL.registerFactory(RemoveUselessElvisFix) - val removeRedundantModifierFactory = RemoveModifierFix.removeRedundantModifier - REDUNDANT_MODIFIER.registerFactory(removeRedundantModifierFactory) + REDUNDANT_MODIFIER.registerFactory(RemoveModifierFix.removeRedundantModifier) REDUNDANT_OPEN_IN_INTERFACE.registerFactory(RemoveModifierFix.createRemoveModifierFromListOwnerPsiBasedFactory(OPEN_KEYWORD, true)) REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE.registerFactory(RemoveModifierFix.createRemoveSuspendFactory()) UNNECESSARY_LATEINIT.registerFactory(RemoveModifierFix.createRemoveModifierFromListOwnerPsiBasedFactory(LATEINIT_KEYWORD)) @@ -126,12 +123,11 @@ class QuickFixRegistrar : QuickFixContributor { INCOMPATIBLE_MODIFIERS.registerFactory(RemoveModifierFix.removeNonRedundantModifier) VARIANCE_ON_TYPE_PARAMETER_NOT_ALLOWED.registerFactory(RemoveModifierFix.createRemoveVarianceFactory()) - val removeOpenModifierFactory = RemoveModifierFix.createRemoveModifierFromListOwnerPsiBasedFactory(OPEN_KEYWORD) NON_FINAL_MEMBER_IN_FINAL_CLASS.registerFactory( AddModifierFixMpp.createFactory(OPEN_KEYWORD, KtClass::class.java), - removeOpenModifierFactory + RemoveModifierFix.removeOpenModifier ) - NON_FINAL_MEMBER_IN_OBJECT.registerFactory(removeOpenModifierFactory) + NON_FINAL_MEMBER_IN_OBJECT.registerFactory(RemoveModifierFix.removeOpenModifier) GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY.registerFactory(RemoveModifierFix.removeNonRedundantModifier) SETTER_VISIBILITY_INCONSISTENT_WITH_PROPERTY_VISIBILITY.registerFactory(RemoveModifierFix.removeNonRedundantModifier) @@ -140,7 +136,7 @@ class QuickFixRegistrar : QuickFixContributor { AddModifierFixMpp.createFactory(FINAL_KEYWORD, KtProperty::class.java), RemoveModifierFix.removeNonRedundantModifier ) - REDUNDANT_MODIFIER_IN_GETTER.registerFactory(removeRedundantModifierFactory) + REDUNDANT_MODIFIER_IN_GETTER.registerFactory(RemoveModifierFix.removeRedundantModifier) WRONG_MODIFIER_TARGET.registerFactory(RemoveModifierFix.removeNonRedundantModifier, ConstValFactory) DEPRECATED_MODIFIER.registerFactory(ReplaceModifierFix) REDUNDANT_MODIFIER_FOR_TARGET.registerFactory(RemoveModifierFix.removeNonRedundantModifier) diff --git a/idea/testData/quickfix/modifiers/openMemberInFinalClass1.kt b/idea/testData/quickfix/modifiers/openMemberInFinalClass1.kt index 37f71f77f50..15eae0fc04f 100644 --- a/idea/testData/quickfix/modifiers/openMemberInFinalClass1.kt +++ b/idea/testData/quickfix/modifiers/openMemberInFinalClass1.kt @@ -2,3 +2,4 @@ class A() { open fun foo() {} } +/* FIR_COMPARISON */ diff --git a/idea/testData/quickfix/modifiers/openMemberInFinalClass1.kt.after b/idea/testData/quickfix/modifiers/openMemberInFinalClass1.kt.after index c121722b204..49d1de567fd 100644 --- a/idea/testData/quickfix/modifiers/openMemberInFinalClass1.kt.after +++ b/idea/testData/quickfix/modifiers/openMemberInFinalClass1.kt.after @@ -2,3 +2,4 @@ open class A() { open fun foo() {} } +/* FIR_COMPARISON */ diff --git a/idea/testData/quickfix/modifiers/openMemberInFinalClass2.kt b/idea/testData/quickfix/modifiers/openMemberInFinalClass2.kt index f46a98892ae..d1511b18ebf 100644 --- a/idea/testData/quickfix/modifiers/openMemberInFinalClass2.kt +++ b/idea/testData/quickfix/modifiers/openMemberInFinalClass2.kt @@ -2,3 +2,4 @@ class A() { open fun foo() {} } +/* FIR_COMPARISON */ diff --git a/idea/testData/quickfix/modifiers/openMemberInFinalClass2.kt.after b/idea/testData/quickfix/modifiers/openMemberInFinalClass2.kt.after index 1d4c97459f7..f4ab72f49e1 100644 --- a/idea/testData/quickfix/modifiers/openMemberInFinalClass2.kt.after +++ b/idea/testData/quickfix/modifiers/openMemberInFinalClass2.kt.after @@ -2,3 +2,4 @@ class A() { fun foo() {} } +/* FIR_COMPARISON */ diff --git a/idea/testData/quickfix/modifiers/openMemberInFinalClass3.kt b/idea/testData/quickfix/modifiers/openMemberInFinalClass3.kt index bb75558fb6a..ac4d6a46f79 100644 --- a/idea/testData/quickfix/modifiers/openMemberInFinalClass3.kt +++ b/idea/testData/quickfix/modifiers/openMemberInFinalClass3.kt @@ -2,3 +2,4 @@ public class A() { open fun foo() {} } +/* FIR_COMPARISON */ diff --git a/idea/testData/quickfix/modifiers/openMemberInFinalClass3.kt.after b/idea/testData/quickfix/modifiers/openMemberInFinalClass3.kt.after index 6e8dbadb2f3..6d9b4169765 100644 --- a/idea/testData/quickfix/modifiers/openMemberInFinalClass3.kt.after +++ b/idea/testData/quickfix/modifiers/openMemberInFinalClass3.kt.after @@ -2,3 +2,4 @@ public open class A() { open fun foo() {} } +/* FIR_COMPARISON */ diff --git a/idea/testData/quickfix/modifiers/openMemberInFinalClass4.kt b/idea/testData/quickfix/modifiers/openMemberInFinalClass4.kt index 93c0dcb75be..0f809fea999 100644 --- a/idea/testData/quickfix/modifiers/openMemberInFinalClass4.kt +++ b/idea/testData/quickfix/modifiers/openMemberInFinalClass4.kt @@ -2,3 +2,4 @@ @Deprecated("") class A() { open fun foo() {} } +/* FIR_COMPARISON */ diff --git a/idea/testData/quickfix/modifiers/openMemberInFinalClass4.kt.after b/idea/testData/quickfix/modifiers/openMemberInFinalClass4.kt.after index b35f4dc66ba..283a5bdf267 100644 --- a/idea/testData/quickfix/modifiers/openMemberInFinalClass4.kt.after +++ b/idea/testData/quickfix/modifiers/openMemberInFinalClass4.kt.after @@ -3,3 +3,4 @@ open class A() { open fun foo() {} } +/* FIR_COMPARISON */