private void defineClasses(MessageLog log) throws CancelledException {
		// create namespace and classes in an ordered fashion use tree map
		monitor.setMessage("Define classes...");
		monitor.initialize(namespaceMap.size());
		for (SymbolPath path : namespaceMap.keySet()) {
			monitor.checkCancelled();
			boolean isClass = namespaceMap.get(path);
			Namespace parentNamespace =
				NamespaceUtils.getNonFunctionNamespace(program, path.getParent());
			if (parentNamespace == null) {
				String type = isClass ? "class" : "namespace";
				log.appendMsg("PDB", "Failed to define " + type + ": " + path);
				continue;
			}
			defineNamespace(parentNamespace, path.getName(), isClass, log);
			monitor.incrementProgress(1);
		}
		monitor.initialize(100);
	}
Apply PDB debug information to the current program

@param log  MessageLog used to record errors
@throws IOException  if an error occurs during parsing
@throws PdbException  if PDB file has already been loaded
@throws CancelledException  if user cancels the current action
Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/PdbParser.java