Throw NullPointerExceptions with detail messages.

Bug: 4905110
Change-Id: Iebcc45049c1ea14ceef6d44a19dd8cb618392101
diff --git a/vm/Jni.cpp b/vm/Jni.cpp
index 191b105..3e45e87 100644
--- a/vm/Jni.cpp
+++ b/vm/Jni.cpp
@@ -2263,7 +2263,7 @@
     ScopedJniThreadState ts(env);
 
     if (jelementClass == NULL) {
-        dvmThrowNullPointerException("JNI NewObjectArray element class");
+        dvmThrowNullPointerException("JNI NewObjectArray elementClass == NULL");
         return NULL;
     }
 
diff --git a/vm/native/InternalNative.cpp b/vm/native/InternalNative.cpp
index 7ba1a64..e3c8975 100644
--- a/vm/native/InternalNative.cpp
+++ b/vm/native/InternalNative.cpp
@@ -182,7 +182,7 @@
     char* descriptor = NULL;
 
     if (nameObj == NULL) {
-        dvmThrowNullPointerException(NULL);
+        dvmThrowNullPointerException("name == null");
         goto bail;
     }
     name = dvmCreateCstrFromString(nameObj);
diff --git a/vm/native/dalvik_system_DexFile.cpp b/vm/native/dalvik_system_DexFile.cpp
index 3de6f51..f611410 100644
--- a/vm/native/dalvik_system_DexFile.cpp
+++ b/vm/native/dalvik_system_DexFile.cpp
@@ -160,7 +160,7 @@
     char* outputName;
 
     if (sourceNameObj == NULL) {
-        dvmThrowNullPointerException(NULL);
+        dvmThrowNullPointerException("sourceName == null");
         RETURN_VOID();
     }
 
@@ -255,7 +255,7 @@
     DexOrJar* pDexOrJar = NULL;
 
     if (fileContentsObj == NULL) {
-        dvmThrowNullPointerException(NULL);
+        dvmThrowNullPointerException("fileContents == null");
         RETURN_VOID();
     }
 
@@ -451,7 +451,7 @@
 }
 
 /*
- * public static boolean isDexOptNeeded(String apkName)
+ * public static boolean isDexOptNeeded(String fileName)
  *         throws FileNotFoundException, IOException
  *
  * Returns true if the VM believes that the apk/jar file is out of date
@@ -477,7 +477,7 @@
 
     name = dvmCreateCstrFromString(nameObj);
     if (name == NULL) {
-        dvmThrowNullPointerException(NULL);
+        dvmThrowNullPointerException("fileName == null");
         RETURN_VOID();
     }
     if (access(name, R_OK) != 0) {
diff --git a/vm/native/dalvik_system_VMDebug.cpp b/vm/native/dalvik_system_VMDebug.cpp
index 790bd42..feefdee 100644
--- a/vm/native/dalvik_system_VMDebug.cpp
+++ b/vm/native/dalvik_system_VMDebug.cpp
@@ -505,7 +505,7 @@
      * Only one of these may be NULL.
      */
     if (fileNameStr == NULL && fileDescriptor == NULL) {
-        dvmThrowNullPointerException(NULL);
+        dvmThrowNullPointerException("fileName == null && fd == null");
         RETURN_VOID();
     }
 
@@ -588,7 +588,7 @@
     bool result = false;
 
     if (classAndMethodDescStr == NULL) {
-        dvmThrowNullPointerException(NULL);
+        dvmThrowNullPointerException("classAndMethodDesc == null");
         RETURN_VOID();
     }
 
diff --git a/vm/native/dalvik_system_VMRuntime.cpp b/vm/native/dalvik_system_VMRuntime.cpp
index 682b0e2..ce196a7 100644
--- a/vm/native/dalvik_system_VMRuntime.cpp
+++ b/vm/native/dalvik_system_VMRuntime.cpp
@@ -99,7 +99,7 @@
     int length = args[2];
 
     if (elementClass == NULL) {
-        dvmThrowNullPointerException(NULL);
+        dvmThrowNullPointerException("elementClass == null");
         RETURN_VOID();
     }
     if (length < 0) {
diff --git a/vm/native/java_lang_Class.cpp b/vm/native/java_lang_Class.cpp
index cc0bccb..2c939be 100644
--- a/vm/native/java_lang_Class.cpp
+++ b/vm/native/java_lang_Class.cpp
@@ -440,7 +440,7 @@
     ClassObject* testClass = (ClassObject*) args[1];
 
     if (testClass == NULL) {
-        dvmThrowNullPointerException(NULL);
+        dvmThrowNullPointerException("cls == null");
         RETURN_INT(false);
     }
     RETURN_INT(dvmInstanceof(testClass, thisPtr));
diff --git a/vm/native/java_lang_System.cpp b/vm/native/java_lang_System.cpp
index 8223afd..c5db95a 100644
--- a/vm/native/java_lang_System.cpp
+++ b/vm/native/java_lang_System.cpp
@@ -113,24 +113,19 @@
  */
 static void Dalvik_java_lang_System_arraycopy(const u4* args, JValue* pResult)
 {
-    ArrayObject* srcArray;
-    ArrayObject* dstArray;
-    ClassObject* srcClass;
-    ClassObject* dstClass;
-    int srcPos, dstPos, length;
-    char srcType, dstType;
-    bool srcPrim, dstPrim;
+    ArrayObject* srcArray = (ArrayObject*) args[0];
+    int srcPos = args[1];
+    ArrayObject* dstArray = (ArrayObject*) args[2];
+    int dstPos = args[3];
+    int length = args[4];
 
-    srcArray = (ArrayObject*) args[0];
-    srcPos = args[1];
-    dstArray = (ArrayObject*) args[2];
-    dstPos = args[3];
-    length = args[4];
-
-    /* check for null pointer */
-    if ((Object*)srcArray == NULL || (Object*)dstArray == NULL) {
-        dvmThrowNullPointerException(NULL);
-        assert(dvmCheckException(dvmThreadSelf()));
+    /* Check for null pointers. */
+    if (srcArray == NULL) {
+        dvmThrowNullPointerException("src == null");
+        RETURN_VOID();
+    }
+    if (dstArray == NULL) {
+        dvmThrowNullPointerException("dst == null");
         RETURN_VOID();
     }
 
@@ -155,17 +150,17 @@
         RETURN_VOID();
     }
 
-    srcClass = srcArray->clazz;
-    dstClass = dstArray->clazz;
-    srcType = srcClass->descriptor[1];
-    dstType = dstClass->descriptor[1];
+    ClassObject* srcClass = srcArray->clazz;
+    ClassObject* dstClass = dstArray->clazz;
+    char srcType = srcClass->descriptor[1];
+    char dstType = dstClass->descriptor[1];
 
     /*
      * If one of the arrays holds a primitive type, the other array must
      * hold the same type.
      */
-    srcPrim = (srcType != '[' && srcType != 'L');
-    dstPrim = (dstType != '[' && dstType != 'L');
+    bool srcPrim = (srcType != '[' && srcType != 'L');
+    bool dstPrim = (dstType != '[' && dstType != 'L');
     if (srcPrim || dstPrim) {
         if (srcPrim != dstPrim || srcType != dstType) {
             dvmThrowArrayStoreExceptionIncompatibleArrays(srcClass, dstClass);
@@ -340,9 +335,6 @@
     RETURN_INT(dvmIdentityHashCode(thisPtr));
 }
 
-/*
- * public static String mapLibraryName(String libname)
- */
 static void Dalvik_java_lang_System_mapLibraryName(const u4* args,
     JValue* pResult)
 {
@@ -352,7 +344,7 @@
     char* mappedName;
 
     if (nameObj == NULL) {
-        dvmThrowNullPointerException(NULL);
+        dvmThrowNullPointerException("userLibName == null");
         RETURN_VOID();
     }
 
diff --git a/vm/native/java_lang_VMClassLoader.cpp b/vm/native/java_lang_VMClassLoader.cpp
index c80713c..0640d95 100644
--- a/vm/native/java_lang_VMClassLoader.cpp
+++ b/vm/native/java_lang_VMClassLoader.cpp
@@ -85,7 +85,7 @@
     char* descriptor = NULL;
 
     if (nameObj == NULL) {
-        dvmThrowNullPointerException(NULL);
+        dvmThrowNullPointerException("name == null");
         goto bail;
     }
 
diff --git a/vm/native/java_lang_VMThread.cpp b/vm/native/java_lang_VMThread.cpp
index 57ce006..5a8b4cf 100644
--- a/vm/native/java_lang_VMThread.cpp
+++ b/vm/native/java_lang_VMThread.cpp
@@ -85,7 +85,7 @@
     Thread* thread;
 
     if (object == NULL) {
-        dvmThrowNullPointerException(NULL);
+        dvmThrowNullPointerException("object == null");
         RETURN_VOID();
     }