private static int compareSpecificNodeInfo()

in bval-jsr/src/main/java/org/apache/bval/jsr/util/NodeImpl.java [167:203]


    private static int compareSpecificNodeInfo(Node quid, Node quo) {
        final ElementKind kind = quid.getKind();
        final int k = kind.compareTo(quo.getKind());
        if (k != 0) {
            return k;
        }
        final Comparator<Node> cmp;
        switch (kind) {
        case BEAN:
            cmp = comparing(to(BeanNode.class), comparing(BeanNode::getContainerClass, CLASS_COMPARATOR)
                .thenComparing(BeanNode::getTypeArgumentIndex, nullsFirst(naturalOrder())));
            break;
        case PROPERTY:
            cmp = comparing(to(PropertyNode.class), comparing(PropertyNode::getContainerClass, CLASS_COMPARATOR)
                .thenComparing(PropertyNode::getTypeArgumentIndex, nullsFirst(naturalOrder())));
            break;
        case CONTAINER_ELEMENT:
            cmp = comparing(to(ContainerElementNode.class),
                comparing(ContainerElementNode::getContainerClass, CLASS_COMPARATOR)
                    .thenComparing(ContainerElementNode::getTypeArgumentIndex, nullsFirst(naturalOrder())));
            break;
        case CONSTRUCTOR:
            cmp = comparing(to(ConstructorNode.class).andThen(ConstructorNode::getParameterTypes),
                Comparators.comparingIterables(CLASS_COMPARATOR));
            break;
        case METHOD:
            cmp = comparing(to(MethodNode.class).andThen(MethodNode::getParameterTypes),
                Comparators.comparingIterables(CLASS_COMPARATOR));
            break;
        case PARAMETER:
            cmp = comparing(to(ParameterNode.class).andThen(ParameterNode::getParameterIndex));
            break;
        default:
            return 0;
        }
        return cmp.compare(quid, quo);
    }