private DataType resolveNoEquivalentFound(DataType dataType, SourceArchive sourceArchive) {

		if (sourceArchive != null && sourceArchive.getArchiveType() == ArchiveType.PROGRAM) {
			sourceArchive = null; // do not preserve program as a source archive
		}

		// If not found, do we have the same named data type in the same category already?
		// (preference is given to similar kind of datatype when checking existing conflict types)
		DataType existingDataType = findDataTypeSameLocation(dataType);
		if (existingDataType == null) {
			// create non-existing datatype - keep original name unless it is already used
			String name = dataType.getName();
			if (getDataType(dataType.getCategoryPath(), name) != null) {
				name = getUnusedConflictName(dataType);
			}
			return createDataType(dataType, name, sourceArchive, currentHandler);
		}

		// So we have a dataType with the same path and name, but not equivalent, so use
		// the conflictHandler to decide what to do.
		ConflictResult conflictResult = currentHandler.resolveConflict(dataType, existingDataType);
		switch (conflictResult) {

			case REPLACE_EXISTING: // new type replaces old conflicted type
				try {
					if (updateExistingDataType(existingDataType, dataType, sourceArchive)) {
						return existingDataType;
					}
					renameToUnusedConflictName(existingDataType);
					DataType newDataType =
						createDataType(dataType, dataType.getName(), sourceArchive, currentHandler);
					try {
						replace(existingDataType, newDataType);
					}
					catch (DataTypeDependencyException e) {
						throw new IllegalArgumentException(
							"Invalid datatype replacement: " + newDataType.getName(), e);
					}
					return newDataType;
				}
				catch (DataTypeDependencyException e) {
					// new type refers to old type - fallthrough to RENAME_AND_ADD
				}

			case RENAME_AND_ADD: // default handler behavior
				return createConflictDataType(dataType, sourceArchive);

			default:  // USE_EXISTING - new type is discarded and old conflicted type is returned
				return existingDataType;
		}
	}
Complete datatype resolution after having attempted to find an existing equivalent type. 
An attempt is made to identify a conflicting datatype and determine a conflict resolution
using the specified conflict handler.
@param dataType datatype being resolved
@param sourceArchive source archive associated with new type (may be null)
@return resolved datatype (may be existing or newly added datatype)
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java