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 0e5b0fe757d9..a6e086c96e66 100644 --- a/platform/util/src/com/intellij/openapi/util/text/StringUtil.java +++ b/platform/util/src/com/intellij/openapi/util/text/StringUtil.java @@ -2024,13 +2024,25 @@ public class StringUtil extends StringUtilRt { @NotNull @Contract(pure = true) public static CharSequence first(@NotNull CharSequence text, final int length, final boolean appendEllipsis) { - return text.length() > length ? text.subSequence(0, length) + (appendEllipsis ? "..." : "") : text; + if (text.length() <= length) { + return text; + } + if (appendEllipsis) { + return text.subSequence(0, length) + "..."; + } + return text.subSequence(0, length); } @NotNull @Contract(pure = true) public static CharSequence last(@NotNull CharSequence text, final int length, boolean prependEllipsis) { - return text.length() > length ? (prependEllipsis ? "..." : "") + text.subSequence(text.length() - length, text.length()) : text; + if (text.length() <= length) { + return text; + } + if (prependEllipsis) { + return "..." + text.subSequence(text.length() - length, text.length()); + } + return text.subSequence(text.length() - length, text.length()); } @NotNull diff --git a/platform/util/testSrc/com/intellij/util/text/StringUtilTest.java b/platform/util/testSrc/com/intellij/util/text/StringUtilTest.java index ce00eea315c3..f915aeb64856 100644 --- a/platform/util/testSrc/com/intellij/util/text/StringUtilTest.java +++ b/platform/util/testSrc/com/intellij/util/text/StringUtilTest.java @@ -743,4 +743,16 @@ public class StringUtilTest { assertEquals(LineColumn.of(2, 1), StringUtil.offsetToLineColumn("abc\n\nabc", 6)); assertEquals(LineColumn.of(1, 1), StringUtil.offsetToLineColumn("abc\r\nabc", 6)); } + + @Test + public void testFirstLastDontConvertCharSequenceToString() { + CharSequence s = ByteArrayCharSequence.convertToBytesIfAsciiString("test"); + assertTrue(s instanceof ByteArrayCharSequence); + CharSequence first = StringUtil.first(s, 1, false); + assertTrue(String.valueOf(first.getClass()), first instanceof CharSequenceSubSequence); + assertEquals("t", first.toString()); + CharSequence last = StringUtil.last(s, 1, false); + assertTrue(String.valueOf(last.getClass()), last instanceof CharSequenceSubSequence); + assertEquals("t", last.toString()); + } }