Source code for jawa.attributes.bootstrap

import io
from collections import namedtuple
from itertools import repeat
from struct import pack

from jawa.attribute import Attribute

BootstrapMethod = namedtuple(
    'BootstrapMethod',
    ['method_ref', 'bootstrap_args']
)


[docs]class BootstrapMethodsAttribute(Attribute): ADDED_IN = '7' MINIMUM_CLASS_VERSION = (51, 0) def __init__(self, table, name_index=None): super(BootstrapMethodsAttribute, self).__init__( table, name_index or table.cf.constants.create_utf8( 'BootstrapMethods' ).index ) self.table = [] def __repr__(self): return '<BootstrapMethods(table={self.table})>'.format( self=self )
[docs] def pack(self): out = io.BytesIO() out.write(pack('>H', len(self.table))) for table_entry in self.table: out.write(pack( '>HH', table_entry.method_ref, len(table_entry.bootstrap_args) )) out.write(pack( '>{0}H'.format(len(table_entry.bootstrap_args)), table_entry.bootstrap_args )) return out.getvalue()
[docs] def unpack(self, info): length = info.u2() for _ in repeat(None, length): self.table.append(BootstrapMethod( info.u2(), info.unpack('>{0}H'.format(info.u2())) ))