[kotlin] Convert ConvertIllegalEscapeToUnicodeEscapeFix to ModCommandAction

^KTIJ-29491

GitOrigin-RevId: 82792e5890a3a1b4f72659749f29bb04eb61912a
This commit is contained in:
Andrey Cherkasov
2024-07-25 17:55:03 +00:00
committed by intellij-monorepo-bot
parent 2eccac6137
commit d042fbcfaf
2 changed files with 13 additions and 11 deletions
@@ -1,27 +1,29 @@
// 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.idea.codeinsight.api.applicable.intentions.KotlinPsiUpdateModCommandAction
import org.jetbrains.kotlin.psi.KtConstantExpression
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtEscapeStringTemplateEntry
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtPsiFactory
class ConvertIllegalEscapeToUnicodeEscapeFix(
element: KtElement,
private val unicodeEscape: String
) : KotlinQuickFixAction<KtElement>(element) {
override fun getText(): String = KotlinBundle.message("convert.to.unicode.escape")
) : KotlinPsiUpdateModCommandAction.ElementBased<KtElement, Unit>(element, Unit) {
override fun getFamilyName(): String = text
override fun getFamilyName(): String = KotlinBundle.message("convert.to.unicode.escape")
override fun invoke(project: Project, editor: Editor?, file: KtFile) {
val element = this.element ?: return
val psiFactory = KtPsiFactory(project)
override fun invoke(
actionContext: ActionContext,
element: KtElement,
elementContext: Unit,
updater: ModPsiUpdater,
) {
val psiFactory = KtPsiFactory(actionContext.project)
when (element) {
is KtConstantExpression -> element.replace(psiFactory.createExpression("'$unicodeEscape'"))
is KtEscapeStringTemplateEntry -> element.replace(psiFactory.createStringTemplate(unicodeEscape).entries.first())
@@ -14,7 +14,7 @@ internal object ConvertIllegalEscapeToUnicodeEscapeFixFactory : KotlinSingleInte
else -> null
} ?: return null
val unicodeEscape = illegalEscapeToUnicodeEscape[illegalEscape] ?: return null
return ConvertIllegalEscapeToUnicodeEscapeFix(element, unicodeEscape)
return ConvertIllegalEscapeToUnicodeEscapeFix(element, unicodeEscape).asIntention()
}
private val illegalEscapeToUnicodeEscape = mapOf("\\f" to "\\u000c")