@Override
 public void appendFinishedValueTypeName(TextOutput out) {
   if (isList) {
     out.append("java.util.List<");
     componentParser.appendFinishedValueTypeName(out);
     out.append('>');
   } else {
     componentParser.appendFinishedValueTypeName(out);
     out.append("[]");
   }
 }
  void write(ClassScope scope, Method method, TextOutput out) {
    MethodHandler.writeMethodDeclarationJava(out, method, paramNames);
    out.openBlock();
    out.append("return ");
    if (isList) {
      out.append("readObjectArray(")
          .append(Util.READER_NAME)
          .append(", null, new ")
          .append(scope.requireFactoryGenerationAndGetName(typeHandler))
          .append(Util.TYPE_FACTORY_NAME_POSTFIX)
          .append("()")
          .append(", false)");
    } else {
      typeHandler.writeInstantiateCode(scope, out);
      out.append('(').append(Util.READER_NAME);
      out.comma().space();
      out.append(paramNames.size() == 1 ? "null" : "nextName");
      out.append(')');
    }
    out.semi();

    out.closeBlock();
  }