public static Property map()

in model/src/main/java/jetbrains/jetpad/model/property/Properties.java [431:468]


  public static <SourceT, TargetT> Property<TargetT> map(
      final Property<SourceT> prop, final Function<? super SourceT, ? extends TargetT> sToT,
      final Function<? super TargetT, ? extends SourceT> tToS
  ) {
    class TransformedProperty implements Property<TargetT> {
      @Override
      public TargetT get() {
        return sToT.apply(prop.get());
      }

      @Override
      public Registration addHandler(final EventHandler<? super PropertyChangeEvent<TargetT>> handler) {
        return prop.addHandler(new EventHandler<PropertyChangeEvent<SourceT>>() {
          @Override
          public void onEvent(PropertyChangeEvent<SourceT> event) {
            TargetT oldValue = sToT.apply(event.getOldValue());
            TargetT newValue = sToT.apply(event.getNewValue());

            if (Objects.equals(oldValue, newValue)) return;

            handler.onEvent(new PropertyChangeEvent<>(oldValue, newValue));
          }
        });
      }

      @Override
      public void set(TargetT value) {
        prop.set(tToS.apply(value));
      }

      @Override
      public String getPropExpr() {
        return "transform(" + prop.getPropExpr() + ", " + sToT + ", " + tToS + ")";
      }
    }

    return new TransformedProperty();
  }