public WComponent getExpandedTreeNodeRenderer(final Class<? extends WComponent> rendererClass) {
		if (rendererClass == null) {
			return null;
		}

		// If we already have an additional renderer for this class, return it.
		// This is synchronized, as it updates the shared model using locking/unlocking, which is a bit dodgy.
		synchronized (expandedRenderers) {
			WComponent renderer = expandedRenderers.get(rendererClass);

			if (renderer != null) {
				return renderer;
			}

			// Not found, create a new instance of the given class
			renderer = new RendererWrapper(this, rendererClass, -1);
			expandedRenderers.put(rendererClass, renderer);
			setLocked(false);
			add(renderer);
			setLocked(true);

			return renderer;
		}
	}
public WComponent getExpandedTreeNodeRenderer ( final Class < ? extends WComponent > rendererClass ) { if ( rendererClass == null ) { return null ; } synchronized ( expandedRenderers ) { WComponent renderer = expandedRenderers . get ( rendererClass ) ; if ( renderer != null ) { return renderer ; } renderer = new RendererWrapper ( this , rendererClass , - 1 ) ; expandedRenderers . put ( rendererClass , renderer ) ; setLocked ( false ) ; add ( renderer ) ; setLocked ( true ) ; return renderer ; } }
<p>
This is called to lazily add expanded renderers as necessary. To save memory, only one instance of a renderer
class is ever added to the row renderer instance. The RendererWrapper ensures that data binding occurs at the
right time.
</p>

@param rendererClass the renderer class.
@return the expanded renderer for the given row.