diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java index 82569b97d91f..7324f7bbcb4b 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java @@ -707,7 +707,7 @@ public class StubBuildingVisitor extends ClassVisitor { } if (value instanceof Character) { - return "'" + value.toString() + "'"; + return "'" + StringUtil.escapeCharCharacters(value.toString()) + "'"; } if (value instanceof Long) { @@ -720,7 +720,8 @@ public class StubBuildingVisitor extends ClassVisitor { if (value.equals(1)) return "true"; } if ("char".equals(type)) { - return "'" + ((char)((Integer)value).intValue()) + "'"; + char ch = (char)((Integer)value).intValue(); + return "'" + StringUtil.escapeCharCharacters(String.valueOf(ch)) + "'"; } return value.toString(); } diff --git a/java/java-tests/testData/psi/cls/mirror/Primitives.txt b/java/java-tests/testData/psi/cls/mirror/Primitives.txt index 37887d7110fa..4eb6750d0451 100644 --- a/java/java-tests/testData/psi/cls/mirror/Primitives.txt +++ b/java/java-tests/testData/psi/cls/mirror/Primitives.txt @@ -8,7 +8,7 @@ class Primitives { public static final boolean TRUE = true; public static final boolean FALSE = false; public static final byte BYTE = 1; - public static final char CHAR = 'c'; + public static final char CHAR = '\''; public static final short SHORT = 42; public static final int INT = 42; public static final long LONG = 42L; @@ -22,7 +22,7 @@ class Primitives { public static boolean FALSE() { /* compiled code */ } @pkg.ByteAnno(1) - @pkg.CharAnno('c') + @pkg.CharAnno('\\') @pkg.ShortAnno(42) @pkg.IntAnno(42) @pkg.LongAnno(42L) diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/Primitives.class b/java/java-tests/testData/psi/cls/mirror/pkg/Primitives.class index fe1c7fd786c2..1e2d9f0a17ff 100644 Binary files a/java/java-tests/testData/psi/cls/mirror/pkg/Primitives.class and b/java/java-tests/testData/psi/cls/mirror/pkg/Primitives.class differ diff --git a/java/java-tests/testData/psi/cls/mirror/src/pkg/Primitives.java b/java/java-tests/testData/psi/cls/mirror/src/pkg/Primitives.java index fbdf2a82090b..4ffcf4ae3634 100644 --- a/java/java-tests/testData/psi/cls/mirror/src/pkg/Primitives.java +++ b/java/java-tests/testData/psi/cls/mirror/src/pkg/Primitives.java @@ -8,12 +8,12 @@ class Primitives { @BooleanAnno(false) public static boolean FALSE() { return FALSE; } public static final byte BYTE = 1; - public static final char CHAR = 'c'; + public static final char CHAR = '\''; public static final short SHORT = 42; public static final int INT = 42; public static final long LONG = 42L; - @ByteAnno(1) @CharAnno('c') @ShortAnno(42) @IntAnno(42) @LongAnno(42L) + @ByteAnno(1) @CharAnno('\\') @ShortAnno(42) @IntAnno(42) @LongAnno(42L) public static void m() { } } 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 eb99bbd45c57..225a51f3214c 100644 --- a/platform/util/src/com/intellij/openapi/util/text/StringUtil.java +++ b/platform/util/src/com/intellij/openapi/util/text/StringUtil.java @@ -536,10 +536,16 @@ public class StringUtil extends StringUtilRt { @NotNull public static String escapeStringCharacters(@NotNull String s) { StringBuilder buffer = new StringBuilder(s.length()); - escapeStringCharacters(s.length(), s, buffer); + escapeStringCharacters(s.length(), s, "\"", buffer); return buffer.toString(); } + @NotNull + public static String escapeCharCharacters(@NotNull String s) { + StringBuilder buffer = new StringBuilder(s.length()); + escapeStringCharacters(s.length(), s, "\'", buffer); + return buffer.toString(); + } @NotNull public static String unescapeStringCharacters(@NotNull String s) {