From af358920078061858993b859bc7e0b306d7c4a7a Mon Sep 17 00:00:00 2001 From: Mark Punzalan Date: Thu, 27 May 2021 20:16:10 +0000 Subject: [PATCH] FIR IDE: Enable RemoveUselessIsCheckFix and RemoveUselessIsCheckFixForWhen. --- .../idea/quickfix/MainKtQuickFixRegistrar.kt | 1 + .../idea/quickfix/RemoveUselessIsCheckFix.kt | 37 +++++++++++++++ .../RemoveUselessIsCheckFixForWhen.kt | 28 ++++------- .../idea/quickfix/RemoveUselessIsCheckFix.kt | 47 ------------------- .../expressions/removeUselessIsCheck.kt | 4 +- .../expressions/removeUselessIsCheck.kt.after | 4 +- .../expressions/removeUselessIsCheckInWhen.kt | 4 +- .../removeUselessIsCheckInWhen.kt.after | 4 +- ...emoveUselessIsCheckInWhenExpressionless.kt | 3 +- ...selessIsCheckInWhenExpressionless.kt.after | 3 +- ...selessIsCheckInWhenExpressionlessNegate.kt | 3 +- ...IsCheckInWhenExpressionlessNegate.kt.after | 3 +- .../removeUselessIsCheckInWhenNegate.kt | 4 +- .../removeUselessIsCheckInWhenNegate.kt.after | 4 +- .../expressions/removeUselessIsCheckNegate.kt | 4 +- .../removeUselessIsCheckNegate.kt.after | 4 +- 16 files changed, 59 insertions(+), 98 deletions(-) create mode 100644 idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/RemoveUselessIsCheckFix.kt rename idea/{ => idea-frontend-independent}/src/org/jetbrains/kotlin/idea/quickfix/RemoveUselessIsCheckFixForWhen.kt (53%) delete mode 100644 idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveUselessIsCheckFix.kt 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 758b7dbdb0e..3b9cbd099ce 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 @@ -107,6 +107,7 @@ class MainKtQuickFixRegistrar : KtQuickFixRegistrar() { registerPsiQuickFixes(KtFirDiagnostic.UselessElvis::class, RemoveUselessElvisFix) registerPsiQuickFixes(KtFirDiagnostic.UselessElvisRightIsNull::class, RemoveUselessElvisFix) registerPsiQuickFixes(KtFirDiagnostic.UselessCast::class, RemoveUselessCastFix) + registerPsiQuickFixes(KtFirDiagnostic.UselessIsCheck::class, RemoveUselessIsCheckFix, RemoveUselessIsCheckFixForWhen) registerApplicator(ReplaceCallFixFactories.unsafeCallFactory) registerApplicator(AddExclExclCallFixFactories.unsafeCallFactory) registerApplicator(AddExclExclCallFixFactories.unsafeInfixCallFactory) diff --git a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/RemoveUselessIsCheckFix.kt b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/RemoveUselessIsCheckFix.kt new file mode 100644 index 00000000000..1913acb9019 --- /dev/null +++ b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/RemoveUselessIsCheckFix.kt @@ -0,0 +1,37 @@ +/* + * 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.codeInsight.intention.IntentionAction +import com.intellij.openapi.editor.Editor +import com.intellij.openapi.project.Project +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.idea.KotlinBundle +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi.KtIsExpression +import org.jetbrains.kotlin.psi.KtPsiFactory +import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType + +class RemoveUselessIsCheckFix(element: KtIsExpression) : KotlinPsiOnlyQuickFixAction(element) { + override fun getFamilyName() = KotlinBundle.message("remove.useless.is.check") + + override fun getText(): String = familyName + + override fun invoke(project: Project, editor: Editor?, file: KtFile) { + element?.run { + val expressionsText = this.isNegated.not().toString() + val newExpression = KtPsiFactory(project).createExpression(expressionsText) + replace(newExpression) + } + } + + companion object : QuickFixesPsiBasedFactory(PsiElement::class, PsiElementSuitabilityCheckers.ALWAYS_SUITABLE) { + override fun doCreateQuickFix(psiElement: PsiElement): List { + val expression = psiElement.getNonStrictParentOfType() ?: return emptyList() + return listOf(RemoveUselessIsCheckFix(expression)) + } + } +} diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveUselessIsCheckFixForWhen.kt b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/RemoveUselessIsCheckFixForWhen.kt similarity index 53% rename from idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveUselessIsCheckFixForWhen.kt rename to idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/RemoveUselessIsCheckFixForWhen.kt index 79e3ecead73..68c58ff8c2b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveUselessIsCheckFixForWhen.kt +++ b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/RemoveUselessIsCheckFixForWhen.kt @@ -1,29 +1,19 @@ /* - * Copyright 2010-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * 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.codeInsight.intention.IntentionAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project -import org.jetbrains.kotlin.diagnostics.Diagnostic +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType -class RemoveUselessIsCheckFixForWhen(element: KtWhenConditionIsPattern) : KotlinQuickFixAction(element) { +class RemoveUselessIsCheckFixForWhen(element: KtWhenConditionIsPattern) : KotlinPsiOnlyQuickFixAction(element) { override fun getFamilyName() = KotlinBundle.message("remove.useless.is.check") override fun getText(): String = familyName @@ -43,10 +33,10 @@ class RemoveUselessIsCheckFixForWhen(element: KtWhenConditionIsPattern) : Kotlin } } - companion object : KotlinSingleIntentionActionFactory() { - override fun createAction(diagnostic: Diagnostic): KotlinQuickFixAction? { - val expression = diagnostic.psiElement.getNonStrictParentOfType() ?: return null - return RemoveUselessIsCheckFixForWhen(expression) + companion object : QuickFixesPsiBasedFactory(PsiElement::class, PsiElementSuitabilityCheckers.ALWAYS_SUITABLE) { + override fun doCreateQuickFix(psiElement: PsiElement): List { + val expression = psiElement.getNonStrictParentOfType() ?: return emptyList() + return listOf(RemoveUselessIsCheckFixForWhen(expression)) } } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveUselessIsCheckFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveUselessIsCheckFix.kt deleted file mode 100644 index ecafeb22098..00000000000 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveUselessIsCheckFix.kt +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2010-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.idea.quickfix - -import com.intellij.openapi.editor.Editor -import com.intellij.openapi.project.Project -import org.jetbrains.kotlin.diagnostics.Diagnostic -import org.jetbrains.kotlin.idea.KotlinBundle -import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.psi.KtIsExpression -import org.jetbrains.kotlin.psi.KtPsiFactory -import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType - -class RemoveUselessIsCheckFix(element: KtIsExpression) : KotlinQuickFixAction(element) { - override fun getFamilyName() = KotlinBundle.message("remove.useless.is.check") - - override fun getText(): String = familyName - - override fun invoke(project: Project, editor: Editor?, file: KtFile) { - element?.run { - val expressionsText = this.isNegated.not().toString() - val newExpression = KtPsiFactory(project).createExpression(expressionsText) - replace(newExpression) - } - } - - companion object : KotlinSingleIntentionActionFactory() { - override fun createAction(diagnostic: Diagnostic): KotlinQuickFixAction? { - val expression = diagnostic.psiElement.getNonStrictParentOfType() ?: return null - return RemoveUselessIsCheckFix(expression) - } - } -} diff --git a/idea/testData/quickfix/expressions/removeUselessIsCheck.kt b/idea/testData/quickfix/expressions/removeUselessIsCheck.kt index 410fffb6d3b..6847f54faa0 100644 --- a/idea/testData/quickfix/expressions/removeUselessIsCheck.kt +++ b/idea/testData/quickfix/expressions/removeUselessIsCheck.kt @@ -3,6 +3,4 @@ fun foo(a: String) { if (1 is Int) { } -} - -/* IGNORE_FIR */ \ No newline at end of file +} \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/removeUselessIsCheck.kt.after b/idea/testData/quickfix/expressions/removeUselessIsCheck.kt.after index 616d1e3f994..14c92b7299a 100644 --- a/idea/testData/quickfix/expressions/removeUselessIsCheck.kt.after +++ b/idea/testData/quickfix/expressions/removeUselessIsCheck.kt.after @@ -3,6 +3,4 @@ fun foo(a: String) { if (true) { } -} - -/* IGNORE_FIR */ \ No newline at end of file +} \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/removeUselessIsCheckInWhen.kt b/idea/testData/quickfix/expressions/removeUselessIsCheckInWhen.kt index e7c27c5a936..3375691a856 100644 --- a/idea/testData/quickfix/expressions/removeUselessIsCheckInWhen.kt +++ b/idea/testData/quickfix/expressions/removeUselessIsCheckInWhen.kt @@ -8,6 +8,4 @@ fun foo(bar: Base):Int { is Base -> 42 else -> 1 } -} - -/* IGNORE_FIR */ \ No newline at end of file +} \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/removeUselessIsCheckInWhen.kt.after b/idea/testData/quickfix/expressions/removeUselessIsCheckInWhen.kt.after index e86491c757d..7537084e9c9 100644 --- a/idea/testData/quickfix/expressions/removeUselessIsCheckInWhen.kt.after +++ b/idea/testData/quickfix/expressions/removeUselessIsCheckInWhen.kt.after @@ -7,6 +7,4 @@ fun foo(bar: Base):Int { is Derived -> 0 else -> 42 } -} - -/* IGNORE_FIR */ \ No newline at end of file +} \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenExpressionless.kt b/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenExpressionless.kt index c65e9cb3b2a..00309c6c359 100644 --- a/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenExpressionless.kt +++ b/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenExpressionless.kt @@ -9,5 +9,4 @@ fun foo(bar: Base):Int { bar is Base -> 42 else -> 1 } -} -/* IGNORE_FIR */ \ No newline at end of file +} \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenExpressionless.kt.after b/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenExpressionless.kt.after index f570cf0d5fd..c8673c835e7 100644 --- a/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenExpressionless.kt.after +++ b/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenExpressionless.kt.after @@ -9,5 +9,4 @@ fun foo(bar: Base):Int { true -> 42 else -> 1 } -} -/* IGNORE_FIR */ \ No newline at end of file +} \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenExpressionlessNegate.kt b/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenExpressionlessNegate.kt index 8e19703516e..e62165714d3 100644 --- a/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenExpressionlessNegate.kt +++ b/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenExpressionlessNegate.kt @@ -9,5 +9,4 @@ fun foo(bar: Base):Int { bar !is Base -> 42 else -> 1 } -} -/* IGNORE_FIR */ \ No newline at end of file +} \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenExpressionlessNegate.kt.after b/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenExpressionlessNegate.kt.after index dd9aff0053d..f014460df3a 100644 --- a/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenExpressionlessNegate.kt.after +++ b/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenExpressionlessNegate.kt.after @@ -9,5 +9,4 @@ fun foo(bar: Base):Int { false -> 42 else -> 1 } -} -/* IGNORE_FIR */ \ No newline at end of file +} \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenNegate.kt b/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenNegate.kt index adbc2f2d357..6a8f42699ec 100644 --- a/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenNegate.kt +++ b/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenNegate.kt @@ -8,6 +8,4 @@ fun foo(bar: Base):Int { !is Base -> 42 else -> 1 } -} - -/* IGNORE_FIR */ \ No newline at end of file +} \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenNegate.kt.after b/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenNegate.kt.after index 9d5ec45de6b..0e5654ef6e6 100644 --- a/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenNegate.kt.after +++ b/idea/testData/quickfix/expressions/removeUselessIsCheckInWhenNegate.kt.after @@ -7,6 +7,4 @@ fun foo(bar: Base):Int { is Derived -> 0 else -> 1 } -} - -/* IGNORE_FIR */ \ No newline at end of file +} \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/removeUselessIsCheckNegate.kt b/idea/testData/quickfix/expressions/removeUselessIsCheckNegate.kt index d13eab35de4..a885349d36f 100644 --- a/idea/testData/quickfix/expressions/removeUselessIsCheckNegate.kt +++ b/idea/testData/quickfix/expressions/removeUselessIsCheckNegate.kt @@ -3,6 +3,4 @@ fun foo(a: String) { if (1 !is Int) { } -} - -/* IGNORE_FIR */ \ No newline at end of file +} \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/removeUselessIsCheckNegate.kt.after b/idea/testData/quickfix/expressions/removeUselessIsCheckNegate.kt.after index 412f8848e33..05ffa5b237d 100644 --- a/idea/testData/quickfix/expressions/removeUselessIsCheckNegate.kt.after +++ b/idea/testData/quickfix/expressions/removeUselessIsCheckNegate.kt.after @@ -3,6 +3,4 @@ fun foo(a: String) { if (false) { } -} - -/* IGNORE_FIR */ \ No newline at end of file +} \ No newline at end of file