[kotlin] Convert InlineClassDeprecatedFix to ModCommandAction

^KTIJ-29500

GitOrigin-RevId: da0a695375e33700a84a18665eca8309b295f5db
This commit is contained in:
Andrey Cherkasov
2024-07-27 23:45:42 +00:00
committed by intellij-monorepo-bot
parent 6468b797f4
commit f9cabcfb46
@@ -7,14 +7,14 @@ package org.jetbrains.kotlin.idea.quickfix
import com.intellij.codeInsight.intention.IntentionAction
import com.intellij.codeInspection.util.IntentionName
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.project.Project
import com.intellij.modcommand.ActionContext
import com.intellij.modcommand.ModPsiUpdater
import com.intellij.modcommand.Presentation
import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.idea.base.resources.KotlinBundle
import org.jetbrains.kotlin.idea.base.facet.platform.platform
import org.jetbrains.kotlin.idea.codeinsight.api.classic.quickfixes.CleanupFix
import org.jetbrains.kotlin.idea.codeinsight.api.classic.quickfixes.KotlinQuickFixAction
import org.jetbrains.kotlin.idea.base.resources.KotlinBundle
import org.jetbrains.kotlin.idea.codeinsight.api.applicable.intentions.KotlinPsiUpdateModCommandAction
import org.jetbrains.kotlin.idea.util.addAnnotation
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.platform.has
@@ -25,8 +25,8 @@ import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
import org.jetbrains.kotlin.resolve.JVM_INLINE_ANNOTATION_FQ_NAME
class InlineClassDeprecatedFix(
element: KtModifierListOwner
) : KotlinQuickFixAction<KtModifierListOwner>(element), CleanupFix {
element: KtModifierListOwner,
) : KotlinPsiUpdateModCommandAction.ElementBased<KtModifierListOwner, Unit>(element, Unit) {
@IntentionName
private val text = KotlinBundle.message(
@@ -34,15 +34,20 @@ class InlineClassDeprecatedFix(
(if (element.containingKtFile.hasJvmTarget()) "@JvmInline " else "") + "value"
)
override fun getText() = text
override fun getPresentation(context: ActionContext, element: KtModifierListOwner): Presentation? = Presentation.of(text)
override fun getFamilyName() = KotlinBundle.message("replace.modifier")
override fun invoke(project: Project, editor: Editor?, file: KtFile) {
element?.removeModifier(KtTokens.INLINE_KEYWORD)
element?.addModifier(KtTokens.VALUE_KEYWORD)
if (file.hasJvmTarget()) {
element?.addAnnotation(JVM_INLINE_ANNOTATION_FQ_NAME)
override fun invoke(
actionContext: ActionContext,
element: KtModifierListOwner,
elementContext: Unit,
updater: ModPsiUpdater,
) {
element.removeModifier(KtTokens.INLINE_KEYWORD)
element.addModifier(KtTokens.VALUE_KEYWORD)
if (element.containingKtFile.hasJvmTarget()) {
element.addAnnotation(JVM_INLINE_ANNOTATION_FQ_NAME)
}
}
@@ -50,7 +55,7 @@ class InlineClassDeprecatedFix(
override fun createAction(diagnostic: Diagnostic): IntentionAction? {
val deprecatedModifier = Errors.INLINE_CLASS_DEPRECATED.cast(diagnostic)
val modifierListOwner = deprecatedModifier.psiElement.getParentOfType<KtModifierListOwner>(strict = true) ?: return null
return if (deprecatedModifier != null) InlineClassDeprecatedFix(modifierListOwner) else null
return if (deprecatedModifier != null) InlineClassDeprecatedFix(modifierListOwner).asIntention() else null
}
}