@SuppressWarnings({ "unchecked", "rawtypes" })
	// guaranteed by compile constraints
	public final Class<ROW_TYPE> getSourceType() {
		Class<? extends TableRowMapper> implementationClass = getClass();
		List<Class<?>> typeArguments =
			ReflectionUtilities.getTypeArguments(TableRowMapper.class, implementationClass);
		return (Class<ROW_TYPE>) typeArguments.get(0);
	}
NOTE:  ALL TableRowMapper CLASSES MUST END IN "TableRowMapper".  If not,
the ClassSearcher will not find them.

An interface that allows implementors to map an object of one type to another.  This is useful
for table models that have row types that are easily converted to other more generic types.
<p>
This interface is an ExtensionPoint so that once created, they will be ingested automatically
by Ghidra.  Once discovered, these mappers will be used to provide dynamic columns to 
tables with row types that match <code>ROW_TYPE</code>.

@param <ROW_TYPE> The row type of a given table model
@param <EXPECTED_ROW_TYPE> The row type expected by dynamic columns.

@see DynamicTableColumn
@see TableUtils
Ghidra/Framework/Docking/src/main/java/docking/widgets/table/TableRowMapper.java