private List<String> generateTitles(List<ComponentPlaceholder> placeholders) {

		//
		// Decompose the given placeholders into a mapping of provider names to placeholders
		// that share that name.  This lets us group placeholders that are multiple instances of
		// the same provider.
		//
		Map<String, List<ComponentPlaceholder>> providerNameToPlacholdersMap =
			new HashMap<>();
		for (ComponentPlaceholder placeholder : placeholders) {
			String providerName = placeholder.getProvider().getName();
			List<ComponentPlaceholder> list = providerNameToPlacholdersMap.get(providerName);
			if (list == null) {
				list = new ArrayList<>();
				providerNameToPlacholdersMap.put(providerName, list);
			}
			list.add(placeholder);
		}

		//
		// Turn the created mapping into a mapping of providers names to sub-titles
		//
		Map<String, List<String>> providerNameToTitlesMap = new HashMap<>();
		Set<Entry<String, List<ComponentPlaceholder>>> entrySet =
			providerNameToPlacholdersMap.entrySet();
		for (Entry<String, List<ComponentPlaceholder>> entry : entrySet) {
			String providerName = entry.getKey();
			List<ComponentPlaceholder> placeholdersList = entry.getValue();
			List<String> titles = new ArrayList<>();
			if (placeholdersList.size() == 1) {
				titles.add(placeholdersList.get(0).getTitle());
			}
			else {
				for (ComponentPlaceholder placeholder : placeholdersList) {
					titles.add(placeholder.getTabText());
				}

			}
			providerNameToTitlesMap.put(providerName, titles);
		}

		//
		// Use the created mapping to create an individual title based on a single provider
		// or a group of providers.
		//
		List<String> finalTitles = new ArrayList<>();
		Set<Entry<String, List<String>>> providersEntrySet = providerNameToTitlesMap.entrySet();
		for (Entry<String, List<String>> entry : providersEntrySet) {
			String providerName = entry.getKey();
			List<String> titles = entry.getValue();
			if (titles.size() == 1) {
				finalTitles.add(titles.get(0));
			}
			else {
				StringBuffer buffy = new StringBuffer(providerName);
				buffy.append(" [ ");
				boolean firstItem = true;
				for (String title : titles) {
					if (!firstItem) {
						buffy.append(", ");
					}
					firstItem = false;

					buffy.append(title);
				}
				buffy.append(" ]");
				finalTitles.add(buffy.toString());
			}
		}

		Collections.sort(finalTitles);
		return finalTitles;
	}
Creates a list of titles from the given component providers and placeholders.  The utility
of this method is that it will group like component providers into one title value
instead of having one value for each placeholder.
Ghidra/Framework/Docking/src/main/java/docking/DetachedWindowNode.java