Move dex_file_tracking_registrar and art_dex_file_loader_test to class_accessor

Test: test-art-host
Bug: 79758018

Change-Id: Ic114d407697176be55c89adf4486cd63fc018844
diff --git a/libdexfile/dex/art_dex_file_loader_test.cc b/libdexfile/dex/art_dex_file_loader_test.cc
index 5f3fc026..3f311b7 100644
--- a/libdexfile/dex/art_dex_file_loader_test.cc
+++ b/libdexfile/dex/art_dex_file_loader_test.cc
@@ -28,6 +28,7 @@
 #include "base/stl_util.h"
 #include "base/unix_file/fd_file.h"
 #include "dex/base64_test_util.h"
+#include "dex/class_accessor-inl.h"
 #include "dex/code_item_accessors-inl.h"
 #include "dex/descriptors_names.h"
 #include "dex/dex_file.h"
@@ -124,16 +125,15 @@
   const DexFile::ClassDef& class_def = raw->GetClassDef(0);
   ASSERT_STREQ("LGetMethodSignature;", raw->GetClassDescriptor(class_def));
 
-  const uint8_t* class_data = raw->GetClassData(class_def);
-  ASSERT_TRUE(class_data != nullptr);
-  ClassDataItemIterator it(*raw, class_data);
-
-  EXPECT_EQ(1u, it.NumDirectMethods());
+  ClassAccessor accessor(*raw, class_def);
+  ASSERT_TRUE(accessor.HasClassData());
+  auto methods = accessor.GetMethods();
+  auto cur_method = methods.begin();
 
   // Check the signature for the static initializer.
   {
-    ASSERT_EQ(1U, it.NumDirectMethods());
-    const DexFile::MethodId& method_id = raw->GetMethodId(it.GetMemberIndex());
+    ASSERT_EQ(1U, accessor.NumDirectMethods());
+    const DexFile::MethodId& method_id = raw->GetMethodId(cur_method->GetIndex());
     const char* name = raw->StringDataByIdx(method_id.name_idx_);
     ASSERT_STREQ("<init>", name);
     std::string signature(raw->GetMethodSignature(method_id).ToString());
@@ -203,10 +203,11 @@
           "java.lang.Object[][] GetMethodSignature.mB()"
       },
   };
-  ASSERT_EQ(arraysize(results), it.NumVirtualMethods());
+  ASSERT_EQ(arraysize(results), accessor.NumVirtualMethods());
   for (const Result& r : results) {
-    it.Next();
-    const DexFile::MethodId& method_id = raw->GetMethodId(it.GetMemberIndex());
+    ++cur_method;
+    ASSERT_TRUE(cur_method != methods.end());
+    const DexFile::MethodId& method_id = raw->GetMethodId(cur_method->GetIndex());
 
     const char* name = raw->StringDataByIdx(method_id.name_idx_);
     ASSERT_STREQ(r.name, name);
@@ -215,8 +216,10 @@
     ASSERT_EQ(r.signature, signature);
 
     std::string plain_method = std::string("GetMethodSignature.") + r.name;
-    ASSERT_EQ(plain_method, raw->PrettyMethod(it.GetMemberIndex(), /* with_signature */ false));
-    ASSERT_EQ(r.pretty_method, raw->PrettyMethod(it.GetMemberIndex(), /* with_signature */ true));
+    ASSERT_EQ(plain_method,
+              raw->PrettyMethod(cur_method->GetIndex(), /* with_signature */ false));
+    ASSERT_EQ(r.pretty_method,
+              raw->PrettyMethod(cur_method->GetIndex(), /* with_signature */ true));
   }
 }
 
diff --git a/libdexfile/dex/dex_file_tracking_registrar.cc b/libdexfile/dex/dex_file_tracking_registrar.cc
index 551bea1..29ff6be 100644
--- a/libdexfile/dex/dex_file_tracking_registrar.cc
+++ b/libdexfile/dex/dex_file_tracking_registrar.cc
@@ -30,6 +30,7 @@
 #endif
 #include "base/memory_tool.h"
 
+#include "class_accessor-inl.h"
 #include "code_item_accessors-inl.h"
 #include "dex_file-inl.h"
 
@@ -155,89 +156,61 @@
 }
 
 void DexFileTrackingRegistrar::SetAllCodeItemRegistration(bool should_poison) {
-  for (size_t classdef_ctr = 0; classdef_ctr < dex_file_->NumClassDefs(); ++classdef_ctr) {
-    const DexFile::ClassDef& cd = dex_file_->GetClassDef(classdef_ctr);
-    const uint8_t* class_data = dex_file_->GetClassData(cd);
-    if (class_data != nullptr) {
-      ClassDataItemIterator cdit(*dex_file_, class_data);
-      cdit.SkipAllFields();
-      while (cdit.HasNextMethod()) {
-        const DexFile::CodeItem* code_item = cdit.GetMethodCodeItem();
-        if (code_item != nullptr) {
-          const void* code_item_begin = reinterpret_cast<const void*>(code_item);
-          size_t code_item_size = dex_file_->GetCodeItemSize(*code_item);
-          range_values_.push_back(std::make_tuple(code_item_begin, code_item_size, should_poison));
-        }
-        cdit.Next();
+  for (ClassAccessor accessor : dex_file_->GetClasses()) {
+    for (const ClassAccessor::Method& method : accessor.GetMethods()) {
+      const DexFile::CodeItem* code_item = method.GetCodeItem();
+      if (code_item != nullptr) {
+        const void* code_item_begin = reinterpret_cast<const void*>(code_item);
+        size_t code_item_size = dex_file_->GetCodeItemSize(*code_item);
+        range_values_.push_back(std::make_tuple(code_item_begin, code_item_size, should_poison));
       }
     }
   }
 }
 
 void DexFileTrackingRegistrar::SetAllCodeItemStartRegistration(bool should_poison) {
-  for (size_t classdef_ctr = 0; classdef_ctr < dex_file_->NumClassDefs(); ++classdef_ctr) {
-    const DexFile::ClassDef& cd = dex_file_->GetClassDef(classdef_ctr);
-    const uint8_t* class_data = dex_file_->GetClassData(cd);
-    if (class_data != nullptr) {
-      ClassDataItemIterator cdit(*dex_file_, class_data);
-      cdit.SkipAllFields();
-      while (cdit.HasNextMethod()) {
-        const DexFile::CodeItem* code_item = cdit.GetMethodCodeItem();
-        if (code_item != nullptr) {
-          const void* code_item_begin = reinterpret_cast<const void*>(code_item);
-          size_t code_item_start = reinterpret_cast<size_t>(code_item);
-          CodeItemInstructionAccessor accessor(*dex_file_, code_item);
-          size_t code_item_start_end = reinterpret_cast<size_t>(accessor.Insns());
-          size_t code_item_start_size = code_item_start_end - code_item_start;
-          range_values_.push_back(std::make_tuple(code_item_begin,
-                                                  code_item_start_size,
-                                                  should_poison));
-        }
-        cdit.Next();
+  for (ClassAccessor class_accessor : dex_file_->GetClasses()) {
+    for (const ClassAccessor::Method& method : class_accessor.GetMethods()) {
+      const DexFile::CodeItem* code_item = method.GetCodeItem();
+      if (code_item != nullptr) {
+        const void* code_item_begin = reinterpret_cast<const void*>(code_item);
+        size_t code_item_start = reinterpret_cast<size_t>(code_item);
+        CodeItemInstructionAccessor accessor(*dex_file_, code_item);
+        size_t code_item_start_end = reinterpret_cast<size_t>(accessor.Insns());
+        size_t code_item_start_size = code_item_start_end - code_item_start;
+        range_values_.push_back(std::make_tuple(code_item_begin,
+                                                code_item_start_size,
+                                                should_poison));
       }
     }
   }
 }
 
 void DexFileTrackingRegistrar::SetAllInsnsRegistration(bool should_poison) {
-  for (size_t classdef_ctr = 0; classdef_ctr < dex_file_->NumClassDefs(); ++classdef_ctr) {
-    const DexFile::ClassDef& cd = dex_file_->GetClassDef(classdef_ctr);
-    const uint8_t* class_data = dex_file_->GetClassData(cd);
-    if (class_data != nullptr) {
-      ClassDataItemIterator cdit(*dex_file_, class_data);
-      cdit.SkipAllFields();
-      while (cdit.HasNextMethod()) {
-        const DexFile::CodeItem* code_item = cdit.GetMethodCodeItem();
-        if (code_item != nullptr) {
-          CodeItemInstructionAccessor accessor(*dex_file_, code_item);
-          const void* insns_begin = reinterpret_cast<const void*>(accessor.Insns());
-          // Member insns_size_in_code_units_ is in 2-byte units
-          size_t insns_size = accessor.InsnsSizeInCodeUnits() * 2;
-          range_values_.push_back(std::make_tuple(insns_begin, insns_size, should_poison));
-        }
-        cdit.Next();
+  for (ClassAccessor class_accessor : dex_file_->GetClasses()) {
+    for (const ClassAccessor::Method& method : class_accessor.GetMethods()) {
+      const DexFile::CodeItem* code_item = method.GetCodeItem();
+      if (code_item != nullptr) {
+        CodeItemInstructionAccessor accessor(*dex_file_, code_item);
+        const void* insns_begin = reinterpret_cast<const void*>(accessor.Insns());
+        // Member insns_size_in_code_units_ is in 2-byte units
+        size_t insns_size = accessor.InsnsSizeInCodeUnits() * 2;
+        range_values_.push_back(std::make_tuple(insns_begin, insns_size, should_poison));
       }
     }
   }
 }
 
 void DexFileTrackingRegistrar::SetCodeItemRegistration(const char* class_name, bool should_poison) {
-  for (size_t classdef_ctr = 0; classdef_ctr < dex_file_->NumClassDefs(); ++classdef_ctr) {
-    const DexFile::ClassDef& cd = dex_file_->GetClassDef(classdef_ctr);
-    const uint8_t* class_data = dex_file_->GetClassData(cd);
-    if (class_data != nullptr) {
-      ClassDataItemIterator cdit(*dex_file_, class_data);
-      cdit.SkipAllFields();
-      while (cdit.HasNextMethod()) {
-        const DexFile::MethodId& methodid_item = dex_file_->GetMethodId(cdit.GetMemberIndex());
-        const char * methodid_name = dex_file_->GetMethodName(methodid_item);
-        const DexFile::CodeItem* code_item = cdit.GetMethodCodeItem();
-        if (code_item != nullptr && strcmp(methodid_name, class_name) == 0) {
-          const void* code_item_begin = reinterpret_cast<const void*>(code_item);
-          size_t code_item_size = dex_file_->GetCodeItemSize(*code_item);
-          range_values_.push_back(std::make_tuple(code_item_begin, code_item_size, should_poison));
-        }
-        cdit.Next();
+  for (ClassAccessor accessor : dex_file_->GetClasses()) {
+    for (const ClassAccessor::Method& method : accessor.GetMethods()) {
+      const DexFile::MethodId& methodid_item = dex_file_->GetMethodId(method.GetIndex());
+      const char * methodid_name = dex_file_->GetMethodName(methodid_item);
+      const DexFile::CodeItem* code_item = method.GetCodeItem();
+      if (code_item != nullptr && strcmp(methodid_name, class_name) == 0) {
+        const void* code_item_begin = reinterpret_cast<const void*>(code_item);
+        size_t code_item_size = dex_file_->GetCodeItemSize(*code_item);
+        range_values_.push_back(std::make_tuple(code_item_begin, code_item_size, should_poison));
       }
     }
   }