protected void visitResource(@Nonnull WorkspaceResource resource) {
		ResourcePathNode resourcePath = rootPath.child(resource);
		resource.classBundleStream().forEach(bundle -> visitClasses(resourcePath, bundle));
		resource.fileBundleStream().forEach(bundle -> visitFiles(resourcePath, bundle));

		// Create sub-trees for embedded resources
		Map<String, WorkspaceFileResource> embeddedResources = resource.getEmbeddedResources();
		if (!embeddedResources.isEmpty()) {
			EmbeddedResourceContainerPathNode containerPath = resourcePath.embeddedChildContainer();
			embeddedResources.entrySet().stream() // Insert in sorted order of path name
					.sorted((o1, o2) -> CaseInsensitiveSimpleNaturalComparator.getInstance().compare(o1.getKey(), o2.getKey()))
					.map(Map.Entry::getValue)
					.forEach(embeddedResource -> {
						ResourcePathNode resourcePathEmbedded = containerPath.child(embeddedResource);
						embeddedResource.classBundleStream().forEach(bundle -> visitClasses(resourcePathEmbedded, bundle));
						embeddedResource.fileBundleStream().forEach(bundle -> visitFiles(resourcePathEmbedded, bundle));
					});
		}
	}
Adds the given resource to the tree.
All paths to items contained by the resource are generated <i>(classes, files, etc)</i>.

@param resource
		Resource to add to the tree.
recaf-ui/src/main/java/software/coley/recaf/ui/control/tree/WorkspaceRootTreeNode.java