@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public Binding<BEAN, TARGET> bind(String propertyName) {
Objects.requireNonNull(propertyName,
"Property name cannot be null");
checkUnbound();
PropertyDefinition<BEAN, ?> definition = getBinder().propertySet
.getProperty(propertyName)
.orElseThrow(() -> new IllegalArgumentException(
"Could not resolve property name " + propertyName
+ " from " + getBinder().propertySet));
ValueProvider<BEAN, ?> getter = definition.getGetter();
Setter<BEAN, ?> setter = definition.getSetter().orElse(null);
if (setter == null) {
getLogger().fine(() -> propertyName
+ " does not have an accessible setter");
}
BindingBuilder<BEAN, ?> finalBinding = withConverter(
createConverter(definition.getType()), false);
finalBinding = getBinder().configureBinding(finalBinding,
definition);
try {
Binding binding = ((BindingBuilder) finalBinding).bind(getter,
setter);
getBinder().boundProperties.put(propertyName, binding);
return binding;
} finally {
getBinder().incompleteMemberFieldBindings.remove(getField());
}
}