in model/src/main/java/jetbrains/jetpad/model/property/PropertyBinding.java [37:69]
public static <ValueT> Registration bindTwoWay(final Property<ValueT> source, final Property<ValueT> target) {
final Property<Boolean> syncing = new ValueProperty<>(false);
target.set(source.get());
class UpdatingEventHandler implements EventHandler<PropertyChangeEvent<ValueT>> {
private boolean myForward;
UpdatingEventHandler(boolean forward) {
myForward = forward;
}
@Override
public void onEvent(PropertyChangeEvent<ValueT> event) {
if (syncing.get()) return;
syncing.set(true);
try {
if (myForward) {
target.set(source.get());
} else {
source.set(target.get());
}
} finally {
syncing.set(false);
}
}
}
return new CompositeRegistration(
source.addHandler(new UpdatingEventHandler(true)),
target.addHandler(new UpdatingEventHandler(false))
);
}