code: public Object getPropertyValue(Object instance, boolean forceDirect) {
          try {
              if (instance == null) {
                  return dflt == null || !isSerializable() ? null : getPropertyType().getSerializer().deserialize(dflt);
              }
              
              if (!forceDirect && instance instanceof IPropertyAccessor) {
                  return ((IPropertyAccessor) instance).getPropertyValue(this);
              }
              
              Method method = PropertyUtil.findGetter(getter, instance, null);
              return method == null ? null : method.invoke(instance);
          } catch (Exception e) {
              throw MiscUtil.toUnchecked(e);
          }
      }
docs: Returns the property value for a specified object instance.
  
  @param instance The object instance.
  @param forceDirect If true, a forces a direct read on the instance even if it implements
  IPropertyAccessor
  @return The object's property value.