@Override
	protected boolean isEquivalent(DataType dt, DataTypeConflictHandler handler) {
		if (dt == this) {
			return true;
		}
		if (dt == null || !(dt instanceof TypeDef)) {
			return false;
		}
		TypeDef td = (TypeDef) dt;
		validate(lock);

		boolean autoNamed = isAutoNamed();
		if (autoNamed != td.isAutoNamed()) {
			return false;
		}

		if (!autoNamed && !DataTypeUtilities.equalsIgnoreConflict(getName(), td.getName())) {
			return false;
		}

		if (!hasSameTypeDefSettings(td)) {
			return false;
		}

		if (handler != null && ConflictResult.USE_EXISTING == handler.resolveConflict(td, this)) {
			// treat this type as equivalent if existing type will be used
			return true;
		}

		// TODO: add pointer-post-resolve logic with resolving bypass (similar to StructureDB components)

		DataType dataType = getDataType();
		DataType otherDataType = td.getDataType();
		if (DataTypeUtilities.isSameDataType(dataType, otherDataType)) {
			return true;
		}

		if (handler != null) {
			handler = handler.getSubsequentHandler();
		}
		return DataTypeDB.isEquivalent(dataType, otherDataType, handler);
	}
Construct TypeDefDB instance
@param dataMgr datatype manager
@param cache DataTypeDB cache
@param adapter TypeDef record adapter
@param record TypeDefDB record
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/TypedefDB.java