public Collection<GhidraBundle> computeAllIfAbsent(Collection<ResourceFile> bundleFiles,
			Function<ResourceFile, GhidraBundle> ctor) {
		writeLock.lock();
		try {
			Set<ResourceFile> newBundleFiles = new HashSet<>(bundleFiles);
			newBundleFiles.removeAll(bundlesByFile.keySet());
			List<GhidraBundle> newBundles =
				newBundleFiles.stream().map(ctor).collect(Collectors.toList());
			addAll(newBundles);
			return newBundles;
		}
		finally {
			writeLock.unlock();
		}
	}
Creates and maps bundles from files in a collection that aren't already mapped.

@param bundleFiles a collection of bundle files
@param ctor a constructor for a GhidraBundle given a bundle file
@return the newly created GhidraBundle objects
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/osgi/BundleMap.java