Mercurial > paraspace
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 |