Add JNI GetArrayLength and start throwing from FindClass.

Change-Id: I080a6ffc5496b47454273acd58c230bda5e04cdd
diff --git a/src/class_linker.cc b/src/class_linker.cc
index 92cf4de..0999788 100644
--- a/src/class_linker.cc
+++ b/src/class_linker.cc
@@ -432,6 +432,7 @@
     if (klass != NULL) {
       return klass;
     }
+    Thread::Current()->ClearException();
   }
 
   Thread* self = Thread::Current();
@@ -447,7 +448,9 @@
     DexFile::ClassPath& class_path = ((class_loader != NULL) ? class_loader->GetClassPath() : boot_class_path_);
     DexFile::ClassPathEntry pair = DexFile::FindInClassPath(descriptor, class_path);
     if (pair.second == NULL) {
-      LG << "Class " << PrintableString(descriptor) << " not found in class loader " << class_loader;  // TODO: NoClassDefFoundError
+      std::string name(PrintableString(descriptor));
+      self->ThrowNewException("Ljava/lang/NoClassDefFoundError;",
+          "Class %s not found in class loader %p", name.c_str(), class_loader);
       return NULL;
     }
     const DexFile& dex_file = *pair.first;
@@ -515,7 +518,7 @@
     ObjectLock lock(klass);
     // Check for circular dependencies between classes.
     if (!klass->IsLinked() && klass->clinit_thread_id_ == self->GetId()) {
-      LG << "Recursive link";  // TODO: ClassCircularityError
+      self->ThrowNewException("Ljava/lang/ClassCircularityError;", NULL); // TODO: detail
       return NULL;
     }
     // Wait for the pending initialization to complete.
@@ -971,13 +974,11 @@
       return GetClassRoot(kPrimitiveBoolean);
     case 'V':
       return GetClassRoot(kPrimitiveVoid);
-    case 'L':
-    case '[':
-      LOG(ERROR) << "Not a primitive type " << PrintableChar(type);
-    default:
-      LOG(ERROR) << "Unknown primitive type " << PrintableChar(type);
   }
-  return NULL;  // Not reachable.
+  std::string printable_type(PrintableChar(type));
+  Thread::Current()->ThrowNewException("Ljava/lang/NoClassDefFoundError;",
+      "Not a primitive type: %s", printable_type.c_str());
+  return NULL;
 }
 
 bool ClassLinker::InsertClass(const StringPiece& descriptor, Class* klass) {