docs: public static void setPropertyValue(Object pObject, String pProperty, Object pValue)
              throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
  
          //
          // TODO: Support set(Object, Object)/put(Object, Object) methods
          //       of Collections!
          //       Handle lists and arrays with [] (index) operator
  
          Class paramType = pValue != null ? pValue.getClass() : Object.class;
  
          // Preserve references
          Object obj = pObject;
          String property = pProperty;
  
          // Recurse and find real parent if property contains a '.'
          int dotIdx = property.indexOf('.');
          if (dotIdx >= 0) {
              // Get real parent
              obj = getPropertyValue(obj, property.substring(0, dotIdx));
              // Get the property of the parent
              property = property.substring(dotIdx + 1);
          }
  
          // Find method
          Object[] params = {pValue};
          Method method = getMethodMayModifyParams(obj, "set" + StringUtil.capitalize(property),
                                                   new Class[] {paramType}, params);
  
          // Invoke it
          method.invoke(obj, params);
      }