@SuppressWarnings("unchecked")
	private void processModule(ProgramModule parent, Map<String, Object> module) {
		String name = (String) module.get("name");
		ProgramModule newModule = null;
		try {
			try {
				newModule = parent.createModule(name);
			} catch (DuplicateNameException dne) {
				newModule = listing.getModule(parent.getTreeName(), name);
				if (newModule == null) {
					Msg.error(this, "Duplicate name for " + name);
					return;
				}
				parent.add(newModule);
			}
		} catch (Exception e) {
			log.appendException(e);
		}
		List<Map<String, Object>> modules = (List<Map<String, Object>>) module.get("modules");
		for (Map<String, Object> m : modules) {
			processModule(newModule, m);
		}
		List<Map<String, Object>> fragments = (List<Map<String, Object>>) module.get("fragments");
		for (Map<String, Object> f : fragments) {
			processFragment(newModule, f);
		}
		removeEmptyFragments(newModule);
	}
Constructor

@param program program
@param log     message log
Ghidra/Features/Sarif/src/main/java/sarif/managers/ProgramTreeSarifMgr.java