@Override
  public Result applyFilter(@NotNull String line, int entireLength) {
    Matcher matcher = myPattern.matcher(StringUtil.newBombedCharSequence(line, 100));
    try {
      if (!matcher.find()) {
        return null;
      }
    }
    catch (ProcessCanceledException e) {
      if (LOG.isDebugEnabled()) {
        LOG.debug("Too long matching '" + line + "' by '" + myPattern + "' in " + getClass().getName());
      }
      return null; 
    }

    String filePath = matcher.group(FILE_STR);
    if (filePath == null) {
      return null;
    }

    String lineNumber = "0";
    if (myHasLine) {
      lineNumber = matcher.group(LINE_STR);
    }

    String columnNumber = "0";
    if (myHasColumn) {
      columnNumber = matcher.group(COLUMN_STR);
    }

    int line1 = 0;
    int column = 0;
    try {
      line1 = Integer.parseInt(lineNumber);
      column = Integer.parseInt(columnNumber);
    }
    catch (NumberFormatException e) {
      // Do nothing, so that line and column will remain at their initial zero values.
    }

    if (line1 > 0) line1 -= 1;
    if (column > 0) column -= 1;
    // Calculate the offsets relative to the entire text.
    final int highlightStartOffset = entireLength - line.length() + matcher.start(FILE_STR);
    final int highlightEndOffset = highlightStartOffset + filePath.length();
    final HyperlinkInfo info = createOpenFileHyperlink(filePath, line1, column);
    return new Result(highlightStartOffset, highlightEndOffset, info);
  }
@Override
  public Result applyFilter(@NotNull String line, int entireLength)