public static Registration bindTwoWay()

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