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