@Override
	public void run(TaskMonitor monitor) throws CancelledException {

		int nodeCount = copyMoveNodes.size();
		filterRedundantNodes();

		if (checkForDifferentSourceArchives()) {
			return;
		}

		//
		// Note: we collapse the node before performing this work because there is a
		//       potential for a large number of events to be generated.  Further, if the
		//       given archive node has many children (like 10s of thousands), then the
		//       copious events generated herein could lock the UI.  By closing the node,
		//       the tree is not invalidating/validating its cache as a result of these
		//       events.
		//
		GTreeState treeState = gTree.getTreeState();
		try {
			if (nodeCount > NODE_COUNT_FOR_COLLAPSING_TREE) {
				collapseArchives();
			}

			if (needToCreateAssociation()) {
				associateDataTypes(monitor);
			}

			doCopy(monitor);
		}
		catch (CancelledException e) {
			return; // nothing to report
		}
		finally {
			gTree.restoreTreeState(treeState);
		}

		reportErrors();
	}
Any types being newly copied/moved to a suitable archive are eligible for 'association',
which means changes between the two archives will be tracked.  True, the default, signals to
prompt before associating types; false signals not to prompt the user, but to always
associate types.

@param prompt true to prompt; false to not prompt
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/util/DataTypeTreeCopyMoveTask.java