private static void recurseNamespace(List<String> parts, MDParsableItem item,
			boolean recurseNested) {
		item = getReferencedType(item);
		String name;
		MDQualification qualification;
		if (item instanceof MDComplexType complexType) {
			MDQualifiedName qualName = complexType.getNamespace();
			name = qualName.getName();
			qualification = qualName.getQualification();
		}
		else if (item instanceof MDObjectCPP objCpp) {
			MDObjectCPP embeddedObj = objCpp.getEmbeddedObject();
			name = embeddedObj.getName();
			qualification = embeddedObj.getQualification();
		}
		else {
			return;
		}

		List<String> myParts = new ArrayList<>();
		// the qualification comes in reverse order... the last is nearest to namespace root
		for (MDQualifier qual : qualification) {
			if (qual.isNested() && recurseNested) {
				MDNestedName nestedName = qual.getNested();
				MDObjectCPP nestedObjCpp = nestedName.getNestedObject();
				List<String> nestedParts = new ArrayList<>();
				recurseNamespace(nestedParts, nestedObjCpp, recurseNested);
				myParts.addAll(0, nestedParts);
			}
			else if (qual.isAnon()) {
				// Instead of using the standard qual.toString() method, which returns
				// "`anonymous namespace'" for anonymous qualifiers, we use qual.getAnonymousName()
				// which will have the underlying anonymous name of the form "A0xfedcba98" to create
				// a standardized anonymous name that is distinguishable from other anonymous names.
				// The standardized name comes from createStandardAnonymousNamespaceNode().  This
				// is especially important when there are sibling anonymous names.
				String anon = createStandardAnonymousNamespaceNode(qual.getAnonymousName());
				myParts.add(0, anon);
			}
			else {
				myParts.add(0, stripTags(qual.toString()));
			}
		}
		myParts.add(stripTags(name));
		parts.addAll(myParts);
	}
Returns a more simple SymbolPath for the demangled item.  Any embedded object found at
the main namespace level will have its namespace components retrieved and inserted
appropriately in the main SymbolPath namespace.  However, embedded objects that are more
deeply placed (such as when used for a template argument) don't and shouldn't take part
in this simplification
@param parsableItem the demangled item
@return the symbol path
Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/MDMangUtils.java