private AttributedGraph createGraph(List<RecoveredClass> recoveredClasses)
			throws CancelledException {

		GraphType graphType =
			new GraphTypeBuilder("Class Hierarchy Graph").vertexType(NO_INHERITANCE)
					.vertexType(SINGLE_INHERITANCE)
					.vertexType(MULTIPLE_INHERITANCE)
					.edgeType(NON_VIRTUAL_INHERITANCE)
					.edgeType(VIRTUAL_INHERITANCE)
					.build();

		AttributedGraph g = new AttributedGraph("Recovered Classes Graph", graphType);

		for (RecoveredClass recoveredClass : recoveredClasses) {
			monitor.checkCancelled();

			AttributedVertex classVertex =
				g.addVertex(recoveredClass.getClassPath().getPath(), recoveredClass.getName());

			Map<RecoveredClass, List<RecoveredClass>> classHierarchyMap =
				recoveredClass.getClassHierarchyMap();

			// no parent = blue vertex
			if (classHierarchyMap.isEmpty()) {
				classVertex.setVertexType(NO_INHERITANCE);
				classVertex.setDescription(recoveredClass.getClassPath().getPath());
				continue;
			}

			Set<RecoveredClass> parents = classHierarchyMap.keySet();

			// single parent = green vertex
			if (parents.size() == 1) {
				classVertex.setVertexType(SINGLE_INHERITANCE);
			}
			// multiple parents = red vertex
			else {
				classVertex.setVertexType(MULTIPLE_INHERITANCE);
			}

			classVertex.setDescription(recoveredClass.getClassPath().getPath());

			Map<RecoveredClass, Boolean> parentToBaseTypeMap =
				recoveredClass.getParentToBaseTypeMap();

			for (RecoveredClass parent : parents) {
				monitor.checkCancelled();
				AttributedVertex parentVertex =
					g.addVertex(parent.getClassPath().getPath(), parent.getName());

				parentVertex.setDescription(parent.getClassPath().getPath());

				AttributedEdge edge = g.addEdge(parentVertex, classVertex);

				Boolean isVirtualParent = parentToBaseTypeMap.get(parent);
				if (isVirtualParent == null) {
					continue;
				}

				// edge between child and parent is orange if child inherits the parent virtually
				if (isVirtualParent) {
					edge.setEdgeType(VIRTUAL_INHERITANCE);
				}
				else {
					edge.setEdgeType(NON_VIRTUAL_INHERITANCE);
				}

			}
		}

		return g;
	}
Method to create a class hierarchy graph where the parents are at the top of the graph and 
the children at the bottom. Classes with no parents have blue nodes. Classes with a single 
parent have green nodes. Classes with multiple parents have red nodes. Classes with virtual 
inheritance have orange edges between parent and child. Classes with non-virtual inheritance 
have lime green edges between parent and child.   
@param recoveredClasses the list of classes
@return a hierarchy graph for the given list of classes
@throws CancelledException if cancelled
Ghidra/Features/Decompiler/ghidra_scripts/RecoverClassesFromRTTIScript.java