code: public static PropertyMetadata getPropertyMetadata(Field field) {
      Property property = field.getAnnotation(Property.class);
      // For fields that have @Property annotation, we expect both setter and
      // getter methods. For all other fields, we only treat them as
      // persistable if we find valid getter and setter methods.
      try {
        PropertyMetadata propertyMetadata = new PropertyMetadata(field);
        return propertyMetadata;
      } catch (NoAccessorMethodException | NoMutatorMethodException exp) {
        if (property != null) {
          throw exp;
        }
      }
      return null;
    }
docs: Returns the metadata for the given field.
  
  @param field
  the field whose metadata has to be prepared
  @return metadata of the given field.