jodd-proxetta/src/main/java/jodd/asm7/Attribute.java
final void putAttributes(
      final SymbolTable symbolTable,
      final byte[] code,
      final int codeLength,
      final int maxStack,
      final int maxLocals,
      final ByteVector output) {
    final ClassWriter classWriter = symbolTable.classWriter;
    Attribute attribute = this;
    while (attribute != null) {
      ByteVector attributeContent =
          attribute.write(classWriter, code, codeLength, maxStack, maxLocals);
      // Put attribute_name_index and attribute_length.
      output.putShort(symbolTable.addConstantUtf8(attribute.type)).putInt(attributeContent.length);
      output.putByteArray(attributeContent.data, 0, attributeContent.length);
      attribute = attribute.nextAttribute;
    }
  }
final void putAttributes(
      final SymbolTable symbolTable,
      final byte[] code,
      final int codeLength,
      final int maxStack,
      final int maxLocals,
      final ByteVector output) {
    final ClassWriter classWriter = symbolTable.classWriter;
    Attribute attribute = this;
    while (attribute != null) {
      ByteVector attributeContent =
          attribute.write(classWriter, code, codeLength, maxStack, maxLocals);
      // Put attribute_name_index and attribute_length.
      output.putShort(symbolTable.addConstantUtf8(attribute.type)).putInt(attributeContent.length);
      output.putByteArray(attributeContent.data, 0, attributeContent.length);
      attribute = attribute.nextAttribute;
    }
  }
final void putAttributes ( final SymbolTable symbolTable , final byte [ ] code , final int codeLength , final int maxStack , final int maxLocals , final ByteVector output ) { final ClassWriter classWriter = symbolTable . classWriter ; Attribute attribute = this ; while ( attribute != null ) { ByteVector attributeContent = attribute . write ( classWriter , code , codeLength , maxStack , maxLocals ) ; // Put attribute_name_index and attribute_length. output . putShort ( symbolTable . addConstantUtf8 ( attribute . type ) ) . putInt ( attributeContent . length ) ; output . putByteArray ( attributeContent . data , 0 , attributeContent . length ) ; attribute = attribute . nextAttribute ; } }
Puts all the attributes of the attribute list that begins with this attribute, in the given
byte vector. This includes the 6 header bytes (attribute_name_index and attribute_length) per
attribute.

@param symbolTable where the constants used in the attributes must be stored.
@param code the bytecode of the method corresponding to these code attributes, or {@literal
null} if they are not code attributes. Corresponds to the 'code' field of the Code
attribute.
@param codeLength the length of the bytecode of the method corresponding to these code
attributes, or 0 if they are not code attributes. Corresponds to the 'code_length' field of
the Code attribute.
@param maxStack the maximum stack size of the method corresponding to these code attributes, or
-1 if they are not code attributes.
@param maxLocals the maximum number of local variables of the method corresponding to these
code attributes, or -1 if they are not code attribute.
@param output where the attributes must be written.
Puts all the attributes of the attribute list that begins with this attribute in the given byte vector . This includes the 6 header bytes ( attribute_name_index and attribute_length ) per attribute .