in model/src/main/java/jetbrains/jetpad/model/composite/Composites.java [264:284]
boolean isBefore(CompositeT c1, CompositeT c2) {
if (c1 == c2) return false;
List<CompositeT> c1a = reverseAncestors(c1);
List<CompositeT> c2a = reverseAncestors(c2);
if (c1a.get(0) != c2a.get(0)) {
throw new IllegalArgumentException("Items are in different trees");
}
int commonLength = Math.min(c1a.size(), c2a.size());
for (int i = 1; i < commonLength; i++) {
CompositeT first = c1a.get(i);
CompositeT second = c2a.get(i);
if (first != second) {
return deltaBetween(first, second) > 0;
}
}
throw new IllegalArgumentException("One parameter is an ancestor of the other");
}