public void regroupVertices(FGController controller, FGVertex vertex) {

		FGData functionGraphData = controller.getFunctionGraphData();
		FunctionGraph functionGraph = functionGraphData.getFunctionGraph();
		GroupHistoryInfo groupHistory = functionGraph.getGroupHistory(vertex);
		if (groupHistory == null) {
			throw new AssertException("Cannot find group history for regroup operation!");
		}

		Set<FGVertex> vertices = new HashSet<>(groupHistory.getVertices());
		Point2D location = groupHistory.getGroupLocation();
		if (location == null) {
			FGView view = controller.getView();
			VisualizationServer<FGVertex, FGEdge> viewer = view.getPrimaryGraphViewer();
			Rectangle containingBounds =
				GraphViewerUtils.getBoundsForVerticesInLayoutSpace(viewer, vertices);
			location =
				new Point2D.Double(containingBounds.getCenterX(), containingBounds.getCenterY());
		}

		fixupVerticesForUncollapsedGroupMembers(functionGraph, vertices);

		String text = groupHistory.getGroupDescription();
		groupVertices(controller, text, vertices, location, true);
	}
Ungroups all {@link GroupedFunctionGraphVertex group vertices} found in the graph.  This
method is recursive in that it will keep running until no group vertices remain.

@param controller The controller in use with the current function graph
Ghidra/Features/FunctionGraph/src/main/java/ghidra/graph/viewer/FGViewUpdater.java