public void addDataType(long offset, DataType dt) {
		if (dt == null || dt instanceof VoidDataType) {
			computeMax(offset, 1);
			return;
		}
		if (dt instanceof Pointer) {
			DataType baseType = ((Pointer) dt).getDataType();
			if (baseType != null && baseType.equals(structDT)) {
				// Be careful of taking a pointer to the structure when the structure
				// is not fully defined
				DataTypeManager manager = dt.getDataTypeManager();
				dt = manager.getPointer(DataType.DEFAULT, dt.getLength());
			}
		}
		else if (dt instanceof PartialUnion) {
			// The decompiler can produce the internal data-type PartialUnion, which must
			// be replaced with a suitable formal data-type within the structure being built
			dt = ((PartialUnion) dt).getStrippedDataType();
		}
		computeMax(offset, dt.getLength());
		Entry<Long, DataType> firstEntry = checkForOverlap(offset, dt.getLength());
		if (firstEntry != null) {
			if (firstEntry.getKey().longValue() == offset &&
				firstEntry.getValue().getLength() == dt.getLength()) {
				// Matching field,  compare the data-types
				if (dt != MetaDataType.getMostSpecificDataType(firstEntry.getValue(), dt)) {
					return;
				}
			}
			else if (firstEntry.getKey().longValue() <= offset &&
				offset + dt.getLength() < firstEntry.getKey().longValue() +
					firstEntry.getValue().getLength()) {
				// Completely contained within preexisting entry
				if (!(firstEntry.getValue() instanceof Undefined)) {
					// Don't override preexisting entry with a smaller one
					return;
				}
				// unless the preexising entry is undefined
			}
			else if (dt instanceof Undefined) {
				// The new field either fully or partially contains preexisting fields
				return;
			}
			offsetToDataTypeMap.subMap(firstEntry.getKey(), offset + dt.getLength()).clear();	// Clear overlapping entries
		}
		offsetToDataTypeMap.put(Long.valueOf(offset), dt);
	}
Add data-type information about a specific field
@param offset of the field within the structure
@param dt is the data-type of field if known (null otherwise)
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/NoisyStructureBuilder.java