public void addToGroup(FGController controller, GroupedFunctionGraphVertex groupVertex,
			Set<FGVertex> groupedVertices) {

		stopAllNonMutativeAnimation();

		// don't include the group to which we are adding in the set to be added
		groupedVertices.remove(groupVertex);

		String currentText = groupVertex.getUserText();
		String defaultText =
			GroupedFunctionGraphVertex.generateGroupVertexDescription(groupVertex.getVertices());
		if (currentText.equals(defaultText)) {
			// the user has not changed the text--generate a new default from all vertices
			// that will be in the group
			HashSet<FGVertex> allGroupedVertices = new HashSet<>(groupedVertices);
			allGroupedVertices.addAll(groupVertex.getVertices());
			currentText =
				GroupedFunctionGraphVertex.generateGroupVertexDescription(allGroupedVertices);
		}

		JComponent viewComponent = controller.getViewComponent();
		String text = promptUserForGroupVertexText(viewComponent, currentText, groupedVertices);
		if (text == null) {
			return; // cancelled
		}

		FGData functionGraphData = controller.getFunctionGraphData();
		FunctionGraph functionGraph = functionGraphData.getFunctionGraph();
		Graph<FGVertex, FGEdge> graph = functionGraph;

		Set<FGEdge> ungroupedEdges = new HashSet<>();
		accumulateUngroupedIncidentEdges(graph, groupedVertices, ungroupedEdges);

		createNewGroupedEdges(controller, groupVertex, ungroupedEdges);

		//
		// Update the existing group with the new vertex/edge data
		//
		GroupedFunctionGraphVertex newGroupVertex =
			groupVertex.derriveGroupVertex(groupedVertices, text, ungroupedEdges);
		swapVertices(controller, groupVertex, newGroupVertex);

		//
		// Create the animator to smooth the process.  The animator will not
		// animate if animation is disabled.
		//
		GroupVertexFunctionGraphJob job = GroupVertexFunctionGraphJob.createUpdateGroupJob(
			controller, newGroupVertex, groupedVertices, isAnimationEnabled());
		scheduleViewChangeJob(job);
	}
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