@@ -104,11 +104,18 @@ def __init__(self, handle: int, data: bytes):
104104 self .length : int = length
105105
106106 def __repr__ (self ) -> str :
107- return "[String {0:x}: {1}]" .format (self .handle , self .value )
107+ return repr (self .value )
108+ # "[String {0:x}: {1}]".format(self.handle, self.value)
108109
109110 def __str__ (self ):
110111 return self .value
111112
113+ def __hash__ (self ):
114+ return hash (self .value )
115+
116+ def __eq__ (self , other ):
117+ return self .value == other
118+
112119
113120class JavaField :
114121 """
@@ -197,6 +204,33 @@ def __str__(self):
197204
198205 __repr__ = __str__
199206
207+ @property
208+ def serialVersionUID (self ):
209+ """
210+ Mimics the javaobj API
211+ """
212+ return self .serial_version_uid
213+
214+ @property
215+ def flags (self ):
216+ """
217+ Mimics the javaobj API
218+ """
219+ return self .desc_flags
220+ @property
221+ def fields_names (self ):
222+ """
223+ Mimics the javaobj API
224+ """
225+ return [field .name for field in self .fields ]
226+
227+ @property
228+ def fields_types (self ):
229+ """
230+ Mimics the javaobj API
231+ """
232+ return [field .type for field in self .fields ]
233+
200234 def is_array_class (self ) -> bool :
201235 """
202236 Determines if this is an array type
@@ -265,6 +299,23 @@ def __str__(self):
265299
266300 __repr__ = __str__
267301
302+ def __getattr__ (self , name ):
303+ """
304+ Returns the field with the given name
305+ """
306+ for cd_fields in self .field_data .values ():
307+ for field , value in cd_fields .items ():
308+ if field .name == name :
309+ return value
310+
311+ raise AttributeError (name )
312+
313+ def get_class (self ):
314+ """
315+ Returns the class of this instance
316+ """
317+ return self .classdesc
318+
268319 def load_from_blockdata (
269320 self , parser , reader : DataStreamReader , indent : int = 0
270321 ) -> bool :
@@ -297,6 +348,13 @@ def __str__(self):
297348
298349 __repr__ = __str__
299350
351+ @property
352+ def name (self ):
353+ """
354+ Mimics the javaobj API
355+ """
356+ return self .classdesc .name
357+
300358
301359class JavaEnum (ParsedJavaContent ):
302360 """
@@ -308,14 +366,21 @@ def __init__(
308366 ):
309367 super ().__init__ (ContentType .ENUM )
310368 self .handle = handle
311- self .class_desc = class_desc
369+ self .classdesc = class_desc
312370 self .value = value
313371
314372 def __str__ (self ):
315373 return "[Enum 0x{0:x}: {1}]" .format (self .handle , self .value )
316374
317375 __repr__ = __str__
318376
377+ @property
378+ def constant (self ):
379+ """
380+ Mimics the javaobj API
381+ """
382+ return self .value
383+
319384
320385class JavaArray (ParsedJavaContent ):
321386 """
@@ -331,7 +396,7 @@ def __init__(
331396 ):
332397 super ().__init__ (ContentType .ARRAY )
333398 self .handle = handle
334- self .class_desc = class_desc
399+ self .classdesc = class_desc
335400 self .field_type = field_type
336401 self .content = content
337402
0 commit comments