docs: private static <M extends AccessibleObject & Member, PI extends PropertyInfo> Map<String, PI> resolveProperties(
        Class<?> initialType, Class<?> type, ResolveRequest<M, PI> resolveRequest) {
      Map<String, PI> properties = new LinkedHashMap<String, PI>();
      Class<?> superType = type.getSuperclass();
      if (superType != null && superType != Object.class && superType != Enum.class)
        properties.putAll(resolveProperties(initialType, superType, resolveRequest));
  
      for (M member : resolveRequest.propertyResolver.membersFor(type)) {
        if (canAccessMember(member, resolveRequest.accessLevel)
            && resolveRequest.propertyResolver.isValid(member)
            && resolveRequest.namingConvention.applies(member.getName(), resolveRequest.propertyType)) {
          String name = resolveRequest.nameTransformer.transform(member.getName(),
              PropertyType.FIELD.equals(resolveRequest.propertyType) ? NameableType.FIELD
                  : NameableType.METHOD);
          PI info = resolveRequest.propertyResolver.propertyInfoFor(initialType, member,
              resolveRequest.config, name);
          properties.put(name, info);
  
          if (!Modifier.isPublic(member.getModifiers())
              || !Modifier.isPublic(member.getDeclaringClass().getModifiers()))
            try {
              member.setAccessible(true);
            } catch (SecurityException e) {
              throw new AssertionError(e);
            }
        }
      }
  
      return properties;
    }