void (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); } } }