private ComponentPlaceholder findBestUnusedPlaceholder(
			Set<ComponentPlaceholder> unusedPlaceholders, ComponentProvider provider) {

		String name = provider.getName();
		String windowGroup = provider.getWindowGroup();
		boolean isInvalid = windowGroup == null || windowGroup.trim().isEmpty();

		String group = isInvalid ? ComponentProvider.DEFAULT_WINDOW_GROUP : windowGroup;

		// look for a match based on name and title, first prefer a visible one.
		String title = provider.getTitle();
		for (ComponentPlaceholder placeholder : unusedPlaceholders) {
			if (placeholder.wantsToBeShowing() && name.equals(placeholder.getName()) &&
				title.equals(placeholder.getTitle())) {
				return placeholder;
			}
		}

		// look for a match based upon name and title, now accept one that is not showing.
		for (ComponentPlaceholder placeholder : unusedPlaceholders) {
			if (name.equals(placeholder.getName()) && title.equals(placeholder.getTitle())) {
				return placeholder;
			}
		}

		// look for a "close enough" match (same name and group)
		for (ComponentPlaceholder placeholder : unusedPlaceholders) {
			if (name.equals(placeholder.getName()) && group.equals(placeholder.getGroup())) {
				return placeholder;
			}
		}

		return null;
	}
Look for placeholder with the same name and group.  If such a placeholder exists, then
there is already at least one instance of this provider showing and we will stack the
new provider on top of this one, ignoring any windowing positioning specified by the new
provider.
@param activePlaceholders the set of currently showing placeholders.
@param newInfo the placeholder for the new provider to be shown.
@return an existing matching placeholder or null.
Ghidra/Framework/Docking/src/main/java/docking/PlaceholderManager.java