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);
}