private List<CompositeDefinition> getCompositeDefinitionsInPostDependencyOrder(
			TaskMonitor monitor) {

		GDirectedGraph<CompositeDefinition, GEdge<CompositeDefinition>> graph =
			GraphFactory.createDirectedGraph();
		for (CompositeDefinition compositeDefinition : compositeQueue.values()) {
			graph.addVertex(compositeDefinition);
			for (PdbMember m : compositeDefinition.memberList) {
				String name = m.memberDataTypeName;
				int index = name.indexOf('[');
				if (index > 0) {
					name = name.substring(0, index).trim();
				}
				CompositeDefinition child = compositeQueue.get(name);
				if (child != null) {
					graph.addEdge(new DefaultGEdge<>(compositeDefinition, child));
				}
			}
		}

// FIXME:		GraphAlgorithms.findCircuits(graph, monitor);

		List<CompositeDefinition> verticesInPostOrder =
			GraphAlgorithms.getVerticesInPostOrder(graph, GraphNavigator.topDownNavigator());

		return verticesInPostOrder;
	}
Construct a PDB XML datatype or class parser.  The {@link #preProcessDataTypeList(XmlPullParser, boolean, TaskMonitor)}
method must be used to injest member elements from the pull parser to populate the set of type to be parsed. 
The full parse will not be completed until the {@link #applyTo(TaskMonitor)} method is invoked after all types 
and classes have been pre-processed or applied.
@param pdbParser PDB parser object
@param xmlParser XML parser positioned immediately after datatypes or classes element
@param isClasses true if processing classes, false if composite datatypes
@param log message log used during construction and subsequent method invocations
@throws CancelledException if monitor is cancelled
@throws SAXParseException PDB XML parse failure
Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/ApplyDataTypes.java