From 616eb7ec4f1b2ac64992e30ef5c7f2d12e36a7fe Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 10 Nov 2016 15:13:41 +0100 Subject: [PATCH] async console filters: detect line removal earlier, allocate less memory (IDEA-163771) --- .../src/com/intellij/execution/impl/AsyncFilterRunner.java | 6 +++--- .../com/intellij/execution/impl/EditorHyperlinkSupport.java | 6 +++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/execution/impl/AsyncFilterRunner.java b/platform/platform-impl/src/com/intellij/execution/impl/AsyncFilterRunner.java index 53fa4cd40fc0..fd67e3707f31 100644 --- a/platform/platform-impl/src/com/intellij/execution/impl/AsyncFilterRunner.java +++ b/platform/platform-impl/src/com/intellij/execution/impl/AsyncFilterRunner.java @@ -135,7 +135,7 @@ class AsyncFilterRunner { List results = new ArrayList<>(); for (LineHighlighter task : tasks) { ProgressManager.checkCanceled(); - if (!marker.isValid()) return FilterResults.EMPTY; + if (!marker.isValid() || marker.getEndOffset() == 0) return FilterResults.EMPTY; ContainerUtil.addIfNotNull(results, task.compute()); } return new FilterResults(markerOffset, marker, results); @@ -146,8 +146,8 @@ class AsyncFilterRunner { private static LineHighlighter processLine(Document document, Filter filter, int line) { int lineEnd = document.getLineEndOffset(line); int endOffset = lineEnd + (lineEnd < document.getTextLength() ? 1 /* for \n */ : 0); - String text = EditorHyperlinkSupport.getLineText(document, line, true); - return () -> checkRange(filter, endOffset, filter.applyFilter(text, endOffset)); + CharSequence text = EditorHyperlinkSupport.getLineSequence(document, line, true); + return () -> checkRange(filter, endOffset, filter.applyFilter(text.toString(), endOffset)); } private static Filter.Result checkRange(Filter filter, int endOffset, Filter.Result result) { diff --git a/platform/platform-impl/src/com/intellij/execution/impl/EditorHyperlinkSupport.java b/platform/platform-impl/src/com/intellij/execution/impl/EditorHyperlinkSupport.java index 2af4e82824e1..ef17f5400686 100644 --- a/platform/platform-impl/src/com/intellij/execution/impl/EditorHyperlinkSupport.java +++ b/platform/platform-impl/src/com/intellij/execution/impl/EditorHyperlinkSupport.java @@ -371,11 +371,15 @@ public class EditorHyperlinkSupport { @NotNull public static String getLineText(@NotNull Document document, int lineNumber, boolean includeEol) { + return getLineSequence(document, lineNumber, includeEol).toString(); + } + + static CharSequence getLineSequence(@NotNull Document document, int lineNumber, boolean includeEol) { int endOffset = document.getLineEndOffset(lineNumber); if (includeEol && endOffset < document.getTextLength()) { endOffset++; } - return document.getImmutableCharSequence().subSequence(document.getLineStartOffset(lineNumber), endOffset).toString(); + return document.getImmutableCharSequence().subSequence(document.getLineStartOffset(lineNumber), endOffset); } private static class HyperlinkInfoTextAttributes extends TextAttributes {