private static @NotNull ListSelection<ChangeDiffRequestProducer> loadRequests(@NotNull FileAnnotation fileAnnotation,
                                                                                @NotNull RevisionChangesProvider changesProvider,
                                                                                int actualNumber) throws DiffRequestProducerException {
    try {
      Pair<? extends CommittedChangeList, FilePath> pair = changesProvider.getChangesIn(actualNumber);
      if (pair.getFirst() == null || pair.getSecond() == null) {
        throw new DiffRequestProducerException(VcsBundle.message("show.diff.from.annotation.action.error.can.not.load.data.to.show.diff"));
      }

      FilePath targetPath = pair.getSecond();
      List<Change> changes = ContainerUtil.sorted(pair.getFirst().getChanges(), ChangesComparator.getInstance(true));

      Map<Change, Map<Key<?>, Object>> context = new HashMap<>();
      int idx = findSelfInList(changes, targetPath);
      if (idx != -1) {
        DiffNavigationContext navigationContext = createDiffNavigationContext(fileAnnotation, actualNumber);
        context.put(changes.get(idx), Collections.singletonMap(DiffUserDataKeysEx.NAVIGATION_CONTEXT, navigationContext));
      }

      ListSelection<Change> changeSelection = ListSelection.createAt(changes, idx);
      return changeSelection.map(change -> ChangeDiffRequestProducer.create(fileAnnotation.getProject(), change, context.get(change)));
    }
    catch (VcsException e) {
      throw new DiffRequestProducerException(e);
    }
  }
private static @NotNull ListSelection<ChangeDiffRequestProducer> loadRequests(@NotNull FileAnnotation fileAnnotation,
                                                                                @NotNull RevisionChangesProvider changesProvider,
                                                                                int actualNumber)