@Override
  public void uiDataSnapshot(@NotNull DataSink sink) {
    Change change = getSelectedChange();
    if (change != null) {
      Change[] changes = {change};
      sink.set(VcsDataKeys.CHANGES, changes);
      sink.set(VcsDataKeys.SELECTED_CHANGES, changes);
    }
    sink.set(VcsLogInternalDataKeys.LOG_UI_PROPERTIES, myProperties);
    sink.set(VcsDataKeys.FILE_PATH, myFilePath);
    sink.set(VcsLogInternalDataKeys.VCS_LOG_VISIBLE_ROOTS, Collections.singleton(myRoot));
    sink.set(VcsDataKeys.VCS_NON_LOCAL_HISTORY_SESSION, false);
    sink.set(VcsLogInternalDataKeys.LOG_DIFF_HANDLER, myFileHistoryModel.getDiffHandler());
    sink.set(EditorTabDiffPreviewManager.EDITOR_TAB_DIFF_PREVIEW, myEditorDiffPreview);
    sink.set(VcsLogInternalDataKeys.FILE_HISTORY_MODEL, myFileHistoryModel.createSnapshot());
    sink.set(QuickActionProvider.KEY, new ComponentQuickActionProvider(this));
    sink.set(PlatformCoreDataKeys.HELP_ID, HELP_ID);
    sink.set(History.KEY, myHistory);

    List<VcsCommitMetadata> details = myGraphTable.getSelection().getCachedMetadata();
    FileHistoryModel model = myFileHistoryModel.createSnapshot();
    sink.lazy(VcsDataKeys.VCS_FILE_REVISION, () -> {
      if (details.isEmpty()) return null;
      return model.createRevision(getFirstItem(details));
    });
    sink.lazy(VcsDataKeys.VCS_FILE_REVISIONS, () -> {
      if (details.isEmpty() || details.size() > VcsLogUtil.MAX_SELECTED_COMMITS) return null;
      return ContainerUtil.mapNotNull(details, model::createRevision).toArray(new VcsFileRevision[0]);
    });
    sink.lazy(CommonDataKeys.VIRTUAL_FILE, myFilePath::getVirtualFile);
    sink.lazy(VcsDataKeys.VCS_VIRTUAL_FILE, () -> {
      if (details.isEmpty()) return null;
      VcsCommitMetadata detail = Objects.requireNonNull(getFirstItem(details));
      return FileHistoryUtil.createVcsVirtualFile(model.createRevision(detail));
    });
  }
@Override
  public void uiDataSnapshot(@NotNull DataSink sink)