Adding Object::InstanceOf and Class::IsAssignableFrom

Summary:
- Add Object::InstanceOf and Class::IsAssignableFrom
- Fix Cloneable and Serializable interfaces on arrays to be == with FindSystemClass results
- Changed Object::Alloc(Class*) to be Class->NewInstance()

Details:

Add Object::InstanceOf and Class::IsAssignableFrom

	object.h
	common_test.h
	object_test.cc

Fix bug where Cloneable and Serializable where created with AllocClass
and never inserted in the classes table with FindSystemClass by just
creating them directly with FindSystemClass

	class_linker.cc
	object_test.cc

Changed Object::Alloc(Class*) to be Class->NewInstance()

	class_linker.cc
	object.h

Change-Id: I528767fff43aff32c8dc4f7a2d4157598a7dbb89
diff --git a/src/class_linker.cc b/src/class_linker.cc
index 46562ca..925a3b3 100644
--- a/src/class_linker.cc
+++ b/src/class_linker.cc
@@ -132,13 +132,10 @@
 
   // Setup a single, global copy of "interfaces" and "iftable" for
   // reuse across array classes
-  Class* java_lang_Cloneable = AllocClass();
+  Class* java_lang_Cloneable = FindSystemClass("Ljava/lang/Cloneable;");
   CHECK(java_lang_Cloneable != NULL);
-  java_lang_Cloneable->descriptor_ = "Ljava/lang/Cloneable;";
-
-  Class* java_io_Serializable = AllocClass();
+  Class* java_io_Serializable = FindSystemClass("Ljava/io/Serializable;");
   CHECK(java_io_Serializable != NULL);
-  java_io_Serializable->descriptor_ = "Ljava/io/Serializable;";
 
   array_interfaces_ = AllocObjectArray<Class>(2);
   CHECK(array_interfaces_ != NULL);
@@ -157,6 +154,8 @@
   // run Object[] through FindClass to complete initialization
   Class* found_object_array_class = FindSystemClass("[Ljava/lang/Object;");
   CHECK_EQ(object_array_class, found_object_array_class);
+  CHECK_EQ(java_lang_Cloneable, object_array_class->GetInterface(0));
+  CHECK_EQ(java_io_Serializable, object_array_class->GetInterface(1));
 
   // Setup the primitive type classes.
   class_roots_->Set(kPrimitiveByte, CreatePrimitiveClass("B"));
@@ -209,7 +208,7 @@
 }
 
 Class* ClassLinker::AllocClass(Class* java_lang_Class) {
-  return down_cast<Class*>(Object::Alloc(java_lang_Class));
+  return down_cast<Class*>(java_lang_Class->NewInstance());
 }
 
 Class* ClassLinker::AllocClass() {
@@ -217,20 +216,20 @@
 }
 
 StaticField* ClassLinker::AllocStaticField() {
-  return down_cast<StaticField*>(Object::Alloc(GetClassRoot(kJavaLangReflectField)));
+  return down_cast<StaticField*>(GetClassRoot(kJavaLangReflectField)->NewInstance());
 }
 
 InstanceField* ClassLinker::AllocInstanceField() {
-  return down_cast<InstanceField*>(Object::Alloc(GetClassRoot(kJavaLangReflectField)));
+  return down_cast<InstanceField*>(GetClassRoot(kJavaLangReflectField)->NewInstance());
 }
 
 Method* ClassLinker::AllocMethod() {
-  return down_cast<Method*>(Object::Alloc(GetClassRoot(kJavaLangReflectMethod)));
+  return down_cast<Method*>(GetClassRoot(kJavaLangReflectMethod)->NewInstance());
 }
 
 // TODO remove once we can use java.lang.Class.getSystemClassLoader
 PathClassLoader* ClassLinker::AllocPathClassLoader(std::vector<const DexFile*> dex_files) {
-  PathClassLoader* cl = down_cast<PathClassLoader*>(Object::Alloc(GetClassRoot(kDalvikSystemPathClassLoader)));
+  PathClassLoader* cl = down_cast<PathClassLoader*>(GetClassRoot(kDalvikSystemPathClassLoader)->NewInstance());
   cl->SetClassPath(dex_files);
   return cl;
 }
@@ -776,8 +775,7 @@
       if (!DexVerify::VerifyClass(klass)) {
         LG << "Verification failed";  // TODO: ThrowVerifyError
         Object* exception = self->GetException();
-        size_t field_offset = OFFSETOF_MEMBER(Class, verify_error_class_);
-        klass->SetFieldObject(field_offset, exception->GetClass());
+        klass->SetVerifyErrorClass(exception->GetClass());
         klass->SetStatus(Class::kStatusError);
         return false;
       }