jodd-proxetta/src/main/java/jodd/asm7/ClassReader.java
private Attribute readAttribute(
      final Attribute[] attributePrototypes,
      final String type,
      final int offset,
      final int length,
      final char[] charBuffer,
      final int codeAttributeOffset,
      final Label[] labels) {
    for (Attribute attributePrototype : attributePrototypes) {
      if (attributePrototype.type.equals(type)) {
        return attributePrototype.read(
            this, offset, length, charBuffer, codeAttributeOffset, labels);
      }
    }
    return new Attribute(type).read(this, offset, length, null, -1, null);
  }
private Attribute readAttribute(
      final Attribute[] attributePrototypes,
      final String type,
      final int offset,
      final int length,
      final char[] charBuffer,
      final int codeAttributeOffset,
      final Label[] labels) {
    for (Attribute attributePrototype : attributePrototypes) {
      if (attributePrototype.type.equals(type)) {
        return attributePrototype.read(
            this, offset, length, charBuffer, codeAttributeOffset, labels);
      }
    }
    return new Attribute(type).read(this, offset, length, null, -1, null);
  }
Reads a non standard JVMS 'attribute' structure in {@link #b}.

@param attributePrototypes 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 will not
be parsed: its byte array value will be passed unchanged to the ClassWriter.
@param type the type of the attribute.
@param offset the start offset of the JVMS 'attribute' structure in {@link #b}. The 6 attribute
header bytes (attribute_name_index and attribute_length) are not taken into account here.
@param length the length of the attribute's content (excluding the 6 attribute header bytes).
@param charBuffer the buffer to be used to read strings in the constant pool.
@param codeAttributeOffset the start offset of the enclosing Code attribute in {@link #b}, or
-1 if the attribute to be read is not a code attribute. The 6 attribute header bytes
(attribute_name_index and attribute_length) are not taken into account here.
@param labels the labels of the method's code, or {@literal null} if the attribute to be read
is not a code attribute.
@return the attribute that has been read.