diff --git a/java/java-impl/src/com/intellij/codeInsight/editorActions/TextBlockJoinLinesHandler.java b/java/java-impl/src/com/intellij/codeInsight/editorActions/TextBlockJoinLinesHandler.java index fc4806ff1f44..f95cf35e11b2 100644 --- a/java/java-impl/src/com/intellij/codeInsight/editorActions/TextBlockJoinLinesHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/editorActions/TextBlockJoinLinesHandler.java @@ -56,16 +56,17 @@ public final class TextBlockJoinLinesHandler implements JoinRawLinesHandlerDeleg boolean fromStartTillEnd = atStartLine && tokenType.equals(JavaTokenType.TEXT_BLOCK_LITERAL) && doc.getLineNumber(tokenRange.getEndOffset()) == lineNumber + 1 && token.getText().endsWith("\"\"\""); + int endOffset = tokenRange.getEndOffset(); if (singleSlash || atEmptyStartLine) { doc.deleteString(start, end); - end = start; + endOffset += start - end; } else { doc.replaceString(start, end, "\\n"); - end = start + 2; + endOffset += start - end + 2; } if (fromStartTillEnd) { - doc.replaceString(tokenRange.getStartOffset(), end + 3, - convertToRegular(doc.getText().substring(tokenRange.getStartOffset(), end + 3))); + doc.replaceString(tokenRange.getStartOffset(), endOffset, + convertToRegular(doc.getText().substring(tokenRange.getStartOffset(), endOffset))); } return start; } diff --git a/java/java-tests/testData/codeInsight/joinLines/JoinTextBlockAtStartLineComplete2.java b/java/java-tests/testData/codeInsight/joinLines/JoinTextBlockAtStartLineComplete2.java new file mode 100644 index 000000000000..dceadb5e3163 --- /dev/null +++ b/java/java-tests/testData/codeInsight/joinLines/JoinTextBlockAtStartLineComplete2.java @@ -0,0 +1,7 @@ +class A { + void test() { + String s = """ + Line1 + Line2"""; + } +} diff --git a/java/java-tests/testData/codeInsight/joinLines/JoinTextBlockAtStartLineComplete2_after.java b/java/java-tests/testData/codeInsight/joinLines/JoinTextBlockAtStartLineComplete2_after.java new file mode 100644 index 000000000000..8ca52ffda66f --- /dev/null +++ b/java/java-tests/testData/codeInsight/joinLines/JoinTextBlockAtStartLineComplete2_after.java @@ -0,0 +1,5 @@ +class A { + void test() { + String s = "Line1\nLine2"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/JoinLinesTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/JoinLinesTest.java index af71394608d4..e5d34fb6c699 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/JoinLinesTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/JoinLinesTest.java @@ -303,6 +303,7 @@ public class JoinLinesTest extends LightJavaCodeInsightTestCase { public void testJoinTextBlockAtStartLineNonEmpty() {doTest();} public void testJoinTextBlockAtStartLineFinalStep() {doTest();} public void testJoinTextBlockAtStartLineComplete() {doTest();} + public void testJoinTextBlockAtStartLineComplete2() {doTest();} public void testJoinTextBlockAtStartLineCompleteWithEscapes() {doTest();} public void testJoinTextBlockBackSlash() {doTest();} public void testJoinTextBlockBackSlash2() {doTest();}