diff options
Diffstat (limited to 'tools/aapt2/link/TableMerger.h')
-rw-r--r-- | tools/aapt2/link/TableMerger.h | 114 |
1 files changed, 33 insertions, 81 deletions
diff --git a/tools/aapt2/link/TableMerger.h b/tools/aapt2/link/TableMerger.h index c96b1b0b4dfb..47e23dded26f 100644 --- a/tools/aapt2/link/TableMerger.h +++ b/tools/aapt2/link/TableMerger.h @@ -33,106 +33,58 @@ namespace aapt { struct TableMergerOptions { - /** - * If true, resources in overlays can be added without previously having - * existed. - */ + // If true, resources in overlays can be added without previously having existed. bool auto_add_overlay = false; }; -/** - * TableMerger takes resource tables and merges all packages within the tables - * that have the same - * package ID. - * - * If a package has a different name, all the entries in that table have their - * names mangled - * to include the package name. This way there are no collisions. In order to do - * this correctly, - * the TableMerger needs to also mangle any FileReference paths. Once these are - * mangled, - * the original source path of the file, along with the new destination path is - * recorded in the - * queue returned from getFileMergeQueue(). - * - * Once the merging is complete, a separate process can go collect the files - * from the various - * source APKs and either copy or process their XML and put them in the correct - * location in - * the final APK. - */ +// TableMerger takes resource tables and merges all packages within the tables that have the same +// package ID. +// +// It is assumed that any FileReference values have their io::IFile pointer set to point to the +// file they represent. +// +// If a package has a different name, all the entries in that table have their names mangled +// to include the package name. This way there are no collisions. In order to do this correctly, +// the TableMerger needs to also mangle any FileReference paths. Once these are mangled, the +// `IFile` pointer in `FileReference` will point to the original file. +// +// Once the merging is complete, a separate phase can go collect the files from the various +// source APKs and either copy or process their XML and put them in the correct location in the +// final APK. class TableMerger { public: - /** - * Note: The out_table ResourceTable must live longer than this TableMerger. - * References are made to this ResourceTable for efficiency reasons. - */ - TableMerger(IAaptContext* context, ResourceTable* out_table, - const TableMergerOptions& options); - - const std::set<std::string>& merged_packages() const { + // Note: The out_table ResourceTable must live longer than this TableMerger. + // References are made to this ResourceTable for efficiency reasons. + TableMerger(IAaptContext* context, ResourceTable* out_table, const TableMergerOptions& options); + + inline const std::set<std::string>& merged_packages() const { return merged_packages_; } - /** - * Merges resources from the same or empty package. This is for local sources. - * An io::IFileCollection is optional and used to find the referenced Files - * and process them. - */ - bool Merge(const Source& src, ResourceTable* table, - io::IFileCollection* collection = nullptr); - - /** - * Merges resources from an overlay ResourceTable. - * An io::IFileCollection is optional and used to find the referenced Files - * and process them. - */ - bool MergeOverlay(const Source& src, ResourceTable* table, - io::IFileCollection* collection = nullptr); - - /** - * Merges resources from the given package, mangling the name. This is for - * static libraries. - * An io::IFileCollection is needed in order to find the referenced Files and - * process them. - */ - bool MergeAndMangle(const Source& src, const android::StringPiece& package, ResourceTable* table, - io::IFileCollection* collection); - - /** - * Merges a compiled file that belongs to this same or empty package. This is - * for local sources. - */ - bool MergeFile(const ResourceFile& fileDesc, io::IFile* file); - - /** - * Merges a compiled file from an overlay, overriding an existing definition. - */ - bool MergeFileOverlay(const ResourceFile& fileDesc, io::IFile* file); + // Merges resources from the same or empty package. This is for local sources. + // If overlay is true, the resources are treated as overlays. + bool Merge(const Source& src, ResourceTable* table, bool overlay); + + // Merges resources from the given package, mangling the name. This is for static libraries. + // All FileReference values must have their io::IFile set. + bool MergeAndMangle(const Source& src, const android::StringPiece& package, ResourceTable* table); + + // Merges a compiled file that belongs to this same or empty package. + bool MergeFile(const ResourceFile& fileDesc, bool overlay, io::IFile* file); private: DISALLOW_COPY_AND_ASSIGN(TableMerger); - using FileMergeCallback = std::function<bool(const ResourceNameRef&, - const ConfigDescription& config, - FileReference*, FileReference*)>; - IAaptContext* context_; ResourceTable* master_table_; TableMergerOptions options_; ResourceTablePackage* master_package_; std::set<std::string> merged_packages_; - bool MergeFileImpl(const ResourceFile& file_desc, io::IFile* file, - bool overlay); - - bool MergeImpl(const Source& src, ResourceTable* src_table, - io::IFileCollection* collection, bool overlay, bool allow_new); + bool MergeImpl(const Source& src, ResourceTable* src_table, bool overlay, bool allow_new); - bool DoMerge(const Source& src, ResourceTable* src_table, - ResourceTablePackage* src_package, const bool mangle_package, - const bool overlay, const bool allow_new_resources, - const FileMergeCallback& callback); + bool DoMerge(const Source& src, ResourceTable* src_table, ResourceTablePackage* src_package, + bool mangle_package, bool overlay, bool allow_new_resources); std::unique_ptr<FileReference> CloneAndMangleFile(const std::string& package, const FileReference& value); |