summaryrefslogtreecommitdiff
path: root/libdexfile/dex/class_accessor.h
diff options
context:
space:
mode:
Diffstat (limited to 'libdexfile/dex/class_accessor.h')
-rw-r--r--libdexfile/dex/class_accessor.h24
1 files changed, 18 insertions, 6 deletions
diff --git a/libdexfile/dex/class_accessor.h b/libdexfile/dex/class_accessor.h
index 59a6b5dfa5..835c4e2eb7 100644
--- a/libdexfile/dex/class_accessor.h
+++ b/libdexfile/dex/class_accessor.h
@@ -18,10 +18,13 @@
#define ART_LIBDEXFILE_DEX_CLASS_ACCESSOR_H_
#include "base/utils.h"
+#include "code_item_accessors.h"
#include "dex_file.h"
namespace art {
+class ClassIteratorData;
+
// Classes to access Dex data.
class ClassAccessor {
public:
@@ -40,10 +43,15 @@ class ClassAccessor {
return code_off_;
}
+ CodeItemInstructionAccessor GetInstructions() const;
+
private:
+ explicit Method(const DexFile& dex_file) : dex_file_(dex_file) {}
+
const uint8_t* Read(const uint8_t* ptr);
// A decoded version of the method of a class_data_item.
+ const DexFile& dex_file_;
uint32_t method_idx_ = 0u;
uint32_t access_flags_ = 0u;
uint32_t code_off_ = 0u;
@@ -72,7 +80,10 @@ class ClassAccessor {
friend class ClassAccessor;
};
- ALWAYS_INLINE ClassAccessor(const DexFile& dex_file, const DexFile::ClassDef& class_def);
+ // Not explicit specifically for range-based loops.
+ ALWAYS_INLINE ClassAccessor(const ClassIteratorData& data);
+
+ ClassAccessor(const DexFile& dex_file, const DexFile::ClassDef& class_def);
// Return the code item for a method.
const DexFile::CodeItem* GetCodeItem(const Method& method) const;
@@ -112,18 +123,19 @@ class ClassAccessor {
return num_virtual_methods_;
}
- protected:
- ALWAYS_INLINE ClassAccessor(const DexFile& dex_file, const uint8_t* class_data);
+ // TODO: Deprecate
+ dex::TypeIndex GetDescriptorIndex() const {
+ return descriptor_index_;
+ }
+ protected:
const DexFile& dex_file_;
+ const dex::TypeIndex descriptor_index_ = {};
const uint8_t* ptr_pos_ = nullptr; // Pointer into stream of class_data_item.
const uint32_t num_static_fields_ = 0u;
const uint32_t num_instance_fields_ = 0u;
const uint32_t num_direct_methods_ = 0u;
const uint32_t num_virtual_methods_ = 0u;
- // Only cache descriptor.
- const void* class_def_ = nullptr;
- const void* class_data_ = nullptr;
};
} // namespace art