@@ -306,16 +306,6 @@ def __eq__(self, other):
306306 return False
307307 return True
308308
309- def copy (self , new_object ):
310- """
311- Returns a shallow copy of this object
312- """
313- new_object .classdesc = self .classdesc
314- new_object .annotations = self .annotations
315-
316- for name in self .classdesc .fields_names :
317- new_object .__setattr__ (name , getattr (self , name ))
318-
319309
320310class JavaString (str ):
321311 """
@@ -768,16 +758,22 @@ def do_object(self, parent=None, ident=0):
768758 self .TC_NULL , self .TC_REFERENCE ))
769759 # self.TC_REFERENCE hasn't shown in spec, but actually is here
770760
771- # classdata[]
761+ # Create object
762+ for transformer in self .object_transformers :
763+ java_object = transformer .create (classdesc )
764+ if java_object :
765+ break
772766
773767 # Store classdesc of this object
774768 java_object .classdesc = classdesc
775769
770+ # Store the reference
771+ self ._add_reference (java_object , ident )
772+
773+ # classdata[]
774+
776775 if classdesc .flags & self .SC_EXTERNALIZABLE \
777776 and not classdesc .flags & self .SC_BLOCK_DATA :
778- # Store the reference anyway (to avoid a delta in indices)
779- self ._add_reference (java_object , ident )
780-
781777 # TODO:
782778 raise NotImplementedError ("externalContents isn't implemented yet" )
783779
@@ -839,16 +835,6 @@ def do_object(self, parent=None, ident=0):
839835 log_debug ("java_object.annotations after: {0}"
840836 .format (java_object .annotations ), ident )
841837
842- # Transform object
843- for transformer in self .object_transformers :
844- tmp_object = transformer .transform (java_object )
845- if tmp_object is not java_object :
846- java_object = tmp_object
847- break
848-
849- # Store the reference
850- self ._add_reference (java_object , ident )
851-
852838 log_debug (">>> java_object: {0}" .format (java_object ), ident )
853839 return java_object
854840
@@ -900,12 +886,6 @@ def do_array(self, parent=None, ident=0):
900886 (size ,) = self ._readStruct (">i" )
901887 log_debug ("size: {0}" .format (size ), ident )
902888
903- if isinstance (classdesc , JavaArray ):
904- # Issue #5 (JCEKS): It seems that a similar array can be referred
905- # instead of its type
906- log_debug ("JavaArray referred instead of a classdesc..." , ident )
907- classdesc = classdesc .classdesc
908-
909889 type_char = classdesc .name [0 ]
910890 assert type_char == self .TYPE_ARRAY
911891 type_char = classdesc .name [1 ]
@@ -1425,48 +1405,36 @@ def __init__(self, *args, **kwargs):
14251405 dict .__init__ (self , * args , ** kwargs )
14261406 JavaObject .__init__ (self )
14271407
1428- def transform (self , java_object ):
1408+ def create (self , classdesc ):
14291409 """
14301410 Transforms a deserialized Java object into a Python object
14311411
14321412 :param java_object: A JavaObject instance
14331413 :return: The Python form of the object, or the original JavaObject
14341414 """
1435- # Get the Java java_object class name
1436- classname = java_object .get_class ().name
14371415
1438- if classname in ("java.util.ArrayList" , "java.util.LinkedList" ):
1416+ if classdesc . name in ("java.util.ArrayList" , "java.util.LinkedList" ):
14391417 # @serialData The length of the array backing the <tt>ArrayList</tt>
14401418 # instance is emitted (int), followed by all of its
14411419 # elements (each an <tt>Object</tt>) in the proper order
14421420 log_debug ("---" )
1443- log_debug (classname )
1444- log_debug (java_object .annotations )
1421+ log_debug (classdesc .name )
14451422 log_debug ("---" )
14461423
1447- new_object = self .JavaList ()
1448- java_object .copy (new_object )
1449- new_object .extend (java_object .annotations [1 :])
1424+ java_object = self .JavaList ()
14501425
1451- log_debug (">>> java_object: {0}" .format (new_object ))
1452- return new_object
1426+ log_debug (">>> java_object: {0}" .format (java_object ))
1427+ return java_object
14531428
1454- elif java_object . get_class () .name == "java.util.HashMap" :
1429+ if classdesc .name == "java.util.HashMap" :
14551430 log_debug ("---" )
14561431 log_debug ("java.util.HashMap" )
1457- log_debug (java_object .annotations )
14581432 log_debug ("---" )
14591433
1460- new_object = self .JavaMap ()
1461- java_object .copy (new_object )
1462-
1463- for i in range ((len (java_object .annotations ) - 1 ) // 2 ):
1464- new_object [java_object .annotations [i * 2 + 1 ]] = \
1465- java_object .annotations [i * 2 + 2 ]
1434+ java_object = self .JavaMap ()
14661435
1467- log_debug (">>> java_object: {0}" .format (new_object ))
1468- return new_object
1469-
1470- else :
1471- # Return the JavaObject by default
1436+ log_debug (">>> java_object: {0}" .format (java_object ))
14721437 return java_object
1438+
1439+ # Return a JavaObject by default
1440+ return JavaObject ()
0 commit comments