mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[kotlin] Port ConvertIllegalEscapeToUnicodeEscapeFix to K2
^KTIJ-29491 GitOrigin-RevId: 107ccafe043f1fb722b2d0f7c7abf5e10af972fb
This commit is contained in:
committed by
intellij-monorepo-bot
parent
d3b0d87533
commit
e2d83e9a03
+18
@@ -0,0 +1,18 @@
|
||||
// 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.k2.codeinsight.fixes
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.fir.diagnostics.KaFirDiagnostic
|
||||
import org.jetbrains.kotlin.idea.codeinsight.api.applicators.fixes.KotlinQuickFixFactory
|
||||
import org.jetbrains.kotlin.idea.quickfix.ConvertIllegalEscapeToUnicodeEscapeFix
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
|
||||
internal object IllegalEscapeFixFactory {
|
||||
|
||||
val convertToUnicodeEscape = KotlinQuickFixFactory.ModCommandBased { diagnostic: KaFirDiagnostic.IllegalEscape ->
|
||||
val element = diagnostic.psi as? KtElement ?: return@ModCommandBased emptyList()
|
||||
|
||||
listOfNotNull(
|
||||
ConvertIllegalEscapeToUnicodeEscapeFix.createIfApplicable(element)
|
||||
)
|
||||
}
|
||||
}
|
||||
+1
@@ -131,6 +131,7 @@ class KotlinK2QuickFixRegistrar : KotlinQuickFixRegistrar() {
|
||||
registerFactory(TypeVarianceConflictErrorFixFactory.removeTypeVariance)
|
||||
registerFactory(FinalUpperBoundFixFactory.removeFinalUpperBound)
|
||||
registerFactory(WrongAnnotationTargetWithUseSiteTargetFixFactory.moveReceiverAnnotation)
|
||||
registerFactory(IllegalEscapeFixFactory.convertToUnicodeEscape)
|
||||
}
|
||||
|
||||
private val addAbstract = KtQuickFixesListBuilder.registerPsiQuickFix {
|
||||
|
||||
+22
@@ -6901,7 +6901,29 @@ public abstract class HighLevelQuickFixTestGenerated extends AbstractHighLevelQu
|
||||
}
|
||||
}
|
||||
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
@TestMetadata("../../../idea/tests/testData/quickfix/convertIllegalEscapeToUnicodeEscape")
|
||||
public static class ConvertIllegalEscapeToUnicodeEscape extends AbstractHighLevelQuickFixTest {
|
||||
@java.lang.Override
|
||||
@org.jetbrains.annotations.NotNull
|
||||
public final KotlinPluginMode getPluginMode() {
|
||||
return KotlinPluginMode.K2;
|
||||
}
|
||||
|
||||
private void runTest(String testDataFilePath) throws Exception {
|
||||
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
|
||||
}
|
||||
|
||||
@TestMetadata("formFeed.kt")
|
||||
public void testFormFeed() throws Exception {
|
||||
runTest("../../../idea/tests/testData/quickfix/convertIllegalEscapeToUnicodeEscape/formFeed.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("formFeedInStringTemplate.kt")
|
||||
public void testFormFeedInStringTemplate() throws Exception {
|
||||
runTest("../../../idea/tests/testData/quickfix/convertIllegalEscapeToUnicodeEscape/formFeedInStringTemplate.kt");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
+16
-1
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.KtEscapeStringTemplateEntry
|
||||
import org.jetbrains.kotlin.psi.KtPsiFactory
|
||||
|
||||
class ConvertIllegalEscapeToUnicodeEscapeFix(
|
||||
class ConvertIllegalEscapeToUnicodeEscapeFix private constructor(
|
||||
element: KtElement,
|
||||
private val unicodeEscape: String
|
||||
) : KotlinPsiUpdateModCommandAction.ElementBased<KtElement, Unit>(element, Unit) {
|
||||
@@ -29,4 +29,19 @@ class ConvertIllegalEscapeToUnicodeEscapeFix(
|
||||
is KtEscapeStringTemplateEntry -> element.replace(psiFactory.createStringTemplate(unicodeEscape).entries.first())
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun createIfApplicable(element: KtElement): ConvertIllegalEscapeToUnicodeEscapeFix? {
|
||||
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")
|
||||
+1
-9
@@ -8,14 +8,6 @@ import org.jetbrains.kotlin.psi.*
|
||||
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).asIntention()
|
||||
return ConvertIllegalEscapeToUnicodeEscapeFix.createIfApplicable(element)?.asIntention()
|
||||
}
|
||||
|
||||
private val illegalEscapeToUnicodeEscape = mapOf("\\f" to "\\u000c")
|
||||
}
|
||||
|
||||
+2
-1
@@ -1,3 +1,4 @@
|
||||
// "Convert to unicode escape" "true"
|
||||
val c = '<caret>\f'
|
||||
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertIllegalEscapeToUnicodeEscapeFix
|
||||
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertIllegalEscapeToUnicodeEscapeFix
|
||||
// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertIllegalEscapeToUnicodeEscapeFix
|
||||
+2
-1
@@ -1,3 +1,4 @@
|
||||
// "Convert to unicode escape" "true"
|
||||
val c = '\u000c'
|
||||
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertIllegalEscapeToUnicodeEscapeFix
|
||||
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertIllegalEscapeToUnicodeEscapeFix
|
||||
// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertIllegalEscapeToUnicodeEscapeFix
|
||||
+2
-1
@@ -1,3 +1,4 @@
|
||||
// "Convert to unicode escape" "true"
|
||||
val s = "abc <caret>\f xyz"
|
||||
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertIllegalEscapeToUnicodeEscapeFix
|
||||
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertIllegalEscapeToUnicodeEscapeFix
|
||||
// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertIllegalEscapeToUnicodeEscapeFix
|
||||
+2
-1
@@ -1,3 +1,4 @@
|
||||
// "Convert to unicode escape" "true"
|
||||
val s = "abc \u000c xyz"
|
||||
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertIllegalEscapeToUnicodeEscapeFix
|
||||
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertIllegalEscapeToUnicodeEscapeFix
|
||||
// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertIllegalEscapeToUnicodeEscapeFix
|
||||
+1
-1
@@ -103,7 +103,7 @@ internal fun MutableTWorkspace.generateK2FixTests() {
|
||||
model("$idea/quickfix/changeToUseSpreadOperator", pattern = pattern)
|
||||
model("$idea/quickfix/compilerError", pattern = pattern, isIgnored = true)
|
||||
model("$idea/quickfix/convertCollectionLiteralToIntArrayOf", pattern = pattern)
|
||||
model("$idea/quickfix/convertIllegalEscapeToUnicodeEscape", pattern = pattern, isIgnored = true)
|
||||
model("$idea/quickfix/convertIllegalEscapeToUnicodeEscape", pattern = pattern)
|
||||
model("$idea/quickfix/convertJavaInterfaceToClass", pattern = pattern, isIgnored = true)
|
||||
model("$idea/quickfix/convertLateinitPropertyToNotNullDelegate", pattern = pattern)
|
||||
model("$idea/quickfix/convertPropertyInitializerToGetter", pattern = pattern, isIgnored = true)
|
||||
|
||||
Reference in New Issue
Block a user