docs: private static void generateVisitorInterface(Set<String> elementNames, List<XsdAttribute> attributes, String apiName) {
          ClassWriter classWriter = generateClass(ELEMENT_VISITOR, JAVA_OBJECT, null, null, ACC_PUBLIC + ACC_ABSTRACT + ACC_SUPER, apiName);
  
          MethodVisitor mVisitor = classWriter.visitMethod(ACC_PUBLIC, CONSTRUCTOR, "()V", null, null);
          mVisitor.visitCode();
          mVisitor.visitVarInsn(ALOAD, 0);
          mVisitor.visitMethodInsn(INVOKESPECIAL, JAVA_OBJECT, CONSTRUCTOR, "()V", false);
          mVisitor.visitInsn(RETURN);
          mVisitor.visitMaxs(1, 1);
          mVisitor.visitEnd();
  
          mVisitor = classWriter.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, VISIT_ELEMENT_NAME, "(" + elementTypeDesc + ")V", null, null);
          mVisitor.visitEnd();
  
          mVisitor = classWriter.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, VISIT_ATTRIBUTE_NAME, "(" + JAVA_STRING_DESC + JAVA_STRING_DESC + ")V", null, null);
          mVisitor.visitEnd();
  
          mVisitor = classWriter.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, VISIT_PARENT_NAME, "(" + elementTypeDesc + ")V", null, null);
          mVisitor.visitEnd();
  
          mVisitor = classWriter.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "visitText", "(" + textTypeDesc + ")V", "<R:" + JAVA_OBJECT_DESC + ">(L" + textType + "<+" + elementTypeDesc + "TR;>;)V", null);
          mVisitor.visitEnd();
  
          mVisitor = classWriter.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "visitComment", "(" + textTypeDesc + ")V", "<R:" + JAVA_OBJECT_DESC + ">(L" + textType + "<+" + elementTypeDesc + "TR;>;)V", null);
          mVisitor.visitEnd();
  
          mVisitor = classWriter.visitMethod(ACC_PUBLIC, "visitOpenDynamic", "()V", null, null);
          mVisitor.visitCode();
          mVisitor.visitInsn(RETURN);
          mVisitor.visitMaxs(0, 1);
          mVisitor.visitEnd();
  
          mVisitor = classWriter.visitMethod(ACC_PUBLIC, "visitCloseDynamic", "()V", null, null);
          mVisitor.visitCode();
          mVisitor.visitInsn(RETURN);
          mVisitor.visitMaxs(0, 1);
          mVisitor.visitEnd();
  
          elementNames.forEach(elementName -> addVisitorParentMethod(classWriter, elementName, apiName));
  
          elementNames.forEach(elementName -> addVisitorElementMethod(classWriter, elementName, apiName));
  
          attributes.forEach(attribute -> addVisitorAttributeMethod(classWriter, attribute));
  
          writeClassToFile(ELEMENT_VISITOR, classWriter, apiName);
      }