docs: static void generateMethodsForElement(ClassWriter classWriter, String childName, String classType, String apiName, String[] annotationsDesc) {
          childName = firstToLower(getCleanName(childName));
          String childCamelName = firstToUpper(childName);
          String childType = getFullClassTypeName(childCamelName, apiName);
          String childTypeDesc = getFullClassTypeNameDesc(childCamelName, apiName);
  
          MethodVisitor mVisitor = classWriter.visitMethod(ACC_PUBLIC, childName, "()" + childTypeDesc, "()L" + childType + "<TT;>;", null);
  
          for (String annotationDesc: annotationsDesc) {
              mVisitor.visitAnnotation(annotationDesc, true);
          }
  
          mVisitor.visitCode();
          mVisitor.visitTypeInsn(NEW, childType);
          mVisitor.visitInsn(DUP);
          mVisitor.visitVarInsn(ALOAD, 0);
          mVisitor.visitMethodInsn(INVOKEINTERFACE, classType, "self", "()" + elementTypeDesc, true);
          mVisitor.visitMethodInsn(INVOKESPECIAL, childType, CONSTRUCTOR, "(" + elementTypeDesc + ")V", false);
          mVisitor.visitInsn(ARETURN);
          mVisitor.visitMaxs(3, 1);
          mVisitor.visitEnd();
      }