From 73b796f184133536b02b05670a9218caca2f707a Mon Sep 17 00:00:00 2001 From: Mark Punzalan Date: Wed, 14 Apr 2021 20:28:21 +0000 Subject: [PATCH] FIR IDE: Enable RemoveExclExclCallFix for UNNECESSARY_NON_NULL_ASSERTION. --- .../idea/quickfix/MainKtQuickFixRegistrar.kt | 1 + .../kotlin/idea/quickfix/ExclExclCallFixes.kt | 17 ++++------------- .../expressions/unnecessaryNonNullAssertion1.kt | 2 -- .../unnecessaryNonNullAssertion1.kt.after | 2 -- .../expressions/unnecessaryNonNullAssertion2.kt | 2 -- .../unnecessaryNonNullAssertion2.kt.after | 2 -- .../expressions/unnecessaryNonNullAssertion3.kt | 2 -- .../unnecessaryNonNullAssertion3.kt.after | 2 -- 8 files changed, 5 insertions(+), 25 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 a3a03132f70..ac9c6f3285d 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 @@ -82,6 +82,7 @@ class MainKtQuickFixRegistrar : KtQuickFixRegistrar() { private val expressions = KtQuickFixesListBuilder.registerPsiQuickFix { registerPsiQuickFixes(KtFirDiagnostic.UnnecessarySafeCall::class, ReplaceWithDotCallFix) + registerPsiQuickFixes(KtFirDiagnostic.UnnecessaryNotNullAssertion::class, RemoveExclExclCallFix) registerApplicator(ReplaceCallFixFactories.unsafeCallFactory) } diff --git a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/ExclExclCallFixes.kt b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/ExclExclCallFixes.kt index 533a5cea793..f67863aa74e 100644 --- a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/ExclExclCallFixes.kt +++ b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/ExclExclCallFixes.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtPostfixExpression import org.jetbrains.kotlin.psi.KtPsiFactory +import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType abstract class ExclExclCallFix(psiElement: PsiElement) : KotlinPsiOnlyQuickFixAction(psiElement) { override fun getFamilyName(): String = text @@ -25,28 +26,18 @@ abstract class ExclExclCallFix(psiElement: PsiElement) : KotlinPsiOnlyQuickFixAc class RemoveExclExclCallFix(psiElement: PsiElement) : ExclExclCallFix(psiElement), CleanupFix, HighPriorityAction { 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) { if (!FileModificationService.getInstance().prepareFileForWrite(file)) return - val postfixExpression = getExclExclPostfixExpression() ?: return + val postfixExpression = element as? KtPostfixExpression ?: return val expression = KtPsiFactory(project).createExpression(postfixExpression.baseExpression!!.text) 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::class, PsiElementSuitabilityCheckers.ALWAYS_SUITABLE) { override fun doCreateQuickFix(psiElement: PsiElement): List { - return listOfNotNull(RemoveExclExclCallFix(psiElement)) + val postfixExpression = psiElement.getNonStrictParentOfType() ?: return emptyList() + return listOfNotNull(RemoveExclExclCallFix(postfixExpression)) } } } \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion1.kt b/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion1.kt index e2109e58dde..997fb077345 100644 --- a/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion1.kt +++ b/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion1.kt @@ -2,5 +2,3 @@ fun test(value : Int) : Int { return value!! } - -/* IGNORE_FIR */ \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion1.kt.after b/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion1.kt.after index 6350d1a7d46..3f6e5bd7ffe 100644 --- a/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion1.kt.after +++ b/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion1.kt.after @@ -2,5 +2,3 @@ fun test(value : Int) : Int { return value } - -/* IGNORE_FIR */ \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion2.kt b/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion2.kt index 4ce4283a8d6..93a8d4b69cc 100644 --- a/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion2.kt +++ b/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion2.kt @@ -2,5 +2,3 @@ fun test(value : String) { value!!.equals("test") } - -/* IGNORE_FIR */ \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion2.kt.after b/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion2.kt.after index 751cd87d6f0..1f12846abb6 100644 --- a/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion2.kt.after +++ b/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion2.kt.after @@ -2,5 +2,3 @@ fun test(value : String) { value.equals("test") } - -/* IGNORE_FIR */ \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion3.kt b/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion3.kt index 4f952130c6a..2422453b1cb 100644 --- a/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion3.kt +++ b/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion3.kt @@ -2,5 +2,3 @@ fun test(value : String) : Int { return value!!.length } - -/* IGNORE_FIR */ \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion3.kt.after b/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion3.kt.after index bd3218f77a5..9872deea316 100644 --- a/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion3.kt.after +++ b/idea/testData/quickfix/expressions/unnecessaryNonNullAssertion3.kt.after @@ -2,5 +2,3 @@ fun test(value : String) : Int { return value.length } - -/* IGNORE_FIR */ \ No newline at end of file