# HG changeset patch # User Thinker K.F. Li # Date 1311587180 -28800 # Node ID 00cd331f8aa8eae9e5787bfa1dab0fca51e4e718 # Parent 1769e52bdd9dfd0fb4d40542e831752e10dadc4b Get unlinked one from a linked one diff -r 1769e52bdd9d -r 00cd331f8aa8 paraspace/dexfile.py --- a/paraspace/dexfile.py Mon Jul 25 16:49:28 2011 +0800 +++ b/paraspace/dexfile.py Mon Jul 25 17:46:20 2011 +0800 @@ -1665,8 +1665,9 @@ # dependence. # class DEXFile_linked(DEXFile): + _dep_decls = None + def _copy_attributes(self, dex): - super(DEXFile_linked, self).__init__() for attr, value in dex.__dict__.items(): setattr(self, attr, value) pass @@ -1683,6 +1684,8 @@ linked = DEXFile_linked() build_dependencies(dex, dep_decls) linked._copy_attributes(dex) + + linked._dep_decls = dep_decls return linked @@ -1698,6 +1701,18 @@ return classdef pass raise ValueError, 'can not find class definition for \'%s\'' % (name) + + def get_unlinked(self): + from paraspace.dex_deptracker import restore_dependencies + unlinked = DEXFile() + + for attr, value in self.__dict__.items(): + setattr(unlinked, attr, value) + pass + + restore_dependencies(unlinked, self._dep_decls) + + return unlinked pass diff -r 1769e52bdd9d -r 00cd331f8aa8 paraspace/tests/injection_test.py --- a/paraspace/tests/injection_test.py Mon Jul 25 16:49:28 2011 +0800 +++ b/paraspace/tests/injection_test.py Mon Jul 25 17:46:20 2011 +0800 @@ -48,5 +48,8 @@ clone = dexfile_insert_class(helloworld_dex, fakefile_def) assert clone assert clone != fakefile_def + + helloworld_unlinked = helloworld_linked.get_unlinked() + assert helloworld_unlinked pass