in model/src/main/java/jetbrains/jetpad/model/property/Properties.java [723:755]
public static <ValueT> Property<ValueT> validatedProperty(final Property<ValueT> source, final Predicate<ValueT> validator) {
class ValidatedProperty extends DerivedProperty<ValueT> implements Property<ValueT> {
private ValueT myLastValid;
ValidatedProperty() {
super(source);
}
@Override
public ValueT doGet() {
ValueT sourceValue = source.get();
if (validator.test(sourceValue)) {
myLastValid = sourceValue;
}
return myLastValid;
}
@Override
public void set(ValueT value) {
if (!validator.test(value)) {
return;
}
source.set(value);
}
@Override
public String getPropExpr() {
return "validated(" + source.getPropExpr() + ", " + validator + ")";
}
}
return new ValidatedProperty();
}