docs: private static void createText(String apiName){
          ClassWriter classWriter = generateClass(TEXT, JAVA_OBJECT, new String[] {ELEMENT}, "<Z::" + elementTypeDesc + "R:" + JAVA_OBJECT_DESC + ">" + JAVA_OBJECT_DESC + "L" + elementType + "<L" + textType + "<TZ;TR;>;TZ;>;", ACC_PUBLIC + ACC_SUPER, apiName);
  
          FieldVisitor fVisitor = classWriter.visitField(ACC_PRIVATE + ACC_FINAL, "text", JAVA_STRING_DESC, null, null);
          fVisitor.visitEnd();
  
          fVisitor = classWriter.visitField(ACC_PROTECTED + ACC_FINAL, "parent", elementTypeDesc, "TZ;", null);
          fVisitor.visitEnd();
  
          fVisitor = classWriter.visitField(ACC_PROTECTED + ACC_FINAL, "visitor", elementVisitorTypeDesc, null, null);
          fVisitor.visitEnd();
  
          MethodVisitor mVisitor = classWriter.visitMethod(ACC_PUBLIC, CONSTRUCTOR, "(" + elementTypeDesc + elementVisitorTypeDesc + JAVA_OBJECT_DESC + ")V", "(TZ;" + elementVisitorTypeDesc + "TR;)V", null);
          mVisitor.visitCode();
          mVisitor.visitVarInsn(ALOAD, 0);
          mVisitor.visitMethodInsn(INVOKESPECIAL, JAVA_OBJECT, CONSTRUCTOR, "()V", false);
          mVisitor.visitVarInsn(ALOAD, 0);
          mVisitor.visitVarInsn(ALOAD, 1);
          mVisitor.visitFieldInsn(PUTFIELD, textType, "parent", elementTypeDesc);
          mVisitor.visitVarInsn(ALOAD, 0);
          mVisitor.visitVarInsn(ALOAD, 2);
          mVisitor.visitFieldInsn(PUTFIELD, textType, "visitor", elementVisitorTypeDesc);
          mVisitor.visitVarInsn(ALOAD, 0);
          mVisitor.visitVarInsn(ALOAD, 3);
          mVisitor.visitMethodInsn(INVOKEVIRTUAL, JAVA_OBJECT, "toString", "()" + JAVA_STRING_DESC, false);
          mVisitor.visitFieldInsn(PUTFIELD, textType, "text", JAVA_STRING_DESC);
          mVisitor.visitInsn(RETURN);
          mVisitor.visitMaxs(2, 4);
          mVisitor.visitEnd();
  
          mVisitor = classWriter.visitMethod(ACC_PUBLIC, "self", "()" + textTypeDesc, "()L" + textType + "<TZ;TR;>;", null);
          mVisitor.visitCode();
          mVisitor.visitVarInsn(ALOAD, 0);
          mVisitor.visitInsn(ARETURN);
          mVisitor.visitMaxs(1, 1);
          mVisitor.visitEnd();
  
          mVisitor = classWriter.visitMethod(ACC_PUBLIC, "__", "()" + elementTypeDesc, "()TZ;", null);
          mVisitor.visitCode();
          mVisitor.visitVarInsn(ALOAD, 0);
          mVisitor.visitFieldInsn(GETFIELD, textType, "visitor", elementVisitorTypeDesc);
          mVisitor.visitVarInsn(ALOAD, 0);
          mVisitor.visitMethodInsn(INVOKEVIRTUAL, elementVisitorType, "visitText", "(" + textTypeDesc + ")V", false);
          mVisitor.visitVarInsn(ALOAD, 0);
          mVisitor.visitFieldInsn(GETFIELD, textType, "parent", elementTypeDesc);
          mVisitor.visitInsn(ARETURN);
          mVisitor.visitMaxs(2, 1);
          mVisitor.visitEnd();
  
          mVisitor = classWriter.visitMethod(ACC_PUBLIC, "getParent", "()" + elementTypeDesc, "()TZ;", null);
          mVisitor.visitCode();
          mVisitor.visitVarInsn(ALOAD, 0);
          mVisitor.visitFieldInsn(GETFIELD, textType, "parent", elementTypeDesc);
          mVisitor.visitInsn(ARETURN);
          mVisitor.visitMaxs(1, 1);
          mVisitor.visitEnd();
  
          mVisitor = classWriter.visitMethod(ACC_PUBLIC, "getName", "()" + JAVA_STRING_DESC, null, null);
          mVisitor.visitCode();
          mVisitor.visitLdcInsn("");
          mVisitor.visitInsn(ARETURN);
          mVisitor.visitMaxs(1, 1);
          mVisitor.visitEnd();
  
          mVisitor = classWriter.visitMethod(ACC_PUBLIC, "getVisitor", "()" + elementVisitorTypeDesc, null, null);
          mVisitor.visitCode();
          mVisitor.visitVarInsn(ALOAD, 0);
          mVisitor.visitFieldInsn(GETFIELD, textType, "visitor", elementVisitorTypeDesc);
          mVisitor.visitInsn(ARETURN);
          mVisitor.visitMaxs(1, 1);
          mVisitor.visitEnd();
  
          mVisitor = classWriter.visitMethod(ACC_PUBLIC, "getValue", "()" + JAVA_STRING_DESC, null, null);
          mVisitor.visitCode();
          mVisitor.visitVarInsn(ALOAD, 0);
          mVisitor.visitFieldInsn(GETFIELD, textType, "text", JAVA_STRING_DESC);
          mVisitor.visitInsn(ARETURN);
          mVisitor.visitMaxs(1, 1);
          mVisitor.visitEnd();
  
          mVisitor = classWriter.visitMethod(ACC_PUBLIC + ACC_BRIDGE + ACC_SYNTHETIC, "self", "()" + elementTypeDesc, null, null);
          mVisitor.visitCode();
          mVisitor.visitVarInsn(ALOAD, 0);
          mVisitor.visitMethodInsn(INVOKEVIRTUAL, textType, "self", "()" + textTypeDesc, false);
          mVisitor.visitInsn(ARETURN);
          mVisitor.visitMaxs(1, 1);
          mVisitor.visitEnd();
  
          writeClassToFile(TEXT, classWriter, apiName);
      }