ObjPtr<>-ify ClassExt.

Test: m test-art-host-gtest
Test: testrunner.py --host
Bug: 31113334
Change-Id: If5fe3b9f6e10549b5ca3f395b0c83531cd3ba7a3
diff --git a/dex2oat/linker/image_writer.cc b/dex2oat/linker/image_writer.cc
index e878678..e56fdcf 100644
--- a/dex2oat/linker/image_writer.cc
+++ b/dex2oat/linker/image_writer.cc
@@ -61,7 +61,7 @@
 #include "lock_word.h"
 #include "mirror/array-inl.h"
 #include "mirror/class-inl.h"
-#include "mirror/class_ext.h"
+#include "mirror/class_ext-inl.h"
 #include "mirror/class_loader.h"
 #include "mirror/dex_cache-inl.h"
 #include "mirror/dex_cache.h"
diff --git a/openjdkjvmti/ti_class_definition.cc b/openjdkjvmti/ti_class_definition.cc
index 20feb78..c4287fb 100644
--- a/openjdkjvmti/ti_class_definition.cc
+++ b/openjdkjvmti/ti_class_definition.cc
@@ -40,7 +40,7 @@
 #include "handle.h"
 #include "handle_scope-inl.h"
 #include "mirror/class-inl.h"
-#include "mirror/class_ext.h"
+#include "mirror/class_ext-inl.h"
 #include "mirror/object-inl.h"
 #include "reflection.h"
 #include "thread.h"
diff --git a/openjdkjvmti/ti_redefine.cc b/openjdkjvmti/ti_redefine.cc
index ad11663..27ac88f 100644
--- a/openjdkjvmti/ti_redefine.cc
+++ b/openjdkjvmti/ti_redefine.cc
@@ -67,7 +67,7 @@
 #include "mirror/array-alloc-inl.h"
 #include "mirror/class-alloc-inl.h"
 #include "mirror/class-inl.h"
-#include "mirror/class_ext.h"
+#include "mirror/class_ext-inl.h"
 #include "mirror/object.h"
 #include "mirror/object_array-alloc-inl.h"
 #include "mirror/object_array-inl.h"
diff --git a/runtime/art_method.cc b/runtime/art_method.cc
index 32884fa..b9d514e 100644
--- a/runtime/art_method.cc
+++ b/runtime/art_method.cc
@@ -40,7 +40,7 @@
 #include "jit/profiling_info.h"
 #include "jni/jni_internal.h"
 #include "mirror/class-inl.h"
-#include "mirror/class_ext.h"
+#include "mirror/class_ext-inl.h"
 #include "mirror/executable.h"
 #include "mirror/object-inl.h"
 #include "mirror/object_array-inl.h"
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc
index dde4f36..80e0f46 100644
--- a/runtime/class_linker.cc
+++ b/runtime/class_linker.cc
@@ -175,7 +175,7 @@
   return exception_init_method != nullptr;
 }
 
-static mirror::Object* GetVerifyError(ObjPtr<mirror::Class> c)
+static ObjPtr<mirror::Object> GetVerifyError(ObjPtr<mirror::Class> c)
     REQUIRES_SHARED(Locks::mutator_lock_) {
   ObjPtr<mirror::ClassExt> ext(c->GetExtData());
   if (ext == nullptr) {
@@ -241,8 +241,8 @@
   Runtime* const runtime = Runtime::Current();
   if (!runtime->IsAotCompiler()) {  // Give info if this occurs at runtime.
     std::string extra;
-    if (GetVerifyError(c) != nullptr) {
-      ObjPtr<mirror::Object> verify_error = GetVerifyError(c);
+    ObjPtr<mirror::Object> verify_error = GetVerifyError(c);
+    if (verify_error != nullptr) {
       if (verify_error->IsClass()) {
         extra = mirror::Class::PrettyDescriptor(verify_error->AsClass());
       } else {
@@ -262,14 +262,15 @@
     ObjPtr<mirror::Throwable> pre_allocated = runtime->GetPreAllocatedNoClassDefFoundError();
     self->SetException(pre_allocated);
   } else {
-    if (GetVerifyError(c) != nullptr) {
+    ObjPtr<mirror::Object> verify_error = GetVerifyError(c);
+    if (verify_error != nullptr) {
       // Rethrow stored error.
       HandleEarlierVerifyError(self, this, c);
     }
     // TODO This might be wrong if we hit an OOME while allocating the ClassExt. In that case we
     // might have meant to go down the earlier if statement with the original error but it got
     // swallowed by the OOM so we end up here.
-    if (GetVerifyError(c) == nullptr || wrap_in_no_class_def) {
+    if (verify_error == nullptr || wrap_in_no_class_def) {
       // If there isn't a recorded earlier error, or this is a repeat throw from initialization,
       // the top-level exception must be a NoClassDefFoundError. The potentially already pending
       // exception will be a cause.
diff --git a/runtime/mirror/class_ext-inl.h b/runtime/mirror/class_ext-inl.h
index 8d68dc9..bf51654 100644
--- a/runtime/mirror/class_ext-inl.h
+++ b/runtime/mirror/class_ext-inl.h
@@ -20,10 +20,31 @@
 #include "class_ext.h"
 
 #include "art_method-inl.h"
+#include "object-inl.h"
 
 namespace art {
 namespace mirror {
 
+inline ObjPtr<Object> ClassExt::GetVerifyError() {
+  return GetFieldObject<ClassExt>(OFFSET_OF_OBJECT_MEMBER(ClassExt, verify_error_));
+}
+
+inline ObjPtr<ObjectArray<DexCache>> ClassExt::GetObsoleteDexCaches() {
+  return GetFieldObject<ObjectArray<DexCache>>(
+      OFFSET_OF_OBJECT_MEMBER(ClassExt, obsolete_dex_caches_));
+}
+
+template<VerifyObjectFlags kVerifyFlags,
+         ReadBarrierOption kReadBarrierOption>
+inline ObjPtr<PointerArray> ClassExt::GetObsoleteMethods() {
+  return GetFieldObject<PointerArray, kVerifyFlags, kReadBarrierOption>(
+      OFFSET_OF_OBJECT_MEMBER(ClassExt, obsolete_methods_));
+}
+
+inline ObjPtr<Object> ClassExt::GetOriginalDexFile() {
+  return GetFieldObject<Object>(OFFSET_OF_OBJECT_MEMBER(ClassExt, original_dex_file_));
+}
+
 template<ReadBarrierOption kReadBarrierOption, class Visitor>
 void ClassExt::VisitNativeRoots(Visitor& visitor, PointerSize pointer_size) {
   ObjPtr<PointerArray> arr(GetObsoleteMethods<kDefaultVerifyFlags, kReadBarrierOption>());
diff --git a/runtime/mirror/class_ext.cc b/runtime/mirror/class_ext.cc
index 146adc9..d12f340 100644
--- a/runtime/mirror/class_ext.cc
+++ b/runtime/mirror/class_ext.cc
@@ -102,8 +102,8 @@
   return true;
 }
 
-ClassExt* ClassExt::Alloc(Thread* self) {
-  return down_cast<ClassExt*>(GetClassRoot<ClassExt>()->AllocObject(self).Ptr());
+ObjPtr<ClassExt> ClassExt::Alloc(Thread* self) {
+  return ObjPtr<ClassExt>::DownCast(GetClassRoot<ClassExt>()->AllocObject(self));
 }
 
 void ClassExt::SetVerifyError(ObjPtr<Object> err) {
diff --git a/runtime/mirror/class_ext.h b/runtime/mirror/class_ext.h
index 126f94a..8fbbf5c 100644
--- a/runtime/mirror/class_ext.h
+++ b/runtime/mirror/class_ext.h
@@ -42,25 +42,15 @@
 
   void SetVerifyError(ObjPtr<Object> obj) REQUIRES_SHARED(Locks::mutator_lock_);
 
-  Object* GetVerifyError() REQUIRES_SHARED(Locks::mutator_lock_) {
-    return GetFieldObject<ClassExt>(OFFSET_OF_OBJECT_MEMBER(ClassExt, verify_error_));
-  }
+  ObjPtr<Object> GetVerifyError() REQUIRES_SHARED(Locks::mutator_lock_);
 
-  ObjectArray<DexCache>* GetObsoleteDexCaches() REQUIRES_SHARED(Locks::mutator_lock_) {
-    return GetFieldObject<ObjectArray<DexCache>>(
-        OFFSET_OF_OBJECT_MEMBER(ClassExt, obsolete_dex_caches_));
-  }
+  ObjPtr<ObjectArray<DexCache>> GetObsoleteDexCaches() REQUIRES_SHARED(Locks::mutator_lock_);
 
   template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags,
            ReadBarrierOption kReadBarrierOption = kWithReadBarrier>
-  inline PointerArray* GetObsoleteMethods() REQUIRES_SHARED(Locks::mutator_lock_) {
-    return GetFieldObject<PointerArray, kVerifyFlags, kReadBarrierOption>(
-        OFFSET_OF_OBJECT_MEMBER(ClassExt, obsolete_methods_));
-  }
+  ObjPtr<PointerArray> GetObsoleteMethods() REQUIRES_SHARED(Locks::mutator_lock_);
 
-  Object* GetOriginalDexFile() REQUIRES_SHARED(Locks::mutator_lock_) {
-    return GetFieldObject<Object>(OFFSET_OF_OBJECT_MEMBER(ClassExt, original_dex_file_));
-  }
+  ObjPtr<Object> GetOriginalDexFile() REQUIRES_SHARED(Locks::mutator_lock_);
 
   void SetOriginalDexFile(ObjPtr<Object> bytes) REQUIRES_SHARED(Locks::mutator_lock_);
 
@@ -89,7 +79,7 @@
   inline void VisitNativeRoots(Visitor& visitor, PointerSize pointer_size)
       REQUIRES_SHARED(Locks::mutator_lock_);
 
-  static ClassExt* Alloc(Thread* self) REQUIRES_SHARED(Locks::mutator_lock_);
+  static ObjPtr<ClassExt> Alloc(Thread* self) REQUIRES_SHARED(Locks::mutator_lock_);
 
  private:
   // Field order required by test "ValidateFieldOrderOfJavaCppUnionClasses".