code: private Attribute readAttribute(final Attribute[] attrs, final String type,
                                      final int off, final int len, final char[] buf, final int codeOff,
                                      final Label[] labels) {
          for (int i = 0; i < attrs.length; ++i) {
              if (attrs[i].type.equals(type)) {
                  return attrs[i].read(this, off, len, buf, codeOff, labels);
              }
          }
          return new Attribute(type).read(this, off, len, null, -1, null);
      }
docs: Reads an attribute in {@link #b b}.
  
  @param attrs   prototypes of the attributes that must be parsed during the
  visit of the class. Any attribute whose type is not equal to
  the type of one the prototypes is ignored (i.e. an empty
  {@link Attribute} instance is returned).
  @param type    the type of the attribute.
  @param off     index of the first byte of the attribute's content in
  {@link #b b}. The 6 attribute header bytes, containing the
  type and the length of the attribute, are not taken into
  account here (they have already been read).
  @param len     the length of the attribute's content.
  @param buf     buffer to be used to call {@link #readUTF8 readUTF8},
  {@link #readClass(int, char[]) readClass} or {@link #readConst
  readConst}.
  @param codeOff index of the first byte of code's attribute content in
  {@link #b b}, or -1 if the attribute to be read is not a code
  attribute. The 6 attribute header bytes, containing the type
  and the length of the attribute, are not taken into account
  here.
  @param labels  the labels of the method's code, or <tt>null</tt> if the
  attribute to be read is not a code attribute.
  @return the attribute that has been read, or <tt>null</tt> to skip this
  attribute.