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()); }