public static <T extends DataType> T findDataType(DataTypeManager dataTypeManager,
			Namespace namespace, String dtName, Class<T> classConstraint) {

		T dt = findPreferredDataType(dataTypeManager, namespace, dtName, classConstraint, false);
		if (dt != null) {
			return dt;
		}

		final String[] namespacePaths = getRelativeCategoryPaths(namespace);

		return findDataType(dataTypeManager, dtName, classConstraint,
			categoryPath -> getCategoryMatchType(categoryPath, namespacePaths, false));
	}
Attempt to find the data type whose dtName and specified namespace match a stored data type
within the specified dataTypeManager. The first match which satisfies the category path 
requirement will be returned.  If a non-root namespace is specified the datatype's trailing 
category path must match the specified namespace path.

@param dataTypeManager data type manager
@param namespace namespace associated with dtName (null indicates no namespace constraint)
@param dtName name of data type
@param classConstraint optional data type interface constraint (e.g., Structure), or null
@return best matching data type
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeUtilities.java