private <P> PropertyWrapper<Method, ?, P> getSetter(final Field field, final List<Method> methods, final Class<BEAN> clazz) {
Method setter = null;
String setterName = "";
final List<String> validNames = Arrays.asList(
FieldDefaultNaming.getDefaultSetterName(field.getName()),
FieldDefaultNaming.getDefaultWitherName(field.getName()),
field.getName()
);
for (final Method method : methods) {
if (validNames.contains(method.getName()) && isValidSetter(field, method, clazz)) {
setter = method;
setterName = method.getName();
break;
}
}
this.logger.debug("setter for property [" + field.getName() + "]: [" + setterName + "]");
final Optional<Method> optionalSetter = Optional.ofNullable(setter);
if (optionalSetter.isPresent() && isOptional(optionalSetter.get().getParameterTypes()[0])) {
return new PropertyWrapperDefault<>(optionalSetter, OptionalValueProcessor.build());
}
return new PropertyWrapperDefault<>(optionalSetter, NoOpsValueProcessor.build());
}