@SuppressWarnings({ "unchecked" }) 	// we verified before casting
	private static <ROW_TYPE, EXPECTED_TYPE, DATA_SOURCE> Collection<TableRowMapper<ROW_TYPE, EXPECTED_TYPE, DATA_SOURCE>> getTableRowObjectMapper(
			Class<ROW_TYPE> fromType, Class<?> toType) {

		Set<TableRowMapper<ROW_TYPE, EXPECTED_TYPE, DATA_SOURCE>> set = new HashSet<>();

		@SuppressWarnings("rawtypes")
		List<TableRowMapper> instances = ClassSearcher.getInstances(TableRowMapper.class);
		for (TableRowMapper<ROW_TYPE, EXPECTED_TYPE, DATA_SOURCE> mapper : instances) {
			if (mapper.getSourceType() == fromType && mapper.getDestinationType() == toType) {
				set.add(mapper);
			}
		}

		return set;
	}
Returns a {@link TableRowMapper} for the given class types if one is found.  The
returned mapper will know how to translate instances of <code>fromType</code> to
<code>toType</code>.

@param <ROW_TYPE> The type of row that is defined by the table
@param <EXPECTED_TYPE> The type of row object that is desired
@param fromType The <code>Class</code> object of the given row type
@param toType The <code>Class</code> object of the desired row type
@return a new TableRowMapper
Ghidra/Framework/Docking/src/main/java/docking/widgets/table/DiscoverableTableUtils.java