private @NotNull GitFileAnnotation annotate(@NotNull FilePath filePath,
                                              @Nullable VcsRevisionNumber revision,
                                              @NotNull VirtualFile file) throws VcsException {
    VirtualFile root = GitUtil.getRootForFile(myProject, filePath);

    GitFileAnnotation fileAnnotation;
    if (revision != null) {
      fileAnnotation = getCached(filePath, revision, file);
      if (fileAnnotation == null) {
        fileAnnotation = doAnnotate(root, filePath, revision, file);
        cache(filePath, revision, fileAnnotation);
      }
    }
    else {
      fileAnnotation = doAnnotate(root, filePath, null, file);
    }

    if (fileAnnotation.getRevisions() == null) {
      loadFileHistoryInBackground(fileAnnotation);
      loadCommitMessagesFromLog(root, fileAnnotation);
    }

    return fileAnnotation;
  }
private @NotNull GitFileAnnotation annotate(@NotNull FilePath filePath,
                                              @Nullable VcsRevisionNumber revision,
                                              @NotNull VirtualFile file)