[kotlin] Move ConvertIllegalEscapeToUnicodeEscapeFix to frontend independent module

^KTIJ-29491

GitOrigin-RevId: 7dcf1cebc67502c5d5d97b44f87b9a6f18fb2186
This commit is contained in:
Andrey Cherkasov
2024-07-25 17:54:57 +00:00
committed by intellij-monorepo-bot
parent 050afe0e86
commit 2eccac6137
3 changed files with 42 additions and 34 deletions
@@ -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<KtElement>(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())
}
}
}
@@ -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<KtElement>(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")
}
@@ -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)