From 9c426e70e177a3eed4868318211fcdd468de4e3f Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Thu, 4 Feb 2016 20:47:32 +0300 Subject: [PATCH] Fixed EA-75114 --- .../idea/intentions/ConvertToStringTemplateIntention.kt | 5 +++-- .../convertToStringTemplate/specialCharsInCharLiteral.kt | 3 +++ .../specialCharsInCharLiteral.kt.after | 3 +++ .../kotlin/idea/intentions/IntentionTestGenerated.java | 6 ++++++ 4 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 idea/testData/intentions/convertToStringTemplate/specialCharsInCharLiteral.kt create mode 100644 idea/testData/intentions/convertToStringTemplate/specialCharsInCharLiteral.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 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");