docs: private static Converter<List<String>, Object> createListConverter(Type resultType) {
      // Use boxed type if raw type is primitive type. Otherwise the type won't change.
      Class<?> resultClass = getRawClass(resultType);
  
      // For string, just return the first value
      if (resultClass == String.class) {
        return new BasicConverter(defaultValue(resultClass)) {
          @Override
          protected Object convert(String value) throws Exception {
            return value;
          }
        };
      }
  
      // Creates converter based on the type
  
      // Primitive
      Converter<List<String>, Object> converter = createPrimitiveTypeConverter(resultClass);
      if (converter != null) {
        return converter;
      }
  
      // String constructor
      converter = createStringConstructorConverter(resultClass);
      if (converter != null) {
        return converter;
      }
  
      // Static string argument methods
      converter = createStringMethodConverter(resultClass);
      if (converter != null) {
        return converter;
      }
  
      // Collection
      converter = createCollectionConverter(resultType);
      if (converter != null) {
        return converter;
      }
  
      throw new IllegalArgumentException("Unsupported type " + resultType + " of type class " + resultType.getClass());
    }