private boolean canDropNode( ProgramNode destinationNode, ProgramNode dropNode,
            int dropAction, int relativeMousePosition ) {
        
        Group dragGroup = dropNode.getGroup();        
        if (dragGroup.equals(destinationNode.getGroup())) {
            return false; // can't drop a group onto itself
        }
        if (relativeMousePosition != 0 ) {
            return reorderDDMgr.isDropSiteOk(destinationNode, dropNode, dropAction,
                relativeMousePosition);
        }
        
        // this is for a normal drop on the node
        if (destinationNode.isFragment()) {
            return checkDestFragment(destinationNode, dropNode, dropAction);
        }
        
        // check for destination module already containing drop Module or Fragment
        ProgramModule destModule = destinationNode.getModule();
        if (dropNode.isFragment() && destModule.contains(dropNode.getFragment())) {
            return false;
        }
        if (dropNode.isModule()) {
            ProgramModule dropModule = dropNode.getModule();
            if (destModule.contains(dropNode.getModule())) {
                return false;
            }
            if (dropModule.isDescendant(destModule)) {
                return false;
            }
        }
        return true;
    }
Return true if the destNode can accept the dropNodes.
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/programtree/DnDMoveManager.java