Work around a couple of doclet API bugs.

- We sometimes receive spurious duplicate ClassInfo
  objects from the root doc that are poorly formed (have
  a "null" position). Discard them.
- Don't call ClassInfo#findClass with an empty string,
  it returns a bogus ClassInfo object.

Change-Id: Ie8b857fc906402993f84df8465e1550be95a5e5d
diff --git a/src/com/google/doclava/Converter.java b/src/com/google/doclava/Converter.java
index 470df9a..bdf6af5 100644
--- a/src/com/google/doclava/Converter.java
+++ b/src/com/google/doclava/Converter.java
@@ -16,12 +16,31 @@
 
 package com.google.doclava;
 
-import com.sun.javadoc.*;
+
+import com.sun.javadoc.AnnotationDesc;
+import com.sun.javadoc.AnnotationTypeDoc;
+import com.sun.javadoc.AnnotationTypeElementDoc;
+import com.sun.javadoc.AnnotationValue;
+import com.sun.javadoc.ClassDoc;
+import com.sun.javadoc.ConstructorDoc;
+import com.sun.javadoc.ExecutableMemberDoc;
+import com.sun.javadoc.FieldDoc;
+import com.sun.javadoc.MemberDoc;
+import com.sun.javadoc.MethodDoc;
+import com.sun.javadoc.PackageDoc;
+import com.sun.javadoc.ParamTag;
+import com.sun.javadoc.Parameter;
+import com.sun.javadoc.RootDoc;
+import com.sun.javadoc.SeeTag;
+import com.sun.javadoc.SourcePosition;
+import com.sun.javadoc.Tag;
+import com.sun.javadoc.ThrowsTag;
+import com.sun.javadoc.Type;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.ArrayList;
 
 public class Converter {
   private static RootDoc root;
@@ -29,15 +48,15 @@
   public static void makeInfo(RootDoc r) {
     root = r;
 
-    int N, i;
-
     // create the objects
-    ClassDoc[] classDocs = r.classes();
-    N = classDocs.length;
-    for (i = 0; i < N; i++) {
-      Converter.obtainClass(classDocs[i]);
+    ClassDoc[] classes = getClasses(r);
+    for (ClassDoc c : classes) {
+      Converter.obtainClass(c);
     }
+
     ArrayList<ClassInfo> classesNeedingInit2 = new ArrayList<ClassInfo>();
+
+    int i;
     // fill in the fields that reference other classes
     while (mClassesNeedingInit.size() > 0) {
       i = mClassesNeedingInit.size() - 1;
@@ -55,7 +74,26 @@
     finishAnnotationValueInit();
 
     // fill in the "root" stuff
-    mRootClasses = Converter.convertClasses(r.classes());
+    mRootClasses = Converter.convertClasses(classes);
+  }
+
+  private static ClassDoc[] getClasses(RootDoc r) {
+    ClassDoc[] classDocs = r.classes();
+    ArrayList<ClassDoc> filtered = new ArrayList<ClassDoc>(classDocs.length);
+    for (ClassDoc c : classDocs) {
+      if (c.position() != null) {
+        // Work around a javadoc bug in Java 7: We sometimes spuriously
+        // receive duplicate top level ClassDocs with null positions and no type
+        // information. Ignore them, since every ClassDoc must have a non null
+        // position.
+
+        filtered.add(c);
+      }
+    }
+
+    ClassDoc[] filteredArray = new ClassDoc[filtered.size()];
+    filtered.toArray(filteredArray);
+    return filteredArray;
   }
 
   private static ClassInfo[] mRootClasses;