From 305bc31b4725c2a7277ff6c5e96e108d14ee7c35 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 25 Jan 2012 14:44:25 +0100 Subject: [PATCH] don't escape already escaped additional characters when escapeSlash is false --- .../util/src/com/intellij/openapi/util/text/StringUtil.java | 4 +++- .../util/testSrc/com/intellij/util/text/StringUtilTest.java | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/platform/util/src/com/intellij/openapi/util/text/StringUtil.java b/platform/util/src/com/intellij/openapi/util/text/StringUtil.java index b765c62fae48..767ed7679ee7 100644 --- a/platform/util/src/com/intellij/openapi/util/text/StringUtil.java +++ b/platform/util/src/com/intellij/openapi/util/text/StringUtil.java @@ -570,6 +570,7 @@ public class StringUtil { @Nullable String additionalChars, boolean escapeSlash, @NotNull @NonNls StringBuilder buffer) { + char prev = 0; for (int idx = 0; idx < length; idx++) { char ch = str.charAt(idx); switch (ch) { @@ -597,7 +598,7 @@ public class StringUtil { if (escapeSlash && ch == '\\') { buffer.append("\\\\"); } - else if (additionalChars != null && additionalChars.indexOf(ch) > -1) { + else if (additionalChars != null && additionalChars.indexOf(ch) > -1 && (escapeSlash || prev != '\\')) { buffer.append("\\").append(ch); } else if (Character.isISOControl(ch)) { @@ -613,6 +614,7 @@ public class StringUtil { buffer.append(ch); } } + prev = ch; } return buffer; } diff --git a/platform/util/testSrc/com/intellij/util/text/StringUtilTest.java b/platform/util/testSrc/com/intellij/util/text/StringUtilTest.java index 84d5b70d8d47..3179e96c3768 100644 --- a/platform/util/testSrc/com/intellij/util/text/StringUtilTest.java +++ b/platform/util/testSrc/com/intellij/util/text/StringUtilTest.java @@ -111,4 +111,10 @@ public class StringUtilTest extends TestCase { public void testTitleCase() { assertEquals("Couldn't Connect to Debugger", StringUtil.wordsToBeginFromUpperCase("Couldn't connect to debugger")); } + + public void testEscapeStringCharacters() { + assertEquals("\\\"\\n", StringUtil.escapeStringCharacters(3, "\\\"\n", "\"", false, new StringBuilder()).toString()); + assertEquals("\\\"\\n", StringUtil.escapeStringCharacters(2, "\"\n", "\"", false, new StringBuilder()).toString()); + assertEquals("\\\\\\\"\\n", StringUtil.escapeStringCharacters(3, "\\\"\n", "\"", true, new StringBuilder()).toString()); + } }