Mercurial > paraspace
diff paraspace/injection.py @ 100:355986e5cfbd
Make surce methods of injected class are also being and bug fixed.
- dex_type_2_array_attr_map() misses marked array attributes.
- It is fixed by skiping marked array and use back type instead.
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Tue, 26 Jul 2011 10:06:44 +0800 |
parents | 3898711adb2c |
children | 61cef1662035 |
line wrap: on
line diff
--- a/paraspace/injection.py Mon Jul 25 21:53:33 2011 +0800 +++ b/paraspace/injection.py Tue Jul 26 10:06:44 2011 +0800 @@ -1,6 +1,14 @@ def _relocatable_children(obj): - from paraspace.dexfile import relocatable + from paraspace.dexfile import relocatable, array + + if isinstance(obj, array): + if not obj.items: + return [] + rel_children = [(repr(idx), elt) + for idx, elt in enumerate(obj.items) + if isinstance(elt, relocatable)] + return rel_children attr_value_pairs = [(attr, getattr(obj, attr)) for attr in dir(obj)] rel_children = [(attr, value) for attr, value in attr_value_pairs @@ -45,11 +53,12 @@ pass return clazz - attr_values = [(attr, getattr(DEXFile, attr)) + attr_values = [(attr, skip_marker_type(getattr(DEXFile, attr))) for attr in dir(DEXFile)] - type_2_attr = dict([(skip_marker_type(value.child_type), attr) - for attr, value in attr_values - if isinstance(value, array)]) + array_attrs = [(skip_marker_type(value.child_type), attr) + for attr, value in attr_values + if isinstance(value, array)] + type_2_attr = dict(array_attrs) dex_type_2_array_attr_map = lambda: type_2_attr