protected Namespace walkNamespace(Namespace parent, String namespace, Address addr, SourceType sourceType,
			Boolean isClass) throws IOException {
		int sep = namespace.indexOf("::");
		if (sep <= 0) {
			return parent;
		}
		String tag = namespace.substring(0, sep);
		if (addr != null) {
			Function func = program.getFunctionManager().getFunctionContaining(addr);
			if (func != null) {
				if (func.getName(true).equals(tag)) {
					return walkNamespace(func, namespace.substring(sep + 2), addr, sourceType, isClass);
				}
			} else if (tag.startsWith("FUN_")) {
				return null; // Defer this until later
			}
		}

		Namespace child = program.getSymbolTable().getNamespace(tag, parent);
		if (child == null) {
			try {
				if (isClass != null && isClass) {
					child = program.getSymbolTable().createClass(parent, tag, sourceType);
				} else {
					child = NamespaceUtils.createNamespaceHierarchy(tag, parent, program, sourceType);
				}
			} catch (InvalidInputException | DuplicateNameException e) {
				throw new IOException("Error creating namespace for " + tag);
			}
		}
		return walkNamespace(child, namespace.substring(sep + 2), addr, sourceType, isClass);
	}
Read results from an SARIF file.

@param result       parsed SARIF results
@param options      for import/export
@param monitor      monitor that can be canceled
@throws AddressFormatException for bad locations
@throws CancelledException if cancelled
Ghidra/Features/Sarif/src/main/java/sarif/managers/SarifMgr.java