docs: def _get_requires(self):
          """
          iterator of required classes, fields, methods, determined my
          mining the constant pool for such types
          """
  
          provided = set(self.get_provides(private=True))
          cpool = self.cpool
  
          # loop through the constant pool for API types
          for i, t, _v in cpool.constants():
  
              if t in (CONST_Class, CONST_Fieldref,
                       CONST_Methodref, CONST_InterfaceMethodref):
  
                  # convert this away from unicode so we can
                  pv = str(cpool.pretty_deref_const(i))
  
                  if pv[0] == "[":
                      # sometimes when calling operations on an array
                      # the type embeded in the cpool will be the array
                      # type, not just the class type. Let's only gather
                      # the types themselves and ignore the fact that
                      # the class really wanted an array of them.  In
                      # the event that this was a method or field on the
                      # array, we'll throw away that as well, and just
                      # emit the type contained in the array.
                      t = _typeseq(pv)
                      if t[1] == "L":
                          pv = _pretty_type(t[1:])
                      else:
                          pv = None
  
                  if pv and (pv not in provided):
                      yield pv