private void fixUpDataTypes() {
		// fix data types in the fixUpList
		ArrayList<FixUpInfo> unresolvedFixups = new ArrayList<>();

		/**
		 * NOTE: It is important that fixups for a Structure are processed bottom-up
		 * (i.e., last-ordinal to first-ordinal) to ensure that subsequent fixup ordinal
		 * indexes remain valid even after components are removed as a result of processing
		 * a Structure fixup. 
		 */
		Collections.sort(fixUpList);

		for (int i = 0; i < fixUpList.size(); i++) {

			FixUpInfo info = fixUpList.get(i);
			DataType dt = info.ht.get(info.id);
			if (dt instanceof Union) {
				// Fixups for a union are done all at once
				// Determine number of applicable fixups (assumes they are sequential for the same Union)
				int count = 1;
				for (int n = i + 1; n < fixUpList.size(); n++) {
					if (fixUpList.get(n).id != info.id) {
						break;
					}
					++count;
				}
				fixUpUnion(info.id, (Union) dt, i, count, unresolvedFixups);
				i += count - 1;
			}
			else if (dt instanceof Structure struct) {
				if (!fixUpStructure(info, struct)) {
					unresolvedFixups.add(info);
				}
			}
			else if (dt instanceof FunctionDefinition fndef) {
				if (!fixUpFunctionDef(info, fndef)) {
					unresolvedFixups.add(info);
				}
			}
			else {
				DataTypeManager dtm = info.getDataTypeManager();
				if (resolve(info.compID, dtm, info.ht) != null) {
					resolve(info.id, dtm, info.ht);
				}
			}
		}
		// update fixup list with those that were unresolved
		fixUpList = unresolvedFixups;
	}
See if there is a data type in the result file that matches My data type based on
name, path and contents.
If there is a data type that is the same then return true.
@param myDtID the database ID (key) for My data type.
@param myDt My data type.
@return true if the same named and equivalent data type is found in the result
data type manager.
Ghidra/Features/Base/src/main/java/ghidra/app/merge/datatypes/DataTypeMergeManager.java