List<HgAnnotationLine> (List<String> outputLines) { List<HgAnnotationLine> annotations = new ArrayList<>(outputLines.size()); for (String line : outputLines) { Matcher matcher = LINE_PATTERN.matcher(line); if (matcher.matches()) { String user = matcher.group(USER_GROUP).trim(); HgRevisionNumber rev = HgRevisionNumber.getInstance(matcher.group(REVISION_GROUP), matcher.group(CHANGESET_GROUP)); String dateGroup = matcher.group(DATE_GROUP).trim(); SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy", Locale.US); String date = ""; try { date = FileAnnotation.formatDate(dateFormat.parse(dateGroup)); } catch (ParseException e) { LOG.error("Couldn't parse annotation date ", e); } Integer lineNumber = Integer.valueOf(matcher.group(LINE_NUMBER_GROUP)); String content = matcher.group(CONTENT_GROUP); HgAnnotationLine annotationLine = new HgAnnotationLine( user, rev, date, lineNumber, content ); annotations.add(annotationLine); } else { if (LOG.isDebugEnabled()) { LOG.debug("Line does not match blame pattern: " + line); } } } return annotations; }