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,
RemoveModifierFix.removeAbstractModifier
)
registerPsiQuickFixes(
KtFirDiagnostic.NonFinalMemberInFinalClass::class,
AddModifierFix.addOpenToContainingClass,
RemoveModifierFix.removeOpenModifier
)
}
private val overrides = KtQuickFixesListBuilder.registerPsiQuickFix {
@@ -109,6 +109,8 @@ open class AddModifierFix(
val addAbstractModifier: QuickFixesPsiBasedFactory<PsiElement> = AddModifierFix.createFactory(KtTokens.ABSTRACT_KEYWORD)
val addAbstractToContainingClass: QuickFixesPsiBasedFactory<PsiElement> =
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> =
setOf(KtTokens.ABSTRACT_KEYWORD, KtTokens.OPEN_KEYWORD, KtTokens.FINAL_KEYWORD)
@@ -60,6 +60,7 @@ class RemoveModifierFix(
modifier = KtTokens.OPEN_KEYWORD,
isRedundant = true
)
val removeOpenModifier = createRemoveModifierFromListOwnerPsiBasedFactory(KtTokens.OPEN_KEYWORD)
@Deprecated(
"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.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)
@@ -2,3 +2,4 @@
class A() {
<caret>open fun foo() {}
}
/* FIR_COMPARISON */
@@ -2,3 +2,4 @@
open class A() {
<caret>open fun foo() {}
}
/* FIR_COMPARISON */
@@ -2,3 +2,4 @@
class A() {
<caret>open fun foo() {}
}
/* FIR_COMPARISON */
@@ -2,3 +2,4 @@
class A() {
<caret>fun foo() {}
}
/* FIR_COMPARISON */
@@ -2,3 +2,4 @@
public class A() {
<caret>open fun foo() {}
}
/* FIR_COMPARISON */
@@ -2,3 +2,4 @@
public open class A() {
<caret>open fun foo() {}
}
/* FIR_COMPARISON */
@@ -2,3 +2,4 @@
@Deprecated("") class A() {
<caret>open fun foo() {}
}
/* FIR_COMPARISON */
@@ -3,3 +3,4 @@
open class A() {
open fun foo() {}
}
/* FIR_COMPARISON */