Fix ExceptionHandler compareTo method.

The previous implementation violated the contract that compareTo must be behave the same way when operands are reversed and that it is transitive. Any classes that were not equal, or a superclass of another were returned as being "less than".

The new implementation tests if classes are superclasses of each other, otherwise falls back to alphabetical sorting on canonical name.

While this did not manifest in 1.6, the replacement sort algorithm in 1.8 (TimSort) caused the sorting to appear random due to apparently contiguous sections being consumed, then sorted in bulk.
This commit is contained in:
flamin_scotsman 2015-03-13 16:04:55 +00:00
parent 2db5d8b11a
commit d5914e52e1

View File

@ -100,8 +100,10 @@ public abstract class ExceptionConverterHelper implements ExceptionConverter {
return 0;
} else if (cls.isAssignableFrom(o.cls)) {
return 1;
} else {
} else if (o.cls.isAssignableFrom(cls)) {
return -1;
} else {
return cls.getCanonicalName().compareTo(o.cls.getCanonicalName());
}
}
}