@Override
	public void add(Object obj, DropTargetDropEvent event, DataFlavor f) {

		if (f.equals(DataTreeDragNDropHandler.localDomainFileFlavor)) {
			resetButtonAfterDrag(this);

			@SuppressWarnings("unchecked")
			// we put the data in
			List<DomainFile> list = (List<DomainFile>) obj;
			openFilesAndOpenToolAsNecessary(list, null);
		}
		else if (f.equals(VersionInfoTransferable.localVersionInfoFlavor)) {
			VersionInfo info = (VersionInfo) obj;
			PluginTool tool = plugin.getTool();
			Project project = tool.getProject();
			ProjectData projectData = project.getProjectData();
			DomainFile file = projectData.getFile(info.getDomainFilePath());
			final DomainObject versionedObj = getVersionedObject(file, info.getVersionNumber());

			if (versionedObj != null) {
				DomainFile domainFile = versionedObj.getDomainFile();
				if (isSupportedDataType(domainFile)) {
					resetButtonAfterDrag(this);
					openFilesAndOpenToolAsNecessary(List.of(domainFile),
						() -> versionedObj.release(ToolButton.this));
				}
				else {
					versionedObj.release(ToolButton.this);
				}
			}
		}
		// else assume ToolButtonTransferable
		else {
			ToolButton toolButton = (ToolButton) obj;
			resetButtonAfterDrag(toolButton);
			addFromToolButton(toolButton);
		}
	}
The given list must contain only valid domain files (i.e., no folders or null items)
@param fileList The list of file objects to validate
@return true if <b>all</b> items in the list are supported
Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ToolButton.java