private static @Nullable Object getSlowData(@NotNull String dataId, @NotNull List<@NotNull TreeNode> selectedNodes) {
    if (USAGES_KEY.is(dataId)) {
      return selectedUsages(selectedNodes)
        .toArray(n -> n == 0 ? Usage.EMPTY_ARRAY : new Usage[n]);
    }
    if (PlatformCoreDataKeys.PSI_ELEMENT_ARRAY.is(dataId)) {
      return selectedUsages(selectedNodes)
        .filter(usage -> usage instanceof PsiElementUsage)
        .map(usage -> ((PsiElementUsage)usage).getElement())
        .filter(element -> element != null)
        .toArray(PsiElement.ARRAY_FACTORY::create);
    }
    if (CommonDataKeys.VIRTUAL_FILE_ARRAY.is(dataId)) {
      return JBIterable.from(selectedNodes)
        .filterMap(o -> o instanceof UsageNode ? ((UsageNode)o).getUsage() :
                        o instanceof UsageTargetNode ? ((UsageTargetNode)o).getTarget() : null)
        .flatMap(o -> o instanceof UsageInFile ? ContainerUtil.createMaybeSingletonList(((UsageInFile)o).getFile()) :
                      o instanceof UsageInFiles ? Arrays.asList(((UsageInFiles)o).getFiles()) :
                      o instanceof UsageTarget ? Arrays.asList(ObjectUtils.notNull(((UsageTarget)o).getFiles(), VirtualFile.EMPTY_ARRAY)) :
                      Collections.emptyList())
        .filter(VirtualFile::isValid)
        .unique()
        .toArray(VirtualFile.EMPTY_ARRAY);
    }
    return null;
  }
private static @Nullable Object getSlowData(@NotNull String dataId, @NotNull List<@NotNull TreeNode> selectedNodes)