@Override
 @Nullable
 public VcsRevisionNumber getLineRevisionNumber(int lineNumber) {
   if (lineNumber >= myLines.size() || lineNumber < 0) {
     return null;
   }
   HgAnnotationLine annotationLine = myLines.get(lineNumber);
   return annotationLine.getVcsRevisionNumber();
 }
 @Override
 public String getValue(int lineNumber) {
   if (lineNumber >= myLines.size() || lineNumber < 0) {
     return "";
   }
   HgAnnotationLine annotationLine = myLines.get(lineNumber);
   return myAspectType == FIELD.REVISION
       ? annotationLine.getVcsRevisionNumber().asString()
       : annotationLine.get(myAspectType).toString();
 }
 @Override
 protected void showAffectedPaths(int lineNum) {
   if (lineNum >= 0 && lineNum < myLines.size()) {
     HgAnnotationLine line = myLines.get(lineNum);
     VirtualFile file = myFile.toFilePath().getVirtualFile();
     if (line != null && file != null) {
       ShowAllAffectedGenericAction.showSubmittedFiles(
           myProject, line.getVcsRevisionNumber(), file, HgVcs.getKey());
     }
   }
 }
  @Override
  @Nullable
  public String getToolTip(int lineNumber) {
    if (myLines.size() <= lineNumber || lineNumber < 0) {
      return null;
    }
    HgAnnotationLine info = myLines.get(lineNumber);
    if (info == null) {
      return null;
    }

    for (HgFileRevision revision : myFileRevisions) {
      if (revision.getRevisionNumber().equals(info.getVcsRevisionNumber())) {
        return HgVcsMessages.message(
            "hg4idea.annotation.tool.tip",
            revision.getRevisionNumber().asString(),
            revision.getAuthor(),
            revision.getRevisionDate(),
            revision.getCommitMessage());
      }
    }

    return null;
  }