@Nullable
  private static RevisionChangesProvider createDefaultRevisionsChangesProvider(@NotNull FileAnnotation annotation) {
    VirtualFile file = annotation.getFile();
    if (file == null) return null;

    AbstractVcs vcs = ProjectLevelVcsManager.getInstance(annotation.getProject()).getVcsFor(file);
    if (vcs == null) return null;

    CommittedChangesProvider<?, ?> changesProvider = vcs.getCommittedChangesProvider();
    if (changesProvider == null) return null;

    return (lineNumber) -> {
      VcsRevisionNumber revisionNumber = annotation.getLineRevisionNumber(lineNumber);
      if (revisionNumber == null) {
        throw new IllegalArgumentException(VcsBundle.message("error.annotated.line.out.of.bounds", lineNumber, annotation.getLineCount()));
      }

      Pair<? extends CommittedChangeList, FilePath> pair = changesProvider.getOneList(file, revisionNumber);
      if (pair == null || pair.getFirst() == null) {
        throw new VcsException(VcsBundle.message("error.cant.load.affected.files", file.getPath(), revisionNumber.asString()));
      }
      if (pair.getSecond() == null) return Pair.create(pair.getFirst(), VcsUtil.getFilePath(file));

      return pair;
    };
  }
@Nullable
  private static RevisionChangesProvider createDefaultRevisionsChangesProvider(@NotNull FileAnnotation annotation)