From 7e417272b2bfd6c89f9f6cc0377c6f6e0a378fa2 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Thu, 25 Jan 2018 23:54:21 +0900 Subject: [PATCH] "Join lines" works incorrectly in case of line containing more than one string literal (KT-22374) #KT-22374 Fixed --- .../kotlin/idea/joinLines/JoinToStringTemplateHandler.kt | 4 +++- idea/testData/joinLines/stringTemplate/threeLines2.kt | 5 +++++ idea/testData/joinLines/stringTemplate/threeLines2.kt.after | 4 ++++ .../intentions/declarations/JoinLinesTestGenerated.java | 6 ++++++ 4 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 idea/testData/joinLines/stringTemplate/threeLines2.kt create mode 100644 idea/testData/joinLines/stringTemplate/threeLines2.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/joinLines/JoinToStringTemplateHandler.kt b/idea/src/org/jetbrains/kotlin/idea/joinLines/JoinToStringTemplateHandler.kt index 42c714d4b7a..58a9ec22fd9 100644 --- a/idea/src/org/jetbrains/kotlin/idea/joinLines/JoinToStringTemplateHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/joinLines/JoinToStringTemplateHandler.kt @@ -49,7 +49,9 @@ class JoinToStringTemplateHandler : JoinRawLinesHandlerDelegate { var rightText = ConvertToStringTemplateIntention.buildText(binaryExpr.right, false) var left = binaryExpr.left - while (left is KtBinaryExpression && left.joinable() && left.parent.getLineCount() >= lineCount) { + while (left is KtBinaryExpression && left.joinable()) { + val leftLeft = (left as? KtBinaryExpression)?.left ?: break + if (leftLeft.lineCount() < lineCount) break rightText = ConvertToStringTemplateIntention.buildText(left.right, false) + rightText left = left.left } diff --git a/idea/testData/joinLines/stringTemplate/threeLines2.kt b/idea/testData/joinLines/stringTemplate/threeLines2.kt new file mode 100644 index 00000000000..ead65e6ff41 --- /dev/null +++ b/idea/testData/joinLines/stringTemplate/threeLines2.kt @@ -0,0 +1,5 @@ +fun test() { + val s = "1" + + "2" + + "3" +} \ No newline at end of file diff --git a/idea/testData/joinLines/stringTemplate/threeLines2.kt.after b/idea/testData/joinLines/stringTemplate/threeLines2.kt.after new file mode 100644 index 00000000000..cfc9208a01f --- /dev/null +++ b/idea/testData/joinLines/stringTemplate/threeLines2.kt.after @@ -0,0 +1,4 @@ +fun test() { + val s = "1" + + "23" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/declarations/JoinLinesTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/declarations/JoinLinesTestGenerated.java index b04df438544..2132942ed11 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/declarations/JoinLinesTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/declarations/JoinLinesTestGenerated.java @@ -458,5 +458,11 @@ public class JoinLinesTestGenerated extends AbstractJoinLinesTest { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/joinLines/stringTemplate/threeLines.kt"); doTest(fileName); } + + @TestMetadata("threeLines2.kt") + public void testThreeLines2() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/joinLines/stringTemplate/threeLines2.kt"); + doTest(fileName); + } } }