docs: @Override
      public void visit(final int version, final int access, final String name,
              final String signature, final String superName,
              final String[] interfaces) {
          if (start) {
              throw new IllegalStateException("visit must be called only once");
          }
          start = true;
          checkState();
          checkAccess(access, Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL
                  + Opcodes.ACC_SUPER + Opcodes.ACC_INTERFACE
                  + Opcodes.ACC_ABSTRACT + Opcodes.ACC_SYNTHETIC
                  + Opcodes.ACC_ANNOTATION + Opcodes.ACC_ENUM
                  + Opcodes.ACC_DEPRECATED + 0x40000); // ClassWriter.ACC_SYNTHETIC_ATTRIBUTE
          if (name == null || !name.endsWith("package-info")) {
              CheckMethodAdapter.checkInternalName(name, "class name");
          }
          if ("java/lang/Object".equals(name)) {
              if (superName != null) {
                  throw new IllegalArgumentException(
                          "The super class name of the Object class must be 'null'");
              }
          } else {
              CheckMethodAdapter.checkInternalName(superName, "super class name");
          }
          if (signature != null) {
              checkClassSignature(signature);
          }
          if ((access & Opcodes.ACC_INTERFACE) != 0) {
              if (!"java/lang/Object".equals(superName)) {
                  throw new IllegalArgumentException(
                          "The super class name of interfaces must be 'java/lang/Object'");
              }
          }
          if (interfaces != null) {
              for (int i = 0; i < interfaces.length; ++i) {
                  CheckMethodAdapter.checkInternalName(interfaces[i],
                          "interface name at index " + i);
              }
          }
          this.version = version;
          super.visit(version, access, name, signature, superName, interfaces);
      }