code: public PropertyMetadata visitProperty(T owningType,
                                            T declaringType,
                                            String propertyType,
                                            String name,
                                            @Nullable String description,
                                            @Nullable String defaultValue) {
  
          PropertyMetadata metadata = new PropertyMetadata();
          metadata.declaringType = getTypeString(declaringType);
          metadata.name = name;
          metadata.path = NameUtils.hyphenate(buildPropertyPath(owningType, declaringType, name), true);
          metadata.type = propertyType;
          metadata.description = description;
          metadata.defaultValue = defaultValue;
          properties.add(metadata);
          return metadata;
      }
docs: Visit a configuration property.
  
  @param owningType    The type that owns the property
  @param declaringType The declaring type of the property
  @param propertyType  The property type
  @param name          The property name
  @param description   A description for the property
  @param defaultValue  The default value of the property (only used for constant values such as strings, numbers,
  enums etc.)
  @return This property metadata