void addCodeUnits(ProgramNode destNode, AddressSetView view) {

		if (destNode == null) {
			return;
		}
		Listing currentListing = program.getListing();
		Address start = view.getMinAddress();
		ProgramFragment sourceFrag = currentListing.getFragment(treeName, start);

		Data data = currentListing.getDefinedDataContaining(start);
		if (data != null && !view.getMinAddress().equals(data.getMinAddress())) {
			view = new AddressSet(data.getMinAddress(), data.getMaxAddress());
		}
		int transactionID = startTransaction("Move Code Units");

		boolean addEdit = false;
		try {
			if (destNode.isFragment()) {
				try {
					moveRanges(destNode.getFragment(), view);
					addEdit = true;
				}
				catch (NotFoundException e) {
					Msg.showInfo(getClass(), this, "Move Code Units Failed", e.getMessage());
					return;
				}
			}
			else {
				addEdit = createFragmentFromView(destNode, view);
			}
			if (addEdit && sourceFrag.isEmpty()) {
				try {
					removeEmptyFragment(sourceFrag);
				}
				catch (NotEmptyException e) {
					// shouldn't happen since we asked isEmpty()
				}
			}
		}
		finally {
			endTransaction(transactionID, addEdit);
		}

		if (addEdit) {
			fireTreeViewChanged();
		}

	}
Add code units from the list of FragmentSelection objects
to the targetNode. If targetNode is a Module, then a new
fragment is created and all code units are added to the new
fragment. If the targetNode is a Fragment, then code units
are just added to that fragment. If the source fragment is empty
after moving the code units to the destination, remove it from
all of its parents.
@param destNode represents either a Module or Fragment
@param view address set view for code units that will be added
the destination fragment
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/programtree/ProgramDnDTree.java