private static void updateSenderRequirements(final Set<Type> senderTypes, final Type senderType) {
        boolean add = true;
        for (final Iterator<Type> iterator = senderTypes.iterator(); iterator.hasNext();) {
            final Type existingType = iterator.next();
            if (GenericTypeReflector.isSuperType(existingType, senderType)) {
                add = false;
                break;
            }
            if (GenericTypeReflector.isSuperType(senderType, existingType)) {
                iterator.remove();
                break;
            }
        }
        if (add) {
            senderTypes.add(senderType);
        }
    }
Propagates permission and sender type requirements from the {@link Command} owning the {@code leafNode}'s component down
the tree, merging as is appropriate for nodes shared by multiple chains.

@param leafNode leafNode
cloud-core/src/main/java/org/incendo/cloud/CommandTree.java