model/src/main/java/jetbrains/jetpad/model/property/Properties.java [201:248]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      @Override
      protected void doAddListeners() {
        myTargetProperty = source.get() == null ? null : fun.apply(source.get());

        final EventHandler<PropertyChangeEvent<TargetT>> targetHandler = new EventHandler<PropertyChangeEvent<TargetT>>() {
          @Override
          public void onEvent(PropertyChangeEvent<TargetT> event) {
            somethingChanged();
          }
        };
        EventHandler<PropertyChangeEvent<SourceT>> sourceHandler = new EventHandler<PropertyChangeEvent<SourceT>>() {
          @Override
          public void onEvent(PropertyChangeEvent<SourceT> event) {
            if (myTargetProperty != null) {
              myTargetRegistration.remove();
            }
            SourceT sourceValue = source.get();
            if (sourceValue != null) {
              myTargetProperty = fun.apply(sourceValue);
            } else {
              myTargetProperty = null;
            }
            if (myTargetProperty != null) {
              myTargetRegistration = myTargetProperty.addHandler(targetHandler);
            }
            somethingChanged();
          }
        };
        mySourceRegistration = source.addHandler(sourceHandler);
        if (myTargetProperty != null) {
          myTargetRegistration = myTargetProperty.addHandler(targetHandler);
        }
      }

      @Override
      protected void doRemoveListeners() {
        if (myTargetProperty != null) {
          myTargetRegistration.remove();
        }
        mySourceRegistration.remove();
      }

      @Override
      protected TargetT doGet() {
        return calc.get();
      }

      @Override
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



model/src/main/java/jetbrains/jetpad/model/property/Properties.java [277:324]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      @Override
      protected void doAddListeners() {
        myTargetProperty = source.get() == null ? null : fun.apply(source.get());

        final EventHandler<PropertyChangeEvent<TargetT>> targetHandler = new EventHandler<PropertyChangeEvent<TargetT>>() {
          @Override
          public void onEvent(PropertyChangeEvent<TargetT> event) {
            somethingChanged();
          }
        };
        EventHandler<PropertyChangeEvent<SourceT>> sourceHandler = new EventHandler<PropertyChangeEvent<SourceT>>() {
          @Override
          public void onEvent(PropertyChangeEvent<SourceT> event) {
            if (myTargetProperty != null) {
              myTargetRegistration.remove();
            }
            SourceT sourceValue = source.get();
            if (sourceValue != null) {
              myTargetProperty = fun.apply(sourceValue);
            } else {
              myTargetProperty = null;
            }
            if (myTargetProperty != null) {
              myTargetRegistration = myTargetProperty.addHandler(targetHandler);
            }
            somethingChanged();
          }
        };
        mySourceRegistration = source.addHandler(sourceHandler);
        if (myTargetProperty != null) {
          myTargetRegistration = myTargetProperty.addHandler(targetHandler);
        }
      }

      @Override
      protected void doRemoveListeners() {
        if (myTargetProperty != null) {
          myTargetRegistration.remove();
        }
        mySourceRegistration.remove();
      }

      @Override
      protected TargetT doGet() {
        return calc.get();
      }

      @Override
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



