Field reflection.

Change-Id: I10ffddbbc20cb5b4bbe7df52fef721e12f4b852c
diff --git a/src/class_linker_test.cc b/src/class_linker_test.cc
index 6b4c5c0..31a39c3 100644
--- a/src/class_linker_test.cc
+++ b/src/class_linker_test.cc
@@ -805,6 +805,28 @@
   EXPECT_EQ(16U, data_offset - array_offset);
 }
 
+TEST_F(ClassLinkerTest, ValidateBoxedTypes) {
+  // Validate that the "value" field is always the 0th field in each of java.lang's box classes.
+  // This lets UnboxPrimitive avoid searching for the field by name at runtime.
+  Class* c;
+  c = class_linker_->FindClass("Ljava/lang/Boolean;", NULL);
+  EXPECT_EQ("value", c->GetIFields()->Get(0)->GetName()->ToModifiedUtf8());
+  c = class_linker_->FindClass("Ljava/lang/Byte;", NULL);
+  EXPECT_EQ("value", c->GetIFields()->Get(0)->GetName()->ToModifiedUtf8());
+  c = class_linker_->FindClass("Ljava/lang/Character;", NULL);
+  EXPECT_EQ("value", c->GetIFields()->Get(0)->GetName()->ToModifiedUtf8());
+  c = class_linker_->FindClass("Ljava/lang/Double;", NULL);
+  EXPECT_EQ("value", c->GetIFields()->Get(0)->GetName()->ToModifiedUtf8());
+  c = class_linker_->FindClass("Ljava/lang/Float;", NULL);
+  EXPECT_EQ("value", c->GetIFields()->Get(0)->GetName()->ToModifiedUtf8());
+  c = class_linker_->FindClass("Ljava/lang/Integer;", NULL);
+  EXPECT_EQ("value", c->GetIFields()->Get(0)->GetName()->ToModifiedUtf8());
+  c = class_linker_->FindClass("Ljava/lang/Long;", NULL);
+  EXPECT_EQ("value", c->GetIFields()->Get(0)->GetName()->ToModifiedUtf8());
+  c = class_linker_->FindClass("Ljava/lang/Short;", NULL);
+  EXPECT_EQ("value", c->GetIFields()->Get(0)->GetName()->ToModifiedUtf8());
+}
+
 TEST_F(ClassLinkerTest, TwoClassLoadersOneClass) {
   const ClassLoader* class_loader_1 = LoadDex("MyClass");
   const ClassLoader* class_loader_2 = LoadDex("MyClass");