public void activateAll(Collection<GhidraBundle> bundles, TaskMonitor monitor,
			PrintWriter console) {

		BundleDependencyGraph dependencyGraph = new BundleDependencyGraph(bundles, monitor);

		monitor.setMaximum(dependencyGraph.vertexSet().size());
		for (GhidraBundle bundle : dependencyGraph.inTopologicalOrder()) {
			if (monitor.isCancelled()) {
				break;
			}
			try {
				bundle.build(console);
				activateSynchronously(bundle.getLocationIdentifier());
			}
			catch (GhidraBundleException e) {
				// TODO should we report failing bundles to the console as well so they get logged
				// in headless mode?
				fireBundleException(e);
			}
			catch (Exception e) {
				// write the error to the console or log file
				console.println("Unexpected error activating bundle: " + bundle);
				e.printStackTrace(console);
			}
			monitor.incrementProgress(1);
		}
	}
Activate a set of bundles and any dependencies in topological order.  This method doesn't 
rely on the framework, and so will add non-active dependencies.

<p>To load bundles without loading inactive dependencies, call 
{@link #activateInStages(Collection, TaskMonitor, PrintWriter)}.

@param bundles bundles to activate
@param monitor a task monitor
@param console where to write build messages
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/osgi/BundleHost.java