@Override
  public void uiDataSnapshot(@NotNull DataSink sink) {
    List<ServiceViewItem> selection = getSelectedItems();
    ServiceViewItem onlyItem = ContainerUtil.getOnlyItem(selection);

    sink.set(PlatformCoreDataKeys.HELP_ID,
             ServiceViewManagerImpl.getToolWindowContextHelpId());
    sink.set(PlatformCoreDataKeys.SELECTED_ITEMS,
             ContainerUtil.map2Array(selection, ServiceViewItem::getValue));
    sink.set(PlatformCoreDataKeys.SELECTED_ITEM,
             onlyItem != null ? onlyItem.getValue() : null);
    sink.set(ServiceViewActionProvider.SERVICES_SELECTED_ITEMS, selection);

    ServiceViewContributor<?> contributor = ServiceViewDragHelper.getTheOnlyRootContributor(selection);
    DataProvider delegate = contributor == null ? null : contributor.getViewDescriptor(myProject).getDataProvider();
    DeleteProvider deleteProvider = delegate == null ? null : PlatformDataKeys.DELETE_ELEMENT_PROVIDER.getData(delegate);
    ServiceViewDeleteProvider viewDeleteProvider = new ServiceViewDeleteProvider(this);
    if (deleteProvider == null) {
      sink.set(PlatformDataKeys.DELETE_ELEMENT_PROVIDER, viewDeleteProvider);
    }
    else {
      if (deleteProvider instanceof ServiceViewContributorDeleteProvider o) {
        o.setFallbackProvider(viewDeleteProvider);
      }
      sink.set(PlatformDataKeys.DELETE_ELEMENT_PROVIDER, deleteProvider);
    }
    sink.set(PlatformDataKeys.COPY_PROVIDER, new ServiceViewCopyProvider(this));
    sink.set(ServiceViewActionUtils.CONTRIBUTORS_KEY,
             getModel().getRoots().stream().map(item -> item.getRootContributor()).collect(Collectors.toSet()));
    sink.set(ServiceViewActionUtils.OPTIONS_KEY, myViewOptions);

    List<Navigatable> navigatables = ContainerUtil.mapNotNull(selection, item -> item.getViewDescriptor().getNavigatable());
    sink.set(CommonDataKeys.NAVIGATABLE_ARRAY,
             navigatables.toArray(Navigatable.EMPTY_NAVIGATABLE_ARRAY));

    ServiceViewDescriptor descriptor = onlyItem == null || onlyItem.isRemoved() ? null : onlyItem.getViewDescriptor();
    DataProvider dataProvider = descriptor == null ? null : descriptor.getDataProvider();
    if (dataProvider != null) {
      RecursionManager.doPreventingRecursion(
        this, false, () -> {
          DataSink.uiDataSnapshot(sink, dataProvider);
          return null;
        });
    }
  }
@Override
  public void uiDataSnapshot(@NotNull DataSink sink)