public static Property validatedProperty()

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