private static @NotNull StructureViewTreeElement createRootNode(@NotNull PsiFile file,
                                                                  @NotNull List<? extends StructureViewComposite.StructureViewDescriptor> views) {
    JBIterable<TreeElement> children = JBIterable.from(views).map(o -> createTreeElementFromView(file, o));
    return new StructureViewTreeElement() {
      @Override
      public Object getValue() {
        return file;
      }

      @Override
      public void navigate(boolean requestFocus) {
        file.navigate(requestFocus);
      }

      @Override
      public boolean canNavigate() {
        return file.canNavigate();
      }

      @Override
      public boolean canNavigateToSource() {
        return file.canNavigateToSource();
      }

      @Override
      public @NotNull ItemPresentation getPresentation() {
        return file.getPresentation();
      }

      @Override
      public TreeElement @NotNull [] getChildren() {
        List<TreeElement> elements = children.toList();
        return elements.toArray(TreeElement.EMPTY_ARRAY);
      }
    };
  }
private static @NotNull StructureViewTreeElement createRootNode(@NotNull PsiFile file,
                                                                  @NotNull List<? extends StructureViewComposite.StructureViewDescriptor> views)