private DataType applyUserDefinedTypeMsSymbol()
			throws CancelledException, PdbException {

		String name = symbol.getName();

		RecordNumber typeRecordNumber = symbol.getTypeRecordNumber();
		AbstractMsType mType = applicator.getTypeRecord(typeRecordNumber);
		MsTypeApplier applier = applicator.getTypeApplier(typeRecordNumber);
		// TODO:... NOT SURE IF WILL ALWAYS BE A DATATYPE OR WILL BE A VARIABLE OR ????
		if (applier == null) {
			return null;
		}
		DataType dataType = applicator.getCompletedDataType(typeRecordNumber);
		if (dataType == null) {
			return null;
		}

		// This code (for Composites and Enums) circumvents a collision on the names with the
		//  compromise that we do not store the TypeDefDataType into the DataTypeManager.
		//  Another issue is that we likely already have the DataType in the DataTypeManager,
		//  but the TypeDefDataType also wants to create it... we would need a mechanism to
		//  create a TypeDefDataType which uses an existing underlying DataType.
		// Note, too, that we do not compare name with dataType.getName() as the latter does not
		//  contain namespace information.
		if (mType instanceof AbstractComplexMsType) {
			if (name.equals(mType.getName())) {
				return dataType;
			}
		}

		SymbolPath symbolPath = new SymbolPath(name);
		symbolPath = PdbNamespaceUtils.convertToGhidraPathName(symbolPath);
		CategoryPath categoryPath =
			applicator.getTypedefsCategory(applicator.getCurrentModuleNumber(), symbolPath);
		DataType typedef = new TypedefDataType(categoryPath.getParent(), categoryPath.getName(),
			dataType, applicator.getDataTypeManager());

		return applicator.resolve(typedef);
	}
Returns the type record number.
@return Type record number.
Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/TypedefSymbolApplier.java