docs: public static Object[] despreadList(Object[] args, Object[] spreads, int[] positions) {
          List ret = new ArrayList();
          int argsPos = 0;
          int spreadPos = 0;
          for (int pos = 0; pos < positions.length; pos++) {
              for (; argsPos < positions[pos]; argsPos++) {
                  ret.add(args[argsPos]);
              }
              Object value = spreads[spreadPos];
              if (value == null) {
                  ret.add(null);
              } else if (value instanceof List) {
                  ret.addAll((List) value);
              } else if (value.getClass().isArray()) {
                  ret.addAll(DefaultTypeTransformation.primitiveArrayToList(value));
              } else {
                  String error = "cannot spread the type " + value.getClass().getName() + " with value " + value;
                  if (value instanceof Map) {
                      error += ", did you mean to use the spread-map operator instead?";
                  }
                  throw new IllegalArgumentException(error);
              }
              spreadPos++;
          }
          for (; argsPos < args.length; argsPos++) {
              ret.add(args[argsPos]);
          }
          return ret.toArray();
      }