From 249e2ef0c2bf6be55f2edc7afc33332a6cdfbd26 Mon Sep 17 00:00:00 2001 From: Andrey Cherkasov Date: Sat, 27 Jul 2024 19:00:05 +0400 Subject: [PATCH] [kotlin] Move InlineClassDeprecatedFix to frontend independent module ^KTIJ-29500 GitOrigin-RevId: 769538db72a69830a1384ea4766c0651b178dc67 --- .../idea/quickfix/InlineClassDeprecatedFix.kt | 48 +++++++++++++++++ .../idea/quickfix/InlineClassDeprecatedFix.kt | 53 ++----------------- .../kotlin/idea/quickfix/QuickFixRegistrar.kt | 2 +- 3 files changed, 54 insertions(+), 49 deletions(-) create mode 100644 plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/InlineClassDeprecatedFix.kt diff --git a/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/InlineClassDeprecatedFix.kt b/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/InlineClassDeprecatedFix.kt new file mode 100644 index 000000000000..00773f64ba73 --- /dev/null +++ b/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/InlineClassDeprecatedFix.kt @@ -0,0 +1,48 @@ +// 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.codeInspection.util.IntentionName +import com.intellij.modcommand.ActionContext +import com.intellij.modcommand.ModPsiUpdater +import com.intellij.modcommand.Presentation +import org.jetbrains.kotlin.idea.base.facet.platform.platform +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.name.ClassId +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.platform.has +import org.jetbrains.kotlin.platform.jvm.JvmPlatform +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi.KtModifierListOwner + +class InlineClassDeprecatedFix( + element: KtModifierListOwner, +) : KotlinPsiUpdateModCommandAction.ElementBased(element, Unit) { + + @IntentionName + private val text = KotlinBundle.message( + "replace.with.0", + (if (element.containingKtFile.hasJvmTarget()) "@JvmInline " else "") + "value" + ) + + override fun getPresentation(context: ActionContext, element: KtModifierListOwner): Presentation? = Presentation.of(text) + + override fun getFamilyName() = KotlinBundle.message("replace.modifier") + + 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(ClassId.topLevel(FqName("kotlin.jvm.JvmInline"))) + } + } +} + +private fun KtFile.hasJvmTarget(): Boolean = platform.has() \ No newline at end of file diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/InlineClassDeprecatedFix.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/InlineClassDeprecatedFix.kt index d3f1e169d79a..3908242c27c2 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/InlineClassDeprecatedFix.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/InlineClassDeprecatedFix.kt @@ -6,58 +6,15 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.codeInsight.intention.IntentionAction -import com.intellij.codeInspection.util.IntentionName -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.facet.platform.platform -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 -import org.jetbrains.kotlin.platform.jvm.JvmPlatform -import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtModifierListOwner import org.jetbrains.kotlin.psi.psiUtil.getParentOfType -import org.jetbrains.kotlin.resolve.JVM_INLINE_ANNOTATION_FQ_NAME -class InlineClassDeprecatedFix( - element: KtModifierListOwner, -) : KotlinPsiUpdateModCommandAction.ElementBased(element, Unit) { - - @IntentionName - private val text = KotlinBundle.message( - "replace.with.0", - (if (element.containingKtFile.hasJvmTarget()) "@JvmInline " else "") + "value" - ) - - override fun getPresentation(context: ActionContext, element: KtModifierListOwner): Presentation? = Presentation.of(text) - - override fun getFamilyName() = KotlinBundle.message("replace.modifier") - - 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) - } +internal object InlineClassDeprecatedFixFactory : KotlinSingleIntentionActionFactory() { + override fun createAction(diagnostic: Diagnostic): IntentionAction? { + val deprecatedModifier = Errors.INLINE_CLASS_DEPRECATED.cast(diagnostic) + val modifierListOwner = deprecatedModifier.psiElement.getParentOfType(strict = true) ?: return null + return if (deprecatedModifier != null) InlineClassDeprecatedFix(modifierListOwner).asIntention() else null } - - companion object : KotlinSingleIntentionActionFactory() { - override fun createAction(diagnostic: Diagnostic): IntentionAction? { - val deprecatedModifier = Errors.INLINE_CLASS_DEPRECATED.cast(diagnostic) - val modifierListOwner = deprecatedModifier.psiElement.getParentOfType(strict = true) ?: return null - return if (deprecatedModifier != null) InlineClassDeprecatedFix(modifierListOwner).asIntention() else null - } - } - - private fun KtFile.hasJvmTarget(): Boolean = platform.has() } \ No newline at end of file diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt index 457c4c819620..5652ecec4203 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt @@ -758,7 +758,7 @@ class QuickFixRegistrar : QuickFixContributor { COMPATIBILITY_WARNING.registerFactory(UseFullyQualifiedCallFix) - INLINE_CLASS_DEPRECATED.registerFactory(InlineClassDeprecatedFix) + INLINE_CLASS_DEPRECATED.registerFactory(InlineClassDeprecatedFixFactory) SUBCLASS_CANT_CALL_COMPANION_PROTECTED_NON_STATIC.registerFactory(AddJvmStaticAnnotationFix)