From 6981a1110f2dff55f356d47b0c641a8ccd717aa0 Mon Sep 17 00:00:00 2001 From: peter Date: Sat, 5 Mar 2016 10:16:16 +0100 Subject: [PATCH] speed up UrlFilter --- .../src/com/intellij/execution/filters/UrlFilter.java | 2 ++ platform/util/src/com/intellij/util/io/URLUtil.java | 7 +++++++ .../util/testSrc/com/intellij/util/io/UrlUtilTest.java | 9 +++++++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/platform/lang-api/src/com/intellij/execution/filters/UrlFilter.java b/platform/lang-api/src/com/intellij/execution/filters/UrlFilter.java index 0cbe1873c21e..fe8902389050 100644 --- a/platform/lang-api/src/com/intellij/execution/filters/UrlFilter.java +++ b/platform/lang-api/src/com/intellij/execution/filters/UrlFilter.java @@ -32,6 +32,8 @@ public class UrlFilter implements Filter { @Nullable @Override public Result applyFilter(String line, int entireLength) { + if (!URLUtil.canContainUrl(line)) return null; + int textStartOffset = entireLength - line.length(); Matcher m = URLUtil.URL_PATTERN.matcher(line); ResultItem item = null; diff --git a/platform/util/src/com/intellij/util/io/URLUtil.java b/platform/util/src/com/intellij/util/io/URLUtil.java index b0ceb83602b4..8135f815b7be 100644 --- a/platform/util/src/com/intellij/util/io/URLUtil.java +++ b/platform/util/src/com/intellij/util/io/URLUtil.java @@ -47,6 +47,13 @@ public class URLUtil { private URLUtil() { } + /** + * @return if false, then the line contains no URL; if true, then more heavy {@link #URL_PATTERN} check should be used. + */ + public static boolean canContainUrl(@NotNull String line) { + return line.contains("mailto:") || line.contains("://") || line.contains("www."); + } + /** * Opens a url stream. The semantics is the sames as {@link URL#openStream()}. The * separate method is needed, since jar URLs open jars via JarFactory and thus keep them diff --git a/platform/util/testSrc/com/intellij/util/io/UrlUtilTest.java b/platform/util/testSrc/com/intellij/util/io/UrlUtilTest.java index 1c83f14684ed..a2d43c0e54c1 100644 --- a/platform/util/testSrc/com/intellij/util/io/UrlUtilTest.java +++ b/platform/util/testSrc/com/intellij/util/io/UrlUtilTest.java @@ -86,14 +86,19 @@ public class UrlUtilTest { private static void doUrlTest(@NotNull final String line, @Nullable final String expectedUrl) { final Matcher matcher = URLUtil.URL_PATTERN.matcher(line); + boolean found = matcher.find(); if (expectedUrl == null) { - if (matcher.find()) { + if (found) { fail("No URL expected in [" + line + "], detected: " + matcher.group()); } return; } - assertTrue("Expected URL (" + expectedUrl + ") is not detected in [" + line + "]", matcher.find()); + if (!URLUtil.canContainUrl(line) && found) { + fail("canContainUrl returns false for " + line); + } + + assertTrue("Expected URL (" + expectedUrl + ") is not detected in [" + line + "]", found); assertEquals("Text: [" + line + "]", expectedUrl, matcher.group()); }