docs: private IDLProxyObject doSetFieldValue(String fullField, String field, Object value, Object object,
              boolean useCache, Map<String, ReflectInfo> cachedFields) {
          Field f;
          // check cache
          if (useCache) {
              ReflectInfo info = cachedFields.get(fullField);
              if (info != null) {
                  setField(value, info.target, info.field);
                  return this;
              }
          }
  
          int index = field.indexOf('.');
          if (index != -1) {
              String parent = field.substring(0, index);
              String sub = field.substring(index + 1);
  
              try {
                  f = FieldUtils.findField(object.getClass(), parent);
                  if (f == null) {
                      throw new RuntimeException(
                              "No field '" + parent + "' found at class " + object.getClass().getName());
                  }
                  Class<?> type = f.getType();
                  f.setAccessible(true);
                  Object o = f.get(object);
                  if (o == null) {
                      boolean memberClass = type.isMemberClass();
                      if (memberClass && Modifier.isStatic(type.getModifiers())) {
                          Constructor<?> constructor = type.getConstructor(new Class[0]);
                          constructor.setAccessible(true);
                          o = constructor.newInstance(new Object[0]);
                      } else if (memberClass) {
                          Constructor<?> constructor = type.getConstructor(new Class[] { object.getClass() });
                          constructor.setAccessible(true);
                          o = constructor.newInstance(new Object[] { object });
                      } else {
                          o = type.newInstance();
                      }
                      f.set(object, o);
                  }
                  return put(fullField, sub, value, o);
              } catch (Exception e) {
                  throw new RuntimeException(e.getMessage(), e);
              }
          }
  
          f = FieldUtils.findField(object.getClass(), field);
          if (f == null) {
              throw new RuntimeException("No field '" + field + "' found at class " + object.getClass().getName());
          }
          if (useCache && !cachedFields.containsKey(fullField)) {
              cachedFields.put(fullField, new ReflectInfo(f, object));
          }
          setField(value, object, f);
  
          return this;
      }