private String doGetTypeName() throws InvalidDataTypeException {
		if (hasProcessedName) {
			return originalTypeName;
		}
		// last component is the type descriptor name.
		Address nameAddress = getComponentAddressOfTypeName(); // Could be null.
		if (nameAddress == null) {
			return null;
		}
		Program program = getProgram();
		TerminatedStringDataType terminatedStringDt =
			new TerminatedStringDataType(program.getDataTypeManager());
		DumbMemBufferImpl nameMemBuffer =
			new DumbMemBufferImpl(getMemBuffer().getMemory(), nameAddress);
		Object value = terminatedStringDt.getValue(nameMemBuffer, SettingsImpl.NO_SETTINGS, 1);
		if (value instanceof String) {
			originalTypeName = (String) value;
			// The returned demangledDataType an be null
			demangledDataType = getDemangledDataType(originalTypeName, program, nameAddress);
		}
		hasProcessedName = true;
		return originalTypeName;
	}
Gets the actual name string for this type descriptor.
@return the type name or null.
@throws InvalidDataTypeException if valid TypeDescriptor data can't be created at the
model's address.
Ghidra/Features/MicrosoftCodeAnalyzer/src/main/java/ghidra/app/cmd/data/TypeDescriptorModel.java