@@ -269,34 +269,42 @@ def do_object(self, parent=None, ident=0):
269269 # Store classdesc of this object
270270 java_object .classdesc = classdesc
271271
272- # classdata[]
273- # TODO: nowrclass, wrclass, externalContents, objectAnnotation
274- if classdesc .flags & self .SC_SERIALIZABLE and not (classdesc .flags & self .SC_WRITE_METHOD ):
275- pass
276- else :
277- raise NotImplementedError ("only nowrclass is implemented." )
278- # create megalist
279- tempclass = classdesc
280- megalist = []
281- megatypes = []
282- while tempclass :
283- print ">>>" , tempclass .fields_names , tempclass
284- fieldscopy = tempclass .fields_names [:]
285- fieldscopy .extend (megalist )
286- megalist = fieldscopy
287-
288- fieldscopy = tempclass .fields_types [:]
289- fieldscopy .extend (megatypes )
290- megatypes = fieldscopy
291-
292- tempclass = tempclass .superclass
293-
294- print "Prepared list of values:" , megalist
295- print "Prepared list of types:" , megatypes
296-
297- for field_name , field_type in zip (megalist , megatypes ):
298- res = self .read_native (field_type , ident )
299- java_object .__setattr__ (field_name , res )
272+ if classdesc .flags & self .SC_EXTERNALIZABLE and not classdesc .flags & self .SC_BLOCK_DATA :
273+ raise NotImplementedError ("externalContents isn't implemented yet" ) # TODO:
274+
275+ if classdesc .flags & self .SC_SERIALIZABLE :
276+ # create megalist
277+ tempclass = classdesc
278+ megalist = []
279+ megatypes = []
280+ while tempclass :
281+ print ">>>" , tempclass .fields_names , tempclass
282+ fieldscopy = tempclass .fields_names [:]
283+ fieldscopy .extend (megalist )
284+ megalist = fieldscopy
285+
286+ fieldscopy = tempclass .fields_types [:]
287+ fieldscopy .extend (megatypes )
288+ megatypes = fieldscopy
289+
290+ tempclass = tempclass .superclass
291+
292+ print "Prepared list of values:" , megalist
293+ print "Prepared list of types:" , megatypes
294+
295+ for field_name , field_type in zip (megalist , megatypes ):
296+ res = self .read_native (field_type , ident )
297+ java_object .__setattr__ (field_name , res )
298+
299+ if classdesc .flags & self .SC_SERIALIZABLE and classdesc .flags & self .SC_WRITE_METHOD or classdesc .flags & self .SC_EXTERNALIZABLE and classdesc .flags & self .SC_BLOCK_DATA :
300+ # objectAnnotation
301+ (opid , ) = self ._readStruct (">B" )
302+ if opid != self .TC_ENDBLOCKDATA : # 0x78:
303+ self .object_stream .seek (- 1 , mode = 1 )
304+ print self .hexdump (self .object_stream .read ())
305+ raise NotImplementedError ("objectAnnotation isn't fully implemented yet" ) # TODO:
306+
307+
300308 return java_object
301309
302310 def do_string (self , parent = None , ident = 0 ):
0 commit comments