private void createVertexAndEdges(FGController controller,
			Map<AddressHasher, FGVertex> vertexMap, Set<? extends VertexInfo> infos,
			Set<FGVertex> vertices, Set<FGEdge> edges) {
		for (VertexInfo info : infos) {
			FGVertex vertex = info.getVertex(controller, vertexMap);
			if (vertex == null) {
				continue; // can no longer find a vertex with the given info
			}

			vertex = checkForGroupVertex(controller, vertex, info.getVertexLocation());
			if (vertex == null) {
				continue; // couldn't install group vertex
			}

			Set<FGEdge> restoredInEdges = info.getInEdges(controller, vertex);
			if (restoredInEdges == null) {
				continue; // can no longer find the previous edges
			}

			Set<FGEdge> restoredOutEdges = info.getOutEdges(controller, vertex);
			if (restoredOutEdges == null) {
				continue; // can no longer find the previous edges
			}

			vertices.add(vertex);
			edges.addAll(restoredInEdges);
			edges.addAll(restoredOutEdges);
		}
	}
Locates a vertex for the given info <b>without creating that vertex</b>.  This is in 
contrast to {@link #getVertex(FGController, Map)}, which will create a vertex
(and supporting vertices if it is a group).

@param controller the controller of the current graph
@param vertexMap a mapping of hashed addresses to vertices (creating this upfront is more
       efficient when using it over different {@link GroupedVertexInfo} instances.
@return an existing vertex; null if one does not exist
Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/vertex/GroupedVertexInfo.java