diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertToStringTemplateIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertToStringTemplateIntention.kt index 5d09bcc0d17..117edd5206e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertToStringTemplateIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertToStringTemplateIntention.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.idea.inspections.IntentionBasedInspection import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class ConvertToStringTemplateInspection : IntentionBasedInspection( ConvertToStringTemplateIntention(), @@ -86,9 +87,9 @@ class ConvertToStringTemplateIntention : SelfTargetingOffsetIndependentIntention val expressionText = expression.text return when (expression) { is KtConstantExpression -> { - val bindingContext = expression.analyze() + val bindingContext = expression.analyze(BodyResolveMode.PARTIAL) val constant = ConstantExpressionEvaluator.getConstant(expression, bindingContext) - constant?.getValue(bindingContext.getType(expression)!!).toString() + StringUtil.escapeStringCharacters(constant?.getValue(bindingContext.getType(expression)!!).toString()) } is KtStringTemplateExpression -> { diff --git a/idea/testData/intentions/convertToStringTemplate/specialCharsInCharLiteral.kt b/idea/testData/intentions/convertToStringTemplate/specialCharsInCharLiteral.kt new file mode 100644 index 00000000000..95b8d7e5682 --- /dev/null +++ b/idea/testData/intentions/convertToStringTemplate/specialCharsInCharLiteral.kt @@ -0,0 +1,3 @@ +fun foo(p1: Int, p2: Int, p3: Int) { + val v = "a" + p1 + '\n' + p2 + '\r' + p3 + '\t' +} diff --git a/idea/testData/intentions/convertToStringTemplate/specialCharsInCharLiteral.kt.after b/idea/testData/intentions/convertToStringTemplate/specialCharsInCharLiteral.kt.after new file mode 100644 index 00000000000..0e12f6f4a31 --- /dev/null +++ b/idea/testData/intentions/convertToStringTemplate/specialCharsInCharLiteral.kt.after @@ -0,0 +1,3 @@ +fun foo(p1: Int, p2: Int, p3: Int) { + val v = "a$p1\n$p2\r$p3\t" +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index 090be6de978..5d1461910d7 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -4693,6 +4693,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("specialCharsInCharLiteral.kt") + public void testSpecialCharsInCharLiteral() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/convertToStringTemplate/specialCharsInCharLiteral.kt"); + doTest(fileName); + } + @TestMetadata("tricky.kt") public void testTricky() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/convertToStringTemplate/tricky.kt");