def parse(self, reader, pool): self.access_flags = reader.read_short() self.name_index = reader.read_short() self.name = pool.get_value(self.name_index) self.descriptor_index = reader.read_short() self.descriptor = pool.get_value(self.descriptor_index) for attr in Attribute.parse_attributes(reader, pool): self.attributes.append(attr)
def parse_class(self): clazz = JavaClass() self.reader.load_class(self.file) if self.reader.read_int() != 0xCAFEBABE: raise Exception('Not a valid Java class file') clazz.version['minor'] = self.reader.read_short() clazz.version['major'] = self.reader.read_short() pool = self.parse_constant_pool(clazz) clazz.pool = pool clazz.access_flags = pool.get_value(self.reader.read_short()) clazz.class_name = pool.get_value(self.reader.read_short()) clazz.superclass_name = pool.get_value(self.reader.read_short()) clazz.interfaces = self.parse_interface_table(clazz) clazz.fields = self.parse_fields(clazz, pool) clazz.methods = self.parse_methods(clazz, pool) clazz.attributes = Attribute.parse_attributes(self.reader, pool) return clazz