@Nonnull
	default Stream<ClassPathNode> jvmClassesStream(boolean includeInternal) {
		return allResourcesStream(includeInternal)
				.flatMap(resource -> {
					Function<WorkspaceResource, Stream<ClassPathNode>> streamBuilder = res -> {
						Stream<ClassPathNode> stream = null;
						List<JvmClassBundle> bundles = new ArrayList<>();
						bundles.add(res.getJvmClassBundle());
						bundles.addAll(res.getVersionedJvmClassBundles().values());
						for (JvmClassBundle bundle : bundles) {
							BundlePathNode bundlePath = PathNodes.bundlePath(this, res, bundle);
							Stream<ClassPathNode> localStream = bundle.values()
									.stream()
									.map(cls -> bundlePath.child(cls.getPackageName()).child(cls));
							if (stream == null) stream = localStream;
							else stream = Stream.concat(stream, localStream);
						}
						return stream;
					};
					Stream<ClassPathNode> stream = streamBuilder.apply(resource);

					// Visit embedded resources
					Queue<WorkspaceFileResource> embeddedResources = new ArrayDeque<>(resource.getEmbeddedResources().values());
					while (!embeddedResources.isEmpty()) {
						WorkspaceFileResource embeddedResource = embeddedResources.remove();
						stream = Stream.concat(stream, streamBuilder.apply(embeddedResource));
						embeddedResources.addAll(embeddedResource.getEmbeddedResources().values());
					}

					return stream;
				});
	}
@param includeInternal
		Flag to include internal supporting resources.

@return Stream of JVM classes.
recaf-core/src/main/java/software/coley/recaf/workspace/model/Workspace.java