FIR IDE: Enable RemoveExclExclCallFix for UNNECESSARY_NON_NULL_ASSERTION.
This commit is contained in:
committed by
Ilya Kirillov
parent
34609b264d
commit
73b796f184
@@ -82,6 +82,7 @@ class MainKtQuickFixRegistrar : KtQuickFixRegistrar() {
|
|||||||
|
|
||||||
private val expressions = KtQuickFixesListBuilder.registerPsiQuickFix {
|
private val expressions = KtQuickFixesListBuilder.registerPsiQuickFix {
|
||||||
registerPsiQuickFixes(KtFirDiagnostic.UnnecessarySafeCall::class, ReplaceWithDotCallFix)
|
registerPsiQuickFixes(KtFirDiagnostic.UnnecessarySafeCall::class, ReplaceWithDotCallFix)
|
||||||
|
registerPsiQuickFixes(KtFirDiagnostic.UnnecessaryNotNullAssertion::class, RemoveExclExclCallFix)
|
||||||
registerApplicator(ReplaceCallFixFactories.unsafeCallFactory)
|
registerApplicator(ReplaceCallFixFactories.unsafeCallFactory)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-13
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.idea.KotlinBundle
|
|||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.psi.KtPostfixExpression
|
import org.jetbrains.kotlin.psi.KtPostfixExpression
|
||||||
import org.jetbrains.kotlin.psi.KtPsiFactory
|
import org.jetbrains.kotlin.psi.KtPsiFactory
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
||||||
|
|
||||||
abstract class ExclExclCallFix(psiElement: PsiElement) : KotlinPsiOnlyQuickFixAction<PsiElement>(psiElement) {
|
abstract class ExclExclCallFix(psiElement: PsiElement) : KotlinPsiOnlyQuickFixAction<PsiElement>(psiElement) {
|
||||||
override fun getFamilyName(): String = text
|
override fun getFamilyName(): String = text
|
||||||
@@ -25,28 +26,18 @@ abstract class ExclExclCallFix(psiElement: PsiElement) : KotlinPsiOnlyQuickFixAc
|
|||||||
class RemoveExclExclCallFix(psiElement: PsiElement) : ExclExclCallFix(psiElement), CleanupFix, HighPriorityAction {
|
class RemoveExclExclCallFix(psiElement: PsiElement) : ExclExclCallFix(psiElement), CleanupFix, HighPriorityAction {
|
||||||
override fun getText(): String = KotlinBundle.message("fix.remove.non.null.assertion")
|
override fun getText(): String = KotlinBundle.message("fix.remove.non.null.assertion")
|
||||||
|
|
||||||
override fun isAvailable(project: Project, editor: Editor?, file: KtFile): Boolean =
|
|
||||||
getExclExclPostfixExpression() != null
|
|
||||||
|
|
||||||
override fun invoke(project: Project, editor: Editor?, file: KtFile) {
|
override fun invoke(project: Project, editor: Editor?, file: KtFile) {
|
||||||
if (!FileModificationService.getInstance().prepareFileForWrite(file)) return
|
if (!FileModificationService.getInstance().prepareFileForWrite(file)) return
|
||||||
|
|
||||||
val postfixExpression = getExclExclPostfixExpression() ?: return
|
val postfixExpression = element as? KtPostfixExpression ?: return
|
||||||
val expression = KtPsiFactory(project).createExpression(postfixExpression.baseExpression!!.text)
|
val expression = KtPsiFactory(project).createExpression(postfixExpression.baseExpression!!.text)
|
||||||
postfixExpression.replace(expression)
|
postfixExpression.replace(expression)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getExclExclPostfixExpression(): KtPostfixExpression? {
|
|
||||||
val operationParent = element?.parent
|
|
||||||
if (operationParent is KtPostfixExpression && operationParent.baseExpression != null) {
|
|
||||||
return operationParent
|
|
||||||
}
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object : QuickFixesPsiBasedFactory<PsiElement>(PsiElement::class, PsiElementSuitabilityCheckers.ALWAYS_SUITABLE) {
|
companion object : QuickFixesPsiBasedFactory<PsiElement>(PsiElement::class, PsiElementSuitabilityCheckers.ALWAYS_SUITABLE) {
|
||||||
override fun doCreateQuickFix(psiElement: PsiElement): List<IntentionAction> {
|
override fun doCreateQuickFix(psiElement: PsiElement): List<IntentionAction> {
|
||||||
return listOfNotNull(RemoveExclExclCallFix(psiElement))
|
val postfixExpression = psiElement.getNonStrictParentOfType<KtPostfixExpression>() ?: return emptyList()
|
||||||
|
return listOfNotNull(RemoveExclExclCallFix(postfixExpression))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2,5 +2,3 @@
|
|||||||
fun test(value : Int) : Int {
|
fun test(value : Int) : Int {
|
||||||
return value<caret>!!
|
return value<caret>!!
|
||||||
}
|
}
|
||||||
|
|
||||||
/* IGNORE_FIR */
|
|
||||||
@@ -2,5 +2,3 @@
|
|||||||
fun test(value : Int) : Int {
|
fun test(value : Int) : Int {
|
||||||
return value<caret>
|
return value<caret>
|
||||||
}
|
}
|
||||||
|
|
||||||
/* IGNORE_FIR */
|
|
||||||
@@ -2,5 +2,3 @@
|
|||||||
fun test(value : String) {
|
fun test(value : String) {
|
||||||
value!!<caret>.equals("test")
|
value!!<caret>.equals("test")
|
||||||
}
|
}
|
||||||
|
|
||||||
/* IGNORE_FIR */
|
|
||||||
@@ -2,5 +2,3 @@
|
|||||||
fun test(value : String) {
|
fun test(value : String) {
|
||||||
value<caret>.equals("test")
|
value<caret>.equals("test")
|
||||||
}
|
}
|
||||||
|
|
||||||
/* IGNORE_FIR */
|
|
||||||
@@ -2,5 +2,3 @@
|
|||||||
fun test(value : String) : Int {
|
fun test(value : String) : Int {
|
||||||
return value<caret>!!.length
|
return value<caret>!!.length
|
||||||
}
|
}
|
||||||
|
|
||||||
/* IGNORE_FIR */
|
|
||||||
@@ -2,5 +2,3 @@
|
|||||||
fun test(value : String) : Int {
|
fun test(value : String) : Int {
|
||||||
return value<caret>.length
|
return value<caret>.length
|
||||||
}
|
}
|
||||||
|
|
||||||
/* IGNORE_FIR */
|
|
||||||
Reference in New Issue
Block a user