class SettableBeanPropertyDelegate extends SettableBeanProperty {

  private final SettableBeanProperty delegate;
  private final SettableAnyProperty anySetter;
  private final transient BooleanSupplier useAnySetter;

  SettableBeanPropertyDelegate(SettableBeanProperty delegate, SettableAnyProperty anySetter, BooleanSupplier useAnySetter) {
    super(delegate);
    this.delegate = delegate;
    this.anySetter = anySetter;
    this.useAnySetter = useAnySetter;
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public SettableBeanProperty withValueDeserializer(JsonDeserializer<?> deser) {
    return new SettableBeanPropertyDelegate(delegate.withValueDeserializer(deser), anySetter, useAnySetter);
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public SettableBeanProperty withName(PropertyName newName) {
    return new SettableBeanPropertyDelegate(delegate.withName(newName), anySetter, useAnySetter);
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public SettableBeanProperty withNullProvider(NullValueProvider nva) {
    return new SettableBeanPropertyDelegate(delegate.withNullProvider(nva), anySetter, useAnySetter);
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public AnnotatedMember getMember() {
    return delegate.getMember();
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public <A extends Annotation> A getAnnotation(Class<A> acls) {
    return delegate.getAnnotation(acls);
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public void fixAccess(DeserializationConfig config) {
    delegate.fixAccess(config);
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public void markAsIgnorable() {
    delegate.markAsIgnorable();
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public boolean isIgnorable() {
    return delegate.isIgnorable();
  }

  /**
   * Method called to deserialize appropriate value, given parser (and context), and set it using appropriate mechanism.
   *
   * <p>
   * Deserialization is first tried through the delegate. In case a {@link MismatchedInputException} is caught,
   * the field is stored in the bean's {@link SettableAnyProperty} anySetter field if it exists.
   *
   * <p>
   * This allows deserialization processes propagate values that initially don't match the target bean type for the
   * applicable field.
   *
   * <p>
   * An example use-case is the use of placeholders (e.g. {@code ${aValue}}) in a field.
   */
  @Override
  public void deserializeAndSet(JsonParser p, DeserializationContext ctxt, Object instance) throws IOException {
    try {
      delegate.deserializeAndSet(p, ctxt, instance);
    } catch (MismatchedInputException ex) {
      if (shouldUseAnySetter()) {
        anySetter.set(instance, delegate.getName(), p.getText());
      } else {
        throw ex;
      }
    }
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public Object deserializeSetAndReturn(JsonParser p, DeserializationContext ctxt, Object instance) throws IOException {<FILL_FUNCTION_BODY>}

  /**
   * {@inheritDoc}
   */
  @Override
  public void set(Object instance, Object value) throws IOException {
    delegate.set(instance, value);
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public Object setAndReturn(Object instance, Object value) throws IOException {
    return delegate.setAndReturn(instance, value);
  }

  private boolean shouldUseAnySetter() {
    if (anySetter == null) {
      return false;
    }
    return useAnySetter.getAsBoolean();
  }
}

    try {
      return delegate.deserializeSetAndReturn(p, ctxt, instance);
    } catch (MismatchedInputException ex) {
      deserializeAndSet(p, ctxt, instance);
    }
    return null;
  
<no_super_class>