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