code: protected <T extends CONTAINER> T convertFromString(String stringValue, Object valueSource, GenericType<T> targetType) {
  
      List<String> stringList = new ArrayList<>();
      int start = 0;
      int length = stringValue.length();
      while (start < length) {
        int end;
        int offset = 1;
        if (stringValue.startsWith(ELEMENT_ESCAPE_START, start)) {
          int newStart = start + ELEMENT_ESCAPE_START.length();
          end = stringValue.indexOf(ELEMENT_ESCAPE_END, newStart);
          if (end > 0) {
            start = newStart;
            offset = ELEMENT_ESCAPE_END.length();
          } else {
            // actually a syntax error, lets be tolerant and ignore it...
            end = stringValue.indexOf(ELEMENT_SEPARATOR, start);
          }
        } else {
          end = stringValue.indexOf(ELEMENT_SEPARATOR, start);
        }
        if (end < 0) {
          end = length;
        }
        String element = stringValue.substring(start, end).trim();
        stringList.add(element);
        if (offset > 1) {
          end = stringValue.indexOf(ELEMENT_SEPARATOR, end + offset);
          if (end < 0) {
            end = length;
          }
        }
        start = end + 1;
      }
      int size = stringList.size();
      T container = createContainer(targetType, size);
      for (int i = 0; i < size; i++) {
        convertContainerEntry(stringList.get(i), i, container, valueSource, targetType, stringValue);
      }
      return container;
    }
docs: This method performs the {@link #convert(Object, Object, GenericType) conversion} for {@link String}
  values.
  
  @param <T> is the generic type of {@code targetType}.
  @param stringValue is the {@link String} value to convert.
  @param valueSource describes the source of the value or {@code null} if NOT available.
  @param targetType is the {@link #getTargetType() target-type} to convert to.
  @return the converted container.