DataType getCompletedDataType(RecordNumber recordNumber)
			throws CancelledException, PdbException {
		DataType dataType = getDataType(recordNumber);
		if (dataType instanceof DataTypeImpl) {
			if (!(dataType instanceof BuiltInDataType)) {
				dataType = resolve(dataType);
				putDataType(recordNumber, dataType);
			}
		}
		else if (dataType == null) {
			AbstractMsType type = getTypeRecord(recordNumber);
			if (!(type instanceof PrimitiveMsType)) {
				throw new PdbException("Type not completed for record: " + recordNumber + "; " +
					type.getClass().getSimpleName());
			}

			MsDataTypeApplier dataTypeApplier = (MsDataTypeApplier) getTypeApplier(recordNumber);
			if (!dataTypeApplier.apply(type)) {
				throw new PdbException(
					"Problem creating Primitive data type for record: " + recordNumber);
			}

			dataType = getDataType(recordNumber);
			if (dataType == null) {
				throw new PdbException(
					"Problem creating Primitive data type for record: " + recordNumber);
			}
		}
		return dataType;
	}
Returns the processed Ghidra class type associated with the PDB type record number.  Causes
 the type to be processed if it already has not been.
<p>
This method is intended to be used by "Consumers" that need the type after all type
 creation is complete (i.e., symbol appliers).  Thus, an additional resolve step is added
 here because the internal processing of PDB data types does not resolve pointers and
 structures used to stub certain pointers (member pointers and other larger-than-64-bit
 pointers) and we assume that a consumer is going to lay down this type in a program, so
 we make sure that it is resolved.
@param recordNumber the record number of the type needed
@return the Ghidra data type
@throws CancelledException upon user cancellation
@throws PdbException upon processing error
@see #getDataType(AbstractMsType)
@see #getDataType(RecordNumber)
Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/DefaultPdbApplicator.java