diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/LineLayout.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/LineLayout.java index 277992723bf5..d6bfd103f221 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/LineLayout.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/LineLayout.java @@ -23,6 +23,7 @@ import com.intellij.openapi.editor.highlighter.HighlighterIterator; import com.intellij.openapi.editor.impl.ComplementaryFontsRegistry; import com.intellij.openapi.editor.impl.EditorImpl; import com.intellij.openapi.editor.impl.FontInfo; +import com.intellij.psi.StringEscapesTokenTypes; import com.intellij.psi.tree.IElementType; import com.intellij.util.text.CharArrayUtil; import org.intellij.lang.annotations.JdkConstants; @@ -149,6 +150,8 @@ abstract class LineLayout { private static boolean distinctTokens(@Nullable IElementType token1, @Nullable IElementType token2) { if (token1 == token2) return false; if (token1 == null || token2 == null) return true; + if (StringEscapesTokenTypes.STRING_LITERAL_ESCAPES.contains(token1) || + StringEscapesTokenTypes.STRING_LITERAL_ESCAPES.contains(token2)) return false; if (!token1.getLanguage().is(token2.getLanguage())) return true; BidiRegionsSeparator separator = LanguageBidiRegionsSeparator.INSTANCE.forLanguage(token1.getLanguage()); return separator.createBorderBetweenTokens(token1, token2); diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/EditorRtlTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/EditorRtlTest.java index 2f2c9a00bc64..47805f999b8a 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/EditorRtlTest.java +++ b/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/EditorRtlTest.java @@ -566,6 +566,13 @@ public class EditorRtlTest extends AbstractEditorTest { checkResult("R\tRR"); } + public void testEscapedBackslashInStringLiteral() throws Exception { + prepare("class C {\n String s = \"R\\\\R\";\n}", TestFileType.JAVA); + right(); + right(); + checkResult("class C {\n String s = \"R\\\\R\";\n}"); + } + private void prepareText(String text) throws IOException { prepare(text, TestFileType.TEXT); }