public static TaintState newInstance(TaintPlugin plugin, String type) {
		List<Class<? extends TaintState>> list = ClassSearcher.getClasses(TaintState.class)
				.stream()
				.toList();
		Class<?>[] constructorArgumentTypes = {TaintPlugin.class};
		Object[] args = new Object[1];
		args[0] = plugin;
		for (Class<? extends TaintState> clazz : list) {
			if (clazz.getName().toLowerCase().contains(type)) {
				try {
					Constructor<?> constructor = clazz.getConstructor(constructorArgumentTypes);
					Object obj = constructor.newInstance(plugin);
					return TaintState.class.cast(obj);
				}
				catch (Exception e) {
					throw new RuntimeException("Unable to instantiate TaintState");
				}
			}
		}
		Msg.error(plugin, "No match for engine = "+type);
		return null;
	}
The interface for the methods that collect desired taint information from the decompiler window and store them
for construction of queries and indexing.
<p>
NOTE:  ALL TaintState CLASSES MUST END IN "TaintState".  If not,
the ClassSearcher will not find them.
Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/decompiler/taint/TaintState.java