comparison paraspace/dexfile.py @ 97:00cd331f8aa8

Get unlinked one from a linked one
author Thinker K.F. Li <thinker@codemud.net>
date Mon, 25 Jul 2011 17:46:20 +0800
parents 9373465643e0
children c0c127c7b37e
comparison
equal deleted inserted replaced
96:1769e52bdd9d 97:00cd331f8aa8
1663 # Instances of this class was built from instances of DEXFile. 1663 # Instances of this class was built from instances of DEXFile.
1664 # Dependencies are linked to depend-on objects; the target of a 1664 # Dependencies are linked to depend-on objects; the target of a
1665 # dependence. 1665 # dependence.
1666 # 1666 #
1667 class DEXFile_linked(DEXFile): 1667 class DEXFile_linked(DEXFile):
1668 _dep_decls = None
1669
1668 def _copy_attributes(self, dex): 1670 def _copy_attributes(self, dex):
1669 super(DEXFile_linked, self).__init__()
1670 for attr, value in dex.__dict__.items(): 1671 for attr, value in dex.__dict__.items():
1671 setattr(self, attr, value) 1672 setattr(self, attr, value)
1672 pass 1673 pass
1673 pass 1674 pass
1674 1675
1681 raise TypeError, 'first argument must be an instance of DEXFile' 1682 raise TypeError, 'first argument must be an instance of DEXFile'
1682 1683
1683 linked = DEXFile_linked() 1684 linked = DEXFile_linked()
1684 build_dependencies(dex, dep_decls) 1685 build_dependencies(dex, dep_decls)
1685 linked._copy_attributes(dex) 1686 linked._copy_attributes(dex)
1687
1688 linked._dep_decls = dep_decls
1686 1689
1687 return linked 1690 return linked
1688 1691
1689 ## \brief Return name string of a linked class definition item 1692 ## \brief Return name string of a linked class definition item
1690 @staticmethod 1693 @staticmethod
1696 classdef_name = DEXFile_linked.get_classdef_name(classdef) 1699 classdef_name = DEXFile_linked.get_classdef_name(classdef)
1697 if classdef_name == name: 1700 if classdef_name == name:
1698 return classdef 1701 return classdef
1699 pass 1702 pass
1700 raise ValueError, 'can not find class definition for \'%s\'' % (name) 1703 raise ValueError, 'can not find class definition for \'%s\'' % (name)
1704
1705 def get_unlinked(self):
1706 from paraspace.dex_deptracker import restore_dependencies
1707 unlinked = DEXFile()
1708
1709 for attr, value in self.__dict__.items():
1710 setattr(unlinked, attr, value)
1711 pass
1712
1713 restore_dependencies(unlinked, self._dep_decls)
1714
1715 return unlinked
1701 pass 1716 pass
1702 1717
1703 1718
1704 if __name__ == '__main__': 1719 if __name__ == '__main__':
1705 import sys 1720 import sys