code: public static PropertyDescriptor getPropertyDescriptorForValue(Object instance, Object propertyValue) {
          if (instance == null || propertyValue == null) {
              return null;
          }
  
          PropertyDescriptor[] descriptors = BeanUtils.getPropertyDescriptors(instance.getClass());
          for (PropertyDescriptor pd : descriptors) {
              if (isAssignableOrConvertibleFrom(pd.getPropertyType(), propertyValue.getClass())) {
                  Object value;
                  try {
                      ReflectionUtils.makeAccessible(pd.getReadMethod());
                      value = pd.getReadMethod().invoke(instance);
                  }
                  catch (Exception e) {
                      throw new FatalBeanException("Problem calling readMethod of " + pd, e);
                  }
                  if (propertyValue.equals(value)) {
                      return pd;
                  }
              }
          }
          return null;
      }
docs: Retrieves a PropertyDescriptor for the specified instance and property value
  
  @param instance The instance
  @param propertyValue The value of the property
  @return The PropertyDescriptor