code: static Method getSetter(Class<?> targetClass, String propertyName, Class<?> type) {
  		if (targetClass == null) {
  			return null;
  		}
  		String setterMethodName = setterName(propertyName);
  		try {
  			Method setter = targetClass.getMethod(setterMethodName, type);
  			logger.debug("Found public setter {} in class {}", setterMethodName, setter.getDeclaringClass().getName());
  			return setter;
  		} catch (NoSuchMethodException e) {
  			logger.debug("Failed to found public setter {} in class {}", setterMethodName, targetClass.getName());
  		}
  		while (targetClass != null) {
  			try {
  				Method setter = targetClass.getDeclaredMethod(setterMethodName, type);
  				logger.debug("Found setter {} in class {}", setterMethodName, targetClass.getName());
  				return setter;
  			} catch (NoSuchMethodException e) {
  				logger.debug("Failed to found setter {} in class {}", setterMethodName, targetClass.getName());
  			}
  			targetClass = targetClass.getSuperclass();
  		}
  
  		return null;
  	}
docs: Get setter for the specified property with the specified type.	 *
  @param targetClass class for which a setter will be returned
  @param propertyName name of the property for which a setter will be returned
  @param type a target setter accepts
  @return setter method for the specified property that accepts specified type if one exists, null otherwise