Tracking merge of dalvik-dev to gingerbread

git cherry-pick --no-commit f2f3e4b2
git cherry-pick --no-commit b6a08f0cd36b12054ac73992a2737ea294387116
git cherry-pick --no-commit d05d74b2d6f717ee25ca14c913ea7610c030ecd1
git cherry-pick --no-commit 5479d77e320420ef0cd7250d1a6729839ef907ce

Change-Id: I6f339aa73823e053146719b3af7af91d5375df1c
diff --git a/tools/droiddoc/src/Stubs.java b/tools/droiddoc/src/Stubs.java
index e1ec76a..b988ef5 100644
--- a/tools/droiddoc/src/Stubs.java
+++ b/tools/droiddoc/src/Stubs.java
@@ -315,6 +315,12 @@
             return;
         }
 
+        // Work around the bogus "Array" class we invent for
+        // Arrays.copyOf's Class<? extends T[]> newType parameter. (http://b/2715505)
+        if (cl.containingPackage() != null && cl.containingPackage().name().equals("")) {
+            return;
+        }
+
         String filename = stubsDir + '/' + javaFileName(cl);
         File file = new File(filename);
         ClearPage.ensureDirectory(file);
@@ -788,6 +794,11 @@
                                 HashSet notStrippable) {
         ClassInfo[] classes = classList.toArray(new ClassInfo[classList.size()]);
         Arrays.sort(classes, ClassInfo.comparator);
+        // Work around the bogus "Array" class we invent for
+        // Arrays.copyOf's Class<? extends T[]> newType parameter. (http://b/2715505)
+        if (pack.name().equals("")) {
+            return;
+        }
         xmlWriter.println("<package name=\"" + pack.name() + "\"\n"
                 //+ " source=\"" + pack.position() + "\"\n"
                 + ">");