FIR IDE: add remove modifier quick fixes

This commit is contained in:
Ilya Kirillov
2021-02-02 21:53:20 +01:00
parent c87e6c6a87
commit 5d32cb0daf
2 changed files with 45 additions and 7 deletions
@@ -0,0 +1,34 @@
/*
* 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.psi.PsiElement
import org.jetbrains.kotlin.idea.frontend.api.fir.diagnostics.KtFirDiagnostic
import org.jetbrains.kotlin.idea.quickfix.fixes.ChangeTypeQuickFix
import org.jetbrains.kotlin.lexer.KtToken
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.KtCallableDeclaration
import org.jetbrains.kotlin.psi.KtModifierListOwner
class MainKtQuickFixRegistrar : KtQuickFixRegistrar() {
private val modifiers = KtQuickFixesListBuilder.register {
register<PsiElement, KtFirDiagnostic.RedundantModifier>(RemoveModifierFix.createRemoveModifierFactory(isRedundant = true))
register<PsiElement, KtFirDiagnostic.IncompatibleModifiers>(RemoveModifierFix.createRemoveModifierFactory(isRedundant = false))
register<PsiElement, KtFirDiagnostic.RepeatedModifier>(RemoveModifierFix.createRemoveModifierFactory(isRedundant = false))
register<PsiElement, KtFirDiagnostic.DeprecatedModifierPair>(RemoveModifierFix.createRemoveModifierFactory(isRedundant = true))
register<PsiElement, KtFirDiagnostic.TypeParametersInEnum>(RemoveModifierFix.createRemoveModifierFactory(isRedundant = true))
register<KtModifierListOwner, KtFirDiagnostic.RedundantOpenInInterface>(
RemoveModifierFix.createRemoveModifierFromListOwnerFactoryByModifierListOwner(
modifier = KtTokens.OPEN_KEYWORD,
isRedundant = true
)
)
}
override val list: KtQuickFixesList = KtQuickFixesList.createCombined(
modifiers,
)
}
@@ -53,13 +53,17 @@ class RemoveModifierFix(
fun createRemoveModifierFromListOwnerFactory(
modifier: KtModifierKeywordToken,
isRedundant: Boolean = false
): QuickFixesPsiBasedFactory {
return object : QuickFixesPsiBasedFactory() {
override fun createQuickFix(psiElement: PsiElement): RemoveModifierFix? {
val modifierListOwner = PsiTreeUtil.getParentOfType(psiElement, KtModifierListOwner::class.java, false) ?: return null
return RemoveModifierFix(modifierListOwner, modifier, isRedundant)
}
}
): QuickFixesPsiBasedFactory<PsiElement> =
createRemoveModifierFromListOwnerFactoryByModifierListOwner(
modifier,
isRedundant
).coMap { PsiTreeUtil.getParentOfType(it, KtModifierListOwner::class.java, false) }
fun createRemoveModifierFromListOwnerFactoryByModifierListOwner(
modifier: KtModifierKeywordToken,
isRedundant: Boolean = false
) = quickFixesPsiBasedFactory<KtModifierListOwner> {
listOf(RemoveModifierFix(it, modifier, isRedundant))
}
fun createRemoveModifierFactory(isRedundant: Boolean = false): QuickFixesPsiBasedFactory<PsiElement> {