Use a class root for detecting java.lang.ref.Reference subclasses.

Change-Id: Ie2b74a5f2a16fedb49b65fbb67e13459877d8822
diff --git a/src/class_linker.cc b/src/class_linker.cc
index 9a7cd16..0299c4a 100644
--- a/src/class_linker.cc
+++ b/src/class_linker.cc
@@ -123,6 +123,7 @@
   "[Ljava/lang/Class;",
   "[Ljava/lang/Object;",
   "Ljava/lang/String;",
+  "Ljava/lang/ref/Reference;",
   "Ljava/lang/reflect/Constructor;",
   "Ljava/lang/reflect/Field;",
   "Ljava/lang/reflect/Method;",
@@ -420,6 +421,8 @@
   CHECK_EQ(java_lang_reflect_Method, Method_class);
 
   // java.lang.ref classes need to be specially flagged, but otherwise are normal classes
+  Class* java_lang_ref_Reference = FindSystemClass("Ljava/lang/ref/Reference;");
+  SetClassRoot(kJavaLangRefReference, java_lang_ref_Reference);
   Class* java_lang_ref_FinalizerReference = FindSystemClass("Ljava/lang/ref/FinalizerReference;");
   java_lang_ref_FinalizerReference->SetAccessFlags(
       java_lang_ref_FinalizerReference->GetAccessFlags() |
@@ -472,7 +475,7 @@
   // Note: we hard code the field indexes here rather than using FindInstanceField
   // as the types of the field can't be resolved prior to the runtime being
   // fully initialized
-  Class* java_lang_ref_Reference = FindSystemClass("Ljava/lang/ref/Reference;");
+  Class* java_lang_ref_Reference = GetClassRoot(kJavaLangRefReference);
   Class* java_lang_ref_ReferenceQueue = FindSystemClass("Ljava/lang/ref/ReferenceQueue;");
   Class* java_lang_ref_FinalizerReference = FindSystemClass("Ljava/lang/ref/FinalizerReference;");
 
@@ -1928,7 +1931,7 @@
     klass->SetAccessFlags(klass->GetAccessFlags() | reference_flags);
   }
   // Disallow custom direct subclasses of java.lang.ref.Reference.
-  if (init_done_ && super->GetDescriptor()->Equals("Ljava/lang/ref/Reference;")) {
+  if (init_done_ && super == GetClassRoot(kJavaLangRefReference)) {
     ThrowLinkageError("Class %s attempts to subclass java.lang.ref.Reference, which is not allowed",
         PrettyDescriptor(klass->GetDescriptor()).c_str());
     return false;
diff --git a/src/class_linker.h b/src/class_linker.h
index 67bb35c..a3157cc 100644
--- a/src/class_linker.h
+++ b/src/class_linker.h
@@ -351,6 +351,7 @@
     kClassArrayClass,
     kObjectArrayClass,
     kJavaLangString,
+    kJavaLangRefReference,
     kJavaLangReflectConstructor,
     kJavaLangReflectField,
     kJavaLangReflectMethod,