private static ComponentProvider getComponentProviderFromNode(Object node,
			Class<? extends ComponentProvider> providerClass) {
		Class<?> nodeClass = node.getClass();
		String className = nodeClass.getName();

		if (className.indexOf("ComponentNode") != -1) {
			List<ComponentPlaceholder> infoList = CollectionUtils.asList(
				(List<?>) getInstanceField("windowPlaceholders", node), ComponentPlaceholder.class);
			for (ComponentPlaceholder info : infoList) {
				ComponentProvider provider = info.getProvider();
				if ((provider != null) && providerClass.isAssignableFrom(provider.getClass())) {
					return provider;
				}
			}
		}
		else if (className.indexOf("WindowNode") != -1) {
			Object childNode = getInstanceField("child", node);
			return getComponentProviderFromNode(childNode, providerClass);// recurse
		}
		else if (className.indexOf("SplitNode") != -1) {
			Object leftNode = getInstanceField("child1", node);
			ComponentProvider leftProvider = getComponentProviderFromNode(leftNode, providerClass);// recurse
			if (leftProvider != null) {
				return leftProvider;
			}

			Object rightNode = getInstanceField("child2", node);
			return getComponentProviderFromNode(rightNode, providerClass);// recurse
		}

		return null;
	}
A recursive method to get the first encountered ComponentProvider instance of the give
component provider class.
<p>
Note: this method assumes the given node is not a RootNode, but a child thereof

@param node The <code>Node</code> instance that contains the desired <code>ComponentProvider</code>
       or other nodes.
@param providerClass The <code>ComponentProvider</code> class for which to search.
Ghidra/Framework/Docking/src/main/java/docking/test/AbstractDockingTest.java