diff --git a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/TestProxyPrinterProvider.java b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/TestProxyPrinterProvider.java index d66162f22810..99f25af521a9 100644 --- a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/TestProxyPrinterProvider.java +++ b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/TestProxyPrinterProvider.java @@ -25,7 +25,7 @@ import com.intellij.openapi.util.text.StringUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.StringTokenizer; +import java.util.*; public final class TestProxyPrinterProvider { @@ -96,18 +96,30 @@ public final class TestProxyPrinterProvider { throw new RuntimeException("Error while applying " + myFilter + " to '"+line+"'", t); } if (result != null) { - for (Filter.ResultItem item : result.getResultItems()) { - defaultPrint(line.substring(0, item.getHighlightStartOffset()), contentType); + List items = sort(result.getResultItems()); + int lastOffset = 0; + for (Filter.ResultItem item : items) { + defaultPrint(line.substring(lastOffset, item.getHighlightStartOffset()), contentType); String linkText = line.substring(item.getHighlightStartOffset(), item.getHighlightEndOffset()); printHyperlink(linkText, item.getHyperlinkInfo()); - defaultPrint(line.substring(item.getHighlightEndOffset()), contentType); + lastOffset = item.getHighlightEndOffset(); } + defaultPrint(line.substring(lastOffset), contentType); } else { defaultPrint(line, contentType); } } + @NotNull + private static List sort(@NotNull List items) { + if (items.size() <= 1) { + return items; + } + List copy = new ArrayList<>(items); + Collections.sort(copy, Comparator.comparingInt(Filter.ResultItem::getHighlightStartOffset)); + return copy; + } } }