Add quickfixes for NON_FINAL_MEMBER_IN_FINAL_CLASS

This commit is contained in:
Tianyu Geng
2021-02-22 12:34:06 -08:00
committed by Ilya Kirillov
parent e1b3cd32f3
commit aec498a4ea
12 changed files with 28 additions and 15 deletions
@@ -30,6 +30,12 @@ class MainKtQuickFixRegistrar : KtQuickFixRegistrar() {
AddModifierFix.addAbstractToContainingClass, AddModifierFix.addAbstractToContainingClass,
RemoveModifierFix.removeAbstractModifier RemoveModifierFix.removeAbstractModifier
) )
registerPsiQuickFixes(
KtFirDiagnostic.NonFinalMemberInFinalClass::class,
AddModifierFix.addOpenToContainingClass,
RemoveModifierFix.removeOpenModifier
)
} }
private val overrides = KtQuickFixesListBuilder.registerPsiQuickFix { private val overrides = KtQuickFixesListBuilder.registerPsiQuickFix {
@@ -109,6 +109,8 @@ open class AddModifierFix(
val addAbstractModifier: QuickFixesPsiBasedFactory<PsiElement> = AddModifierFix.createFactory(KtTokens.ABSTRACT_KEYWORD) val addAbstractModifier: QuickFixesPsiBasedFactory<PsiElement> = AddModifierFix.createFactory(KtTokens.ABSTRACT_KEYWORD)
val addAbstractToContainingClass: QuickFixesPsiBasedFactory<PsiElement> = val addAbstractToContainingClass: QuickFixesPsiBasedFactory<PsiElement> =
AddModifierFix.createFactory(KtTokens.ABSTRACT_KEYWORD, KtClassOrObject::class.java) AddModifierFix.createFactory(KtTokens.ABSTRACT_KEYWORD, KtClassOrObject::class.java)
val addOpenToContainingClass: QuickFixesPsiBasedFactory<PsiElement> =
AddModifierFix.createFactory(KtTokens.OPEN_KEYWORD, KtClassOrObject::class.java)
private val modalityModifiers: Set<KtModifierKeywordToken> = private val modalityModifiers: Set<KtModifierKeywordToken> =
setOf(KtTokens.ABSTRACT_KEYWORD, KtTokens.OPEN_KEYWORD, KtTokens.FINAL_KEYWORD) setOf(KtTokens.ABSTRACT_KEYWORD, KtTokens.OPEN_KEYWORD, KtTokens.FINAL_KEYWORD)
@@ -60,6 +60,7 @@ class RemoveModifierFix(
modifier = KtTokens.OPEN_KEYWORD, modifier = KtTokens.OPEN_KEYWORD,
isRedundant = true isRedundant = true
) )
val removeOpenModifier = createRemoveModifierFromListOwnerPsiBasedFactory(KtTokens.OPEN_KEYWORD)
@Deprecated( @Deprecated(
"For binary compatibility", "For binary compatibility",
@@ -26,7 +26,6 @@ import org.jetbrains.kotlin.idea.inspections.InfixCallFixActionFactory
import org.jetbrains.kotlin.idea.inspections.PlatformUnresolvedProvider import org.jetbrains.kotlin.idea.inspections.PlatformUnresolvedProvider
import org.jetbrains.kotlin.idea.inspections.RemoveAnnotationFix import org.jetbrains.kotlin.idea.inspections.RemoveAnnotationFix
import org.jetbrains.kotlin.idea.intentions.* 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.createCallable.*
import org.jetbrains.kotlin.idea.quickfix.createFromUsage.createClass.CreateClassFromCallWithConstructorCalleeActionFactory import org.jetbrains.kotlin.idea.quickfix.createFromUsage.createClass.CreateClassFromCallWithConstructorCalleeActionFactory
import org.jetbrains.kotlin.idea.quickfix.createFromUsage.createClass.CreateClassFromConstructorCallActionFactory import org.jetbrains.kotlin.idea.quickfix.createFromUsage.createClass.CreateClassFromConstructorCallActionFactory
@@ -65,14 +64,13 @@ class QuickFixRegistrar : QuickFixContributor {
quickFixes.register(this, *action) quickFixes.register(this, *action)
} }
val removeAbstractModifierFactory = createRemoveModifierFromListOwnerPsiBasedFactory(ABSTRACT_KEYWORD )
val addAbstractModifierFactory = AddModifierFixMpp.createFactory(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_INITIALIZER.registerFactory(RemoveModifierFix.removeAbstractModifier, RemovePartsFromPropertyFix)
ABSTRACT_PROPERTY_WITH_GETTER.registerFactory(removeAbstractModifierFactory, RemovePartsFromPropertyFix) ABSTRACT_PROPERTY_WITH_GETTER.registerFactory(RemoveModifierFix.removeAbstractModifier, RemovePartsFromPropertyFix)
ABSTRACT_PROPERTY_WITH_SETTER.registerFactory(removeAbstractModifierFactory, RemovePartsFromPropertyFix) ABSTRACT_PROPERTY_WITH_SETTER.registerFactory(RemoveModifierFix.removeAbstractModifier, RemovePartsFromPropertyFix)
PROPERTY_INITIALIZER_IN_INTERFACE.registerFactory(RemovePartsFromPropertyFix, ConvertPropertyInitializerToGetterIntention) PROPERTY_INITIALIZER_IN_INTERFACE.registerFactory(RemovePartsFromPropertyFix, ConvertPropertyInitializerToGetterIntention)
@@ -84,11 +82,11 @@ class QuickFixRegistrar : QuickFixContributor {
MUST_BE_INITIALIZED.registerFactory(InitializePropertyQuickFixFactory) MUST_BE_INITIALIZED.registerFactory(InitializePropertyQuickFixFactory)
val addAbstractToClassFactory = AddModifierFixMpp.createFactory(ABSTRACT_KEYWORD, KtClassOrObject::class.java) 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) NON_ABSTRACT_FUNCTION_WITH_NO_BODY.registerFactory(addAbstractModifierFactory, AddFunctionBodyFix)
@@ -116,8 +114,7 @@ class QuickFixRegistrar : QuickFixContributor {
USELESS_ELVIS.registerFactory(RemoveUselessElvisFix) USELESS_ELVIS.registerFactory(RemoveUselessElvisFix)
USELESS_ELVIS_RIGHT_IS_NULL.registerFactory(RemoveUselessElvisFix) USELESS_ELVIS_RIGHT_IS_NULL.registerFactory(RemoveUselessElvisFix)
val removeRedundantModifierFactory = RemoveModifierFix.removeRedundantModifier REDUNDANT_MODIFIER.registerFactory(RemoveModifierFix.removeRedundantModifier)
REDUNDANT_MODIFIER.registerFactory(removeRedundantModifierFactory)
REDUNDANT_OPEN_IN_INTERFACE.registerFactory(RemoveModifierFix.createRemoveModifierFromListOwnerPsiBasedFactory(OPEN_KEYWORD, true)) REDUNDANT_OPEN_IN_INTERFACE.registerFactory(RemoveModifierFix.createRemoveModifierFromListOwnerPsiBasedFactory(OPEN_KEYWORD, true))
REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE.registerFactory(RemoveModifierFix.createRemoveSuspendFactory()) REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE.registerFactory(RemoveModifierFix.createRemoveSuspendFactory())
UNNECESSARY_LATEINIT.registerFactory(RemoveModifierFix.createRemoveModifierFromListOwnerPsiBasedFactory(LATEINIT_KEYWORD)) UNNECESSARY_LATEINIT.registerFactory(RemoveModifierFix.createRemoveModifierFromListOwnerPsiBasedFactory(LATEINIT_KEYWORD))
@@ -126,12 +123,11 @@ class QuickFixRegistrar : QuickFixContributor {
INCOMPATIBLE_MODIFIERS.registerFactory(RemoveModifierFix.removeNonRedundantModifier) INCOMPATIBLE_MODIFIERS.registerFactory(RemoveModifierFix.removeNonRedundantModifier)
VARIANCE_ON_TYPE_PARAMETER_NOT_ALLOWED.registerFactory(RemoveModifierFix.createRemoveVarianceFactory()) VARIANCE_ON_TYPE_PARAMETER_NOT_ALLOWED.registerFactory(RemoveModifierFix.createRemoveVarianceFactory())
val removeOpenModifierFactory = RemoveModifierFix.createRemoveModifierFromListOwnerPsiBasedFactory(OPEN_KEYWORD)
NON_FINAL_MEMBER_IN_FINAL_CLASS.registerFactory( NON_FINAL_MEMBER_IN_FINAL_CLASS.registerFactory(
AddModifierFixMpp.createFactory(OPEN_KEYWORD, KtClass::class.java), 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) GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY.registerFactory(RemoveModifierFix.removeNonRedundantModifier)
SETTER_VISIBILITY_INCONSISTENT_WITH_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), AddModifierFixMpp.createFactory(FINAL_KEYWORD, KtProperty::class.java),
RemoveModifierFix.removeNonRedundantModifier RemoveModifierFix.removeNonRedundantModifier
) )
REDUNDANT_MODIFIER_IN_GETTER.registerFactory(removeRedundantModifierFactory) REDUNDANT_MODIFIER_IN_GETTER.registerFactory(RemoveModifierFix.removeRedundantModifier)
WRONG_MODIFIER_TARGET.registerFactory(RemoveModifierFix.removeNonRedundantModifier, ConstValFactory) WRONG_MODIFIER_TARGET.registerFactory(RemoveModifierFix.removeNonRedundantModifier, ConstValFactory)
DEPRECATED_MODIFIER.registerFactory(ReplaceModifierFix) DEPRECATED_MODIFIER.registerFactory(ReplaceModifierFix)
REDUNDANT_MODIFIER_FOR_TARGET.registerFactory(RemoveModifierFix.removeNonRedundantModifier) REDUNDANT_MODIFIER_FOR_TARGET.registerFactory(RemoveModifierFix.removeNonRedundantModifier)
@@ -2,3 +2,4 @@
class A() { class A() {
<caret>open fun foo() {} <caret>open fun foo() {}
} }
/* FIR_COMPARISON */
@@ -2,3 +2,4 @@
open class A() { open class A() {
<caret>open fun foo() {} <caret>open fun foo() {}
} }
/* FIR_COMPARISON */
@@ -2,3 +2,4 @@
class A() { class A() {
<caret>open fun foo() {} <caret>open fun foo() {}
} }
/* FIR_COMPARISON */
@@ -2,3 +2,4 @@
class A() { class A() {
<caret>fun foo() {} <caret>fun foo() {}
} }
/* FIR_COMPARISON */
@@ -2,3 +2,4 @@
public class A() { public class A() {
<caret>open fun foo() {} <caret>open fun foo() {}
} }
/* FIR_COMPARISON */
@@ -2,3 +2,4 @@
public open class A() { public open class A() {
<caret>open fun foo() {} <caret>open fun foo() {}
} }
/* FIR_COMPARISON */
@@ -2,3 +2,4 @@
@Deprecated("") class A() { @Deprecated("") class A() {
<caret>open fun foo() {} <caret>open fun foo() {}
} }
/* FIR_COMPARISON */
@@ -3,3 +3,4 @@
open class A() { open class A() {
open fun foo() {} open fun foo() {}
} }
/* FIR_COMPARISON */