code: private <P> void introspectMethods(Class<P> pojoClass, PojoDescriptorImpl<P> descriptor, List<AccessibleObject> nonPublicAccessibleObjects) {
  
      if (getMethodIntrospector() != null) {
        Iterator<Method> methodIterator = getMethodIntrospector().findMethods(pojoClass);
        while (methodIterator.hasNext()) {
          Method method = methodIterator.next();
          boolean methodUsed = false;
          for (PojoPropertyAccessorBuilder<?> builder : getAccessorBuilders()) {
            PojoPropertyAccessor accessor = builder.create(method, descriptor, getDependencies());
            if (accessor != null) {
              boolean registered = registerAccessor(descriptor, accessor);
              if (registered) {
                methodUsed = true;
              }
            }
          }
          if (methodUsed && !isPublicAccessible(method)) {
            // reflective access that violates visibility
            nonPublicAccessibleObjects.add(method);
          }
        }
      }
    }
docs: Introspects the {@link Method}s of the given {@link Class} and adds them to the given {@link PojoDescriptorImpl}.
  
  @param <P> is the generic type of {@code pojoClass}.
  @param pojoClass is the {@link Class} for the {@link PojoDescriptorImpl#getPojoType() pojo type}.
  @param descriptor is the {@link PojoDescriptorImpl} where to add {@link PojoPropertyAccessor}s for detected
  properties.
  @param nonPublicAccessibleObjects is the {@link List} where to add non-public {@link AccessibleObject}s.