public static String getDiffToolTip(DataTypeManagerHandler handler, DataType dataType) {
		DataTypeManager dataTypeManager = dataType.getDataTypeManager();
		SourceArchive sourceArchive = dataType.getSourceArchive();
		UniversalID dataTypeID = dataType.getUniversalID();
		if (sourceArchive == null || dataTypeID == null ||
			sourceArchive.getSourceArchiveID().equals(dataTypeManager.getUniversalID())) {
			return null;
		}

		DataTypeManager sourceDTM = handler.getDataTypeManager(sourceArchive);
		boolean hasChangedLocally =
			dataType.getLastChangeTime() != dataType.getLastChangeTimeInSourceArchive();
		DataType sourceDT = null;
		if (sourceDTM == null) {
			if (!hasChangedLocally) {
				return null;
			}
		}
		else {
			sourceDT = sourceDTM.getDataType(sourceArchive, dataTypeID);
		}
		HTMLDataTypeRepresentation representation1 = ToolTipUtils.getHTMLRepresentation(dataType);
		HTMLDataTypeRepresentation representation2 =
			getSourceHTMLRepresentation(sourceDT, sourceArchive);
		HTMLDataTypeRepresentation[] diffs = representation1.diff(representation2);

		String htmlContent = diffs[0].getHTMLContentString();
		String otherContent = diffs[1].getHTMLContentString();

		// this string allows us to force both tables to be the same width, which is
		// aesthetically pleasing
		String spacerString = createHTMLSpacerString(htmlContent, otherContent);
		StringBuilder buffy = new StringBuilder();
		buffy.append("<html>");

		// -we use CELLPADDING here to allow us to create a narrow column within the table
		// -the CELLSPACING gives us some space around the narrow column
		buffy.append("<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=5>");

		buffy.append("<TR BORDER=LEFT>");
		buffy.append("<TD VALIGN=\"TOP\">");
		buffy.append("<B>")
				.append(HTMLUtilities.escapeHTML(dataTypeManager.getName()))
				.append("</B><HR NOSHADE>");
		buffy.append(htmlContent);

		// horizontal spacer below the inner table in order to force a minimum width
		buffy.append("<TT>").append(spacerString).append("</TT>");
		buffy.append("</TD>");

		// really narrow, black column that represents our table divider (like a vertical HR)
		buffy.append("<TD WIDTH=\"1\" BGCOLOR=#000000>");
		buffy.append("</TD>");

		buffy.append("<TD VALIGN=\"TOP\">");
		buffy.append("<B>")
				.append(HTMLUtilities.escapeHTML(sourceArchive.getName()))
				.append("</B><HR NOSHADE>");

		buffy.append(otherContent);

		// horizontal spacer below the inner table in order to force a minimum width
		buffy.append("<TT>").append(spacerString).append("</TT>");
		buffy.append("</TD>");
		buffy.append("</TR>");

		buffy.append("</TABLE>");

		return buffy.toString();
	}
If the indicated data type is associated with a source archive, this will remove the
association.
@param dataType the data type to be disassociated from a source archive.
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataTypeSynchronizer.java