protected GTreeNode getNamespaceNode(GTreeNode parentNode, List<Namespace> namespaces,
			boolean loadChildren, TaskMonitor monitor) {

		if (!loadChildren && !parentNode.isLoaded() || monitor.isCancelled()) {
			return null;
		}

		if (namespaces.isEmpty()) {
			return null;
		}

		Namespace namespace = namespaces.remove(0);
		Symbol nsSymbol = namespace.getSymbol();
		SymbolNode key = SymbolNode.createKeyNode(nsSymbol, nsSymbol.getName(), program);
		GTreeNode namespaceNode = findNode(parentNode, key, loadChildren, monitor);
		if (namespaceNode == null || namespaces.isEmpty()) {
			return namespaceNode; // we hit the last namespace
		}

		// move to the next namespace
		return getNamespaceNode(namespaceNode, namespaces, loadChildren, monitor);
	}
Returns the last Namespace tree node in the given path of namespaces.  Each Namespace in the
list from 0 to n will be used to find the last tree node, starting at the given parent
node. 

@param parentNode the node at which to start the search
@param namespaces the list of namespaces to traverse.
@param loadChildren true to load children if they have not been loaded
@param monitor the task monitor
@return the namespace node or null if it is not open in the tree
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/SymbolCategoryNode.java