in model/src/main/java/jetbrains/jetpad/model/transform/Transformers.java [310:337]
private void watch(final ItemT item, final ObservableList<ItemT> to) {
ReadableProperty<ValueT> property = propSpec.apply(item);
if (property == null) {
throw new NullPointerException();
}
myListeners.put(item, property.addHandler(new EventHandler<PropertyChangeEvent<ValueT>>() {
@Override
public void onEvent(PropertyChangeEvent<ValueT> event) {
boolean needMove = false;
int sortedIndex = to.indexOf(item);
if (sortedIndex > 0) {
ItemT before = to.get(sortedIndex - 1);
if (comparator.compare(before, item) > 0) {
needMove = true;
}
}
if (sortedIndex < to.size() - 1) {
ItemT after = to.get(sortedIndex + 1);
if (comparator.compare(item, after) > 0) {
needMove = true;
}
}
if (needMove) {
myCollectionListener.onItemSet(new CollectionItemEvent<>(item, item, -1, EventType.SET));
}
}
}));
}