diff --git a/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/ConvertIllegalEscapeToUnicodeEscapeFix.kt b/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/ConvertIllegalEscapeToUnicodeEscapeFix.kt new file mode 100644 index 000000000000..4d44b5e545ee --- /dev/null +++ b/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/quickfix/ConvertIllegalEscapeToUnicodeEscapeFix.kt @@ -0,0 +1,30 @@ +// 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 org.jetbrains.kotlin.idea.base.resources.KotlinBundle +import org.jetbrains.kotlin.idea.codeinsight.api.classic.quickfixes.KotlinQuickFixAction +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(element) { + override fun getText(): String = KotlinBundle.message("convert.to.unicode.escape") + + override fun getFamilyName(): String = text + + override fun invoke(project: Project, editor: Editor?, file: KtFile) { + val element = this.element ?: return + val psiFactory = KtPsiFactory(project) + when (element) { + is KtConstantExpression -> element.replace(psiFactory.createExpression("'$unicodeEscape'")) + is KtEscapeStringTemplateEntry -> element.replace(psiFactory.createStringTemplate(unicodeEscape).entries.first()) + } + } +} diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/ConvertIllegalEscapeToUnicodeEscapeFix.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/ConvertIllegalEscapeToUnicodeEscapeFix.kt index dc415835e191..5e8345d8afa3 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/ConvertIllegalEscapeToUnicodeEscapeFix.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/ConvertIllegalEscapeToUnicodeEscapeFix.kt @@ -2,42 +2,20 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.codeInsight.intention.IntentionAction -import com.intellij.openapi.editor.Editor -import com.intellij.openapi.project.Project import org.jetbrains.kotlin.diagnostics.Diagnostic -import org.jetbrains.kotlin.idea.base.resources.KotlinBundle -import org.jetbrains.kotlin.idea.codeinsight.api.classic.quickfixes.KotlinQuickFixAction import org.jetbrains.kotlin.psi.* -class ConvertIllegalEscapeToUnicodeEscapeFix( - element: KtElement, - private val unicodeEscape: String -) : KotlinQuickFixAction(element) { - override fun getText(): String = KotlinBundle.message("convert.to.unicode.escape") - - override fun getFamilyName(): String = text - - override fun invoke(project: Project, editor: Editor?, file: KtFile) { - val element = this.element ?: return - val psiFactory = KtPsiFactory(project) - when (element) { - is KtConstantExpression -> element.replace(psiFactory.createExpression("'$unicodeEscape'")) - is KtEscapeStringTemplateEntry -> element.replace(psiFactory.createStringTemplate(unicodeEscape).entries.first()) - } +internal object ConvertIllegalEscapeToUnicodeEscapeFixFactory : KotlinSingleIntentionActionFactory() { + override fun createAction(diagnostic: Diagnostic): IntentionAction? { + val element = diagnostic.psiElement as? KtElement ?: return null + val illegalEscape = when (element) { + is KtConstantExpression -> element.text.takeIf { it.length >= 2 }?.drop(1)?.dropLast(1) + is KtEscapeStringTemplateEntry -> element.text + else -> null + } ?: return null + val unicodeEscape = illegalEscapeToUnicodeEscape[illegalEscape] ?: return null + return ConvertIllegalEscapeToUnicodeEscapeFix(element, unicodeEscape) } - companion object : KotlinSingleIntentionActionFactory() { - override fun createAction(diagnostic: Diagnostic): IntentionAction? { - val element = diagnostic.psiElement as? KtElement ?: return null - val illegalEscape = when (element) { - is KtConstantExpression -> element.text.takeIf { it.length >= 2 }?.drop(1)?.dropLast(1) - is KtEscapeStringTemplateEntry -> element.text - else -> null - } ?: return null - val unicodeEscape = illegalEscapeToUnicodeEscape[illegalEscape] ?: return null - return ConvertIllegalEscapeToUnicodeEscapeFix(element, unicodeEscape) - } - - private val illegalEscapeToUnicodeEscape = mapOf("\\f" to "\\u000c") - } + private val illegalEscapeToUnicodeEscape = mapOf("\\f" to "\\u000c") } 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 19e4781fd40e..fe627d660dff 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 @@ -767,7 +767,7 @@ class QuickFixRegistrar : QuickFixContributor { JAVA_CLASS_ON_COMPANION.registerFactory(JavaClassOnCompanionFixes) - ILLEGAL_ESCAPE.registerFactory(ConvertIllegalEscapeToUnicodeEscapeFix) + ILLEGAL_ESCAPE.registerFactory(ConvertIllegalEscapeToUnicodeEscapeFixFactory) MODIFIER_FORM_FOR_NON_BUILT_IN_SUSPEND.registerFactory(AddEmptyArgumentListFixFactory)