From 14b85e27d115c466fa67a152863a056c2aa3aab2 Mon Sep 17 00:00:00 2001 From: Andrey Cherkasov Date: Tue, 4 Jun 2024 20:32:30 +0400 Subject: [PATCH] [kotlin] Convert ChangeObjectToClassFix to ModCommandAction ^KTIJ-29477 GitOrigin-RevId: da5bbd23b352f6b22d9e3b50bf8ae5742c157ef6 --- .../idea/quickfix/ChangeObjectToClassFix.kt | 28 +++++++++++-------- .../quickfix/ChangeObjectToClassFixFactory.kt | 6 ++-- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/ChangeObjectToClassFix.kt b/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/ChangeObjectToClassFix.kt index 133e4d1c1c1b..68a6782f402f 100644 --- a/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/ChangeObjectToClassFix.kt +++ b/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/ChangeObjectToClassFix.kt @@ -1,23 +1,27 @@ // 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.quickfix -import com.intellij.openapi.editor.Editor -import com.intellij.openapi.project.Project +import com.intellij.modcommand.ActionContext +import com.intellij.modcommand.ModPsiUpdater import org.jetbrains.kotlin.idea.base.resources.KotlinBundle -import org.jetbrains.kotlin.idea.codeinsight.api.classic.quickfixes.KotlinQuickFixAction -import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.idea.codeinsight.api.applicable.intentions.KotlinPsiUpdateModCommandAction import org.jetbrains.kotlin.psi.KtObjectDeclaration import org.jetbrains.kotlin.psi.KtPsiFactory -class ChangeObjectToClassFix(element: KtObjectDeclaration) : KotlinQuickFixAction(element) { - override fun getText(): String = KotlinBundle.message("fix.change.object.to.class") +class ChangeObjectToClassFix( + element: KtObjectDeclaration, +) : KotlinPsiUpdateModCommandAction.ElementBased(element, Unit) { - override fun getFamilyName(): String = text + override fun getFamilyName(): String = KotlinBundle.message("fix.change.object.to.class") - override fun invoke(project: Project, editor: Editor?, file: KtFile) { - val objectDeclaration = element ?: return - val psiFactory = KtPsiFactory(project) - objectDeclaration.getObjectKeyword()?.replace(psiFactory.createClassKeyword()) - objectDeclaration.replace(psiFactory.createClass(objectDeclaration.text)) + override fun invoke( + actionContext: ActionContext, + element: KtObjectDeclaration, + elementContext: Unit, + updater: ModPsiUpdater, + ) { + val psiFactory = KtPsiFactory(actionContext.project) + element.getObjectKeyword()?.replace(psiFactory.createClassKeyword()) + element.replace(psiFactory.createClass(element.text)) } } diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeObjectToClassFixFactory.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeObjectToClassFixFactory.kt index 8ed58edccbfa..5c05168e05a9 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeObjectToClassFixFactory.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeObjectToClassFixFactory.kt @@ -2,16 +2,16 @@ package org.jetbrains.kotlin.idea.quickfix +import com.intellij.codeInsight.intention.IntentionAction import org.jetbrains.kotlin.diagnostics.Diagnostic -import org.jetbrains.kotlin.idea.codeinsight.api.classic.quickfixes.KotlinQuickFixAction import org.jetbrains.kotlin.psi.KtConstructor import org.jetbrains.kotlin.psi.KtObjectDeclaration import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject internal object ChangeObjectToClassFixFactory : KotlinSingleIntentionActionFactory() { - override fun createAction(diagnostic: Diagnostic): KotlinQuickFixAction? { + override fun createAction(diagnostic: Diagnostic): IntentionAction? { val element = diagnostic.psiElement as? KtConstructor<*> ?: return null val containingObject = element.containingClassOrObject as? KtObjectDeclaration ?: return null - return ChangeObjectToClassFix(containingObject) + return ChangeObjectToClassFix(containingObject).asIntention() } }