From d1e44e27126c8ba20f868a8f70c37633386303c5 Mon Sep 17 00:00:00 2001 From: David Sehr Date: Thu, 6 Oct 2016 17:09:32 -0700 Subject: Add "fixups" for ids referenced in code Allow better visualization by determining which type_id, string_id, method_id, and field_id values are used by code_items. Bug: 29921113 Change-Id: Ia6ff72064104cd5c0868e972ca65536dbeb37b09 Test: dexlayout -s {some favorite apks} --- dexlayout/dex_ir.h | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'dexlayout/dex_ir.h') diff --git a/dexlayout/dex_ir.h b/dexlayout/dex_ir.h index 5e686d3c00..38eb0b1b4b 100644 --- a/dexlayout/dex_ir.h +++ b/dexlayout/dex_ir.h @@ -802,6 +802,31 @@ class TryItem : public Item { using TryItemVector = std::vector>; +class CodeFixups { + public: + CodeFixups(std::vector* type_ids, + std::vector* string_ids, + std::vector* method_ids, + std::vector* field_ids) + : type_ids_(type_ids), + string_ids_(string_ids), + method_ids_(method_ids), + field_ids_(field_ids) { } + + std::vector* TypeIds() const { return type_ids_.get(); } + std::vector* StringIds() const { return string_ids_.get(); } + std::vector* MethodIds() const { return method_ids_.get(); } + std::vector* FieldIds() const { return field_ids_.get(); } + + private: + std::unique_ptr> type_ids_; + std::unique_ptr> string_ids_; + std::unique_ptr> method_ids_; + std::unique_ptr> field_ids_; + + DISALLOW_COPY_AND_ASSIGN(CodeFixups); +}; + class CodeItem : public Item { public: CodeItem(uint16_t registers_size, @@ -833,6 +858,9 @@ class CodeItem : public Item { TryItemVector* Tries() const { return tries_.get(); } CatchHandlerVector* Handlers() const { return handlers_.get(); } + void SetCodeFixups(CodeFixups* fixups) { fixups_.reset(fixups); } + CodeFixups* GetCodeFixups() const { return fixups_.get(); } + void Accept(AbstractDispatcher* dispatch) { dispatch->Dispatch(this); } private: @@ -844,6 +872,7 @@ class CodeItem : public Item { std::unique_ptr insns_; std::unique_ptr tries_; // This can be nullptr. std::unique_ptr handlers_; // This can be nullptr. + std::unique_ptr fixups_; // This can be nullptr. DISALLOW_COPY_AND_ASSIGN(CodeItem); }; -- cgit v1.2.3-59-g8ed1b