code: public ObjectAndType initProperty(final Object target, Type type, final String attr) {
      Object propObj = target;
      Object property = null;
  
      int index = 0;
      String[] attrs = Strings.split(attr, ".");
      while (index < attrs.length) {
        try {
          property = getProperty(propObj, attrs[index]);
          Type propertyType = null;
          if (attrs[index].contains("[") && null != property) {
            propertyType = new IdentifierType(property.getClass());
          } else {
            propertyType = type.getPropertyType(attrs[index]);
            if (null == propertyType) {
              logger.error("Cannot find property type [{}] of {}", attrs[index], propObj.getClass());
              throw new RuntimeException(
                  "Cannot find property type " + attrs[index] + " of " + propObj.getClass().getName());
            }
          }
          if (null == property) {
            property = propertyType.newInstance();
            setProperty(propObj, attrs[index], property);
          }
          index++;
          propObj = property;
          type = propertyType;
        } catch (Exception e) {
          throw new RuntimeException(e);
        }
      }
      return new ObjectAndType(property, type);
    }
docs: Initialize target's attribuate path,Return the last property value and type.