private static void processUrls(Project project,
                                  Collection<? extends TreeItem<Pair<AbstractUrl, String>>> urls,
                                  Collection<? super AbstractTreeNode<?>> result, AbstractTreeNode<?> me) {
    for (TreeItem<Pair<AbstractUrl, String>> pair : urls) {
      AbstractUrl abstractUrl = pair.getData().getFirst();
      final Object[] path = abstractUrl.createPath(project);
      if (path == null || path.length < 1 || path[0] == null) {
        continue;
      }
      try {
        ClassLoader loader;
        if (abstractUrl instanceof AbstractUrlFavoriteAdapter) {
          FavoriteNodeProvider provider = ((AbstractUrlFavoriteAdapter)abstractUrl).getNodeProvider();
          loader = provider.getClass().getClassLoader();
        } else {
          loader = FavoritesListNode.class.getClassLoader();
        }
        String className = pair.getData().getSecond();
        @SuppressWarnings("unchecked")
        Class<? extends AbstractTreeNode<?>> nodeClass = (Class<? extends AbstractTreeNode<?>>)loader.loadClass(className);

        AbstractTreeNode<?> node = ProjectViewNode
          .createTreeNode(nodeClass, project, path[path.length - 1], FavoritesManager.getInstance(project).getViewSettings());
        node.setParent(me);
        node.setIndex(result.size());
        result.add(node);

        if (node instanceof ProjectViewNodeWithChildrenList) {
          final List<TreeItem<Pair<AbstractUrl, String>>> children = pair.getChildren();
          if (children != null && !children.isEmpty()) {
            Collection<AbstractTreeNode<?>> childList = new ArrayList<>();
            processUrls(project, children, childList, node);
            for (AbstractTreeNode<?> treeNode : childList) {
              ((ProjectViewNodeWithChildrenList<?>)node).addChild(treeNode);
            }
          }
        }
      }
      catch (Exception e) {
        LOGGER.error(e);
      }
    }
  }
private static void processUrls(Project project,
                                  Collection<? extends TreeItem<Pair<AbstractUrl, String>>> urls,
                                  Collection<? super AbstractTreeNode<?>> result, AbstractTreeNode<?> me)