public static DataType toDataType(DataTypeManager dtm, String dataTypeString) {
		if (dataTypeString.length() == 0) {
			return null;
		}
		switch (dataTypeString.charAt(0)) {
			case 'B':
				return SignedByteDataType.dataType;
			case 'C':
				return CharDataType.dataType;
			case 'D':
				return DoubleDataType.dataType;
			case 'F':
				return FloatDataType.dataType;
			case 'I':
				return IntegerDataType.dataType;
			case 'J':
				return new LongDataType(dtm);
			case 'S':
				return ShortDataType.dataType;
			case 'Z':
				return BooleanDataType.dataType;
			case 'V':
				return VoidDataType.dataType;
			case 'L':
				String[] path = convertClassStringToPathArray(CATEGORY_PATH, dataTypeString);
				StringBuilder builder = new StringBuilder();
				for (int i = 0; i < path.length - 1; ++i) {
					builder.append(CategoryPath.DELIMITER_CHAR).append(path[i]);
				}
				CategoryPath catPath = new CategoryPath(builder.toString());
				DataType exist = dtm.getDataType(catPath, path[path.length - 1]);
				if (exist == null) {
					exist = Undefined4DataType.dataType;
				}
				return new PointerDataType(exist, dtm);
			case '[':
				DataType subDataType = toDataType(dtm, dataTypeString.substring(1));
				return new PointerDataType(subDataType, dtm);
			default:
				return null;
		}
	}
Converts the data type string into a Ghidra data type
@param dtm the data type manager for getting data types.
@param dataTypeString the data type string (java encodings)
@return the Ghidra datatype
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/dex/util/DexUtil.java