docs: private Set<String> collectFields(Class clazz, String fieldPrefix, Set<String> fields) {
          Map<String, Class> fieldsAndClasses = getFieldsAndClasses(clazz, fieldPrefix);
  
          for (Map.Entry<String, Class> entry : fieldsAndClasses.entrySet()) {
              String field = entry.getKey();
              Class fieldClass = entry.getValue();
  
              if (DIRECTLY_PROJECTED_TYPES.contains(fieldClass) || Collection.class.isAssignableFrom(fieldClass)) {
                  fields.add(field);
              } else {
                  collectFields(fieldClass, field + ".", fields);
              }
          }
  
          return fields;
      }