Add an Array::Alloc convenience for the compiler.

Change-Id: Ie65321d7439ac0ff0b4a39cb507710df088baa6d
diff --git a/src/object.cc b/src/object.cc
index 8765713..bfa200a 100644
--- a/src/object.cc
+++ b/src/object.cc
@@ -14,6 +14,10 @@
 
 namespace art {
 
+Array* Array::Alloc(Class* array_class, size_t component_count) {
+  return Alloc(array_class, component_count, array_class->GetComponentSize());
+}
+
 bool Class::Implements(const Class* klass) const {
   DCHECK(klass != NULL);
   DCHECK(klass->IsInterface());
diff --git a/src/object.h b/src/object.h
index 8efa059..ca09d07 100644
--- a/src/object.h
+++ b/src/object.h
@@ -604,6 +604,10 @@
     return sizeof(Array) + component_count * component_size;
   }
 
+  // A convenience for code that doesn't know the component size,
+  // and doesn't want to have to work it out itself.
+  static Array* Alloc(Class* array_class, size_t component_count);
+
   static Array* Alloc(Class* array_class,
                       size_t component_count,
                       size_t component_size) {
diff --git a/src/object_test.cc b/src/object_test.cc
index c757297..c517459 100644
--- a/src/object_test.cc
+++ b/src/object_test.cc
@@ -86,6 +86,20 @@
             oa->GetClass()->GetInterface(1));
 }
 
+TEST_F(ObjectTest, AllocArray) {
+  Class* c = class_linker_->FindSystemClass("[I");
+  Array* a = Array::Alloc(c, 1);
+  ASSERT_TRUE(c == a->GetClass());
+
+  c = class_linker_->FindSystemClass("[Ljava/lang/Object;");
+  a = Array::Alloc(c, 1);
+  ASSERT_TRUE(c == a->GetClass());
+
+  c = class_linker_->FindSystemClass("[[Ljava/lang/Object;");
+  a = Array::Alloc(c, 1);
+  ASSERT_TRUE(c == a->GetClass());
+}
+
 template<typename ArrayT>
 void TestPrimitiveArray(ClassLinker* cl) {
   typedef typename ArrayT::ElementType T;