From 26dc5840f1b014ec153658ea3e4ebd60377db843 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Thu, 22 Mar 2018 11:30:21 +0300 Subject: [PATCH] Fix two exceptions in "Convert concatenation to template So #KT-23045 Fixed So #KT-23045 Fixed --- .../intentions/ConvertToStringTemplateIntention.kt | 13 ++++++------- .../convertToStringTemplate/invalidChar.kt | 2 ++ .../convertToStringTemplate/invalidChar.kt.after | 2 ++ .../idea/intentions/IntentionTestGenerated.java | 6 ++++++ 4 files changed, 16 insertions(+), 7 deletions(-) create mode 100644 idea/testData/intentions/convertToStringTemplate/invalidChar.kt create mode 100644 idea/testData/intentions/convertToStringTemplate/invalidChar.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertToStringTemplateIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertToStringTemplateIntention.kt index 098fe4abb20..6312a25e802 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertToStringTemplateIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertToStringTemplateIntention.kt @@ -87,13 +87,12 @@ open class ConvertToStringTemplateIntention : SelfTargetingOffsetIndependentInte val type = bindingContext.getType(expression)!! if (KotlinBuiltIns.isChar(type)) { - val value = expressionText.removePrefix("'").removeSuffix("'") - return when (value) { // escape double quote and unescape single one and $ - "\"" -> "\\\"" - "\\'" -> "'" - "$" -> if (forceBraces) "\\$" else "$" - else -> value - } + return expressionText + .removePrefix("'") + .removeSuffix("'") + .replace("\"", "\\\"") + .replace("\\'", "'") + .run { if (forceBraces) replace("$", "\\$") else this } } val constant = ConstantExpressionEvaluator.getConstant(expression, bindingContext) diff --git a/idea/testData/intentions/convertToStringTemplate/invalidChar.kt b/idea/testData/intentions/convertToStringTemplate/invalidChar.kt new file mode 100644 index 00000000000..f69901bb678 --- /dev/null +++ b/idea/testData/intentions/convertToStringTemplate/invalidChar.kt @@ -0,0 +1,2 @@ +// DISABLE-ERRORS +val foo = "foo" + ' "' + "bar" + ' ""' \ No newline at end of file diff --git a/idea/testData/intentions/convertToStringTemplate/invalidChar.kt.after b/idea/testData/intentions/convertToStringTemplate/invalidChar.kt.after new file mode 100644 index 00000000000..afa3f51bf89 --- /dev/null +++ b/idea/testData/intentions/convertToStringTemplate/invalidChar.kt.after @@ -0,0 +1,2 @@ +// DISABLE-ERRORS +val foo = "foo \"bar \"\"" \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index ae0699426fc..7330ec85645 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -6858,6 +6858,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("invalidChar.kt") + public void testInvalidChar() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/convertToStringTemplate/invalidChar.kt"); + doTest(fileName); + } + @TestMetadata("kt11295.kt") public void testKt11295() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/convertToStringTemplate/kt11295.kt");