From d2208e036eae7196aece807b7c0aa8d7725bbb9e Mon Sep 17 00:00:00 2001 From: Andrey Cherkasov Date: Mon, 10 Jun 2024 23:35:32 +0400 Subject: [PATCH] [kotlin] Port RemoveSupertypeFix to K2 This quick fix is for the MANY_CLASSES_IN_SUPERTYPE_LIST error. ^KTIJ-29612 GitOrigin-RevId: f028565cd5a6cba1911db51ced7f9015ac545f0c --- .../fixes/KotlinK2QuickFixRegistrar.kt | 1 + .../fixes/RemoveSupertypeFixFactory.kt | 17 +++++++++++++++++ .../quickfix/modifiers/removeSupertype1.kt | 4 ++-- .../modifiers/removeSupertype1.kt.after | 4 ++-- .../quickfix/modifiers/removeSupertype2.kt | 4 ++-- .../modifiers/removeSupertype2.kt.after | 4 ++-- .../quickfix/modifiers/removeSupertype3.kt | 4 ++-- .../modifiers/removeSupertype3.kt.after | 4 ++-- .../quickfix/modifiers/removeSupertype4.kt | 4 ++-- .../modifiers/removeSupertype4.kt.after | 4 ++-- 10 files changed, 34 insertions(+), 16 deletions(-) create mode 100644 plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/RemoveSupertypeFixFactory.kt diff --git a/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/KotlinK2QuickFixRegistrar.kt b/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/KotlinK2QuickFixRegistrar.kt index f6614a1f45ca..113fe3e0aa23 100644 --- a/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/KotlinK2QuickFixRegistrar.kt +++ b/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/KotlinK2QuickFixRegistrar.kt @@ -111,6 +111,7 @@ class KotlinK2QuickFixRegistrar : KotlinQuickFixRegistrar() { registerFactory(AddIsToWhenConditionFixFactory.addIsToWhenConditionFixFactory) registerFactory(MoveTypeAliasToTopLevelFixFactory.moveTypeAliasToTopLevelFixFactory) registerPsiQuickFixes(KaFirDiagnostic.InvalidIfAsExpression::class, AddIfElseBranchFix) + registerFactory(RemoveSupertypeFixFactory.removeSupertypeFixFactory) } private val addAbstract = KtQuickFixesListBuilder.registerPsiQuickFix { diff --git a/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/RemoveSupertypeFixFactory.kt b/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/RemoveSupertypeFixFactory.kt new file mode 100644 index 000000000000..ab6c1a0c5e93 --- /dev/null +++ b/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/RemoveSupertypeFixFactory.kt @@ -0,0 +1,17 @@ +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package org.jetbrains.kotlin.idea.k2.codeinsight.fixes + +import org.jetbrains.kotlin.analysis.api.fir.diagnostics.KaFirDiagnostic +import org.jetbrains.kotlin.idea.codeinsight.api.applicators.fixes.KotlinQuickFixFactory +import org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix +import org.jetbrains.kotlin.psi.KtSuperTypeListEntry +import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType + +internal object RemoveSupertypeFixFactory { + + val removeSupertypeFixFactory = KotlinQuickFixFactory.ModCommandBased { diagnostic: KaFirDiagnostic.ManyClassesInSupertypeList -> + val superType = diagnostic.psi.getStrictParentOfType() ?: return@ModCommandBased emptyList() + + listOf(RemoveSupertypeFix(superType)) + } +} diff --git a/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype1.kt b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype1.kt index bc61851375f2..4bd3ce7581a3 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype1.kt +++ b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype1.kt @@ -3,5 +3,5 @@ open class C1 {} open class C2 {} class C3: C1(), C2() {} -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype1.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype1.kt.after index 5446ae6ba23b..5ed210bfe716 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype1.kt.after +++ b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype1.kt.after @@ -3,5 +3,5 @@ open class C1 {} open class C2 {} class C3: C1() {} -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype2.kt b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype2.kt index d11d6da03f6e..8bab7b072ba3 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype2.kt +++ b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype2.kt @@ -3,5 +3,5 @@ open class C1 {} open class C2 {} class C3: C1(),C2() {} -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype2.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype2.kt.after index 5446ae6ba23b..5ed210bfe716 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype2.kt.after +++ b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype2.kt.after @@ -3,5 +3,5 @@ open class C1 {} open class C2 {} class C3: C1() {} -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype3.kt b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype3.kt index 4a921c2dd9ef..ab9c85e2e5a5 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype3.kt +++ b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype3.kt @@ -3,5 +3,5 @@ open class C1 {} open class C2 {} class C3: C1(), C2 {} -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype3.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype3.kt.after index 5446ae6ba23b..5ed210bfe716 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype3.kt.after +++ b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype3.kt.after @@ -3,5 +3,5 @@ open class C1 {} open class C2 {} class C3: C1() {} -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype4.kt b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype4.kt index 2d5544931773..da392b55a400 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype4.kt +++ b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype4.kt @@ -3,5 +3,5 @@ open class C1 {} open class C2 {} class C3: C1(), /* Hello, world! */ C2() {} -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype4.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype4.kt.after index 97d3a39ecfd6..af95dbccbc41 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype4.kt.after +++ b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/removeSupertype4.kt.after @@ -3,5 +3,5 @@ open class C1 {} open class C2 {} class C3: C1() /* Hello, world! */ {} -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.RemoveSupertypeFix \ No newline at end of file