RevisionChangesProvider (@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) return null; Pair<? extends CommittedChangeList, FilePath> pair = changesProvider.getOneList(file, revisionNumber); if (pair == null || pair.getFirst() == null) return null; if (pair.getSecond() == null) return Pair.create(pair.getFirst(), VcsUtil.getFilePath(file)); return pair; }; }