Fail doc/api generation when a private super class is exposed.

Added a new error type PRIVATE_SUPERCLASS, which
fails the doc/api generation when a public class's super class is private
and not marked as "@hide".
Note the difference between PRIVATE_SUPERCLASS and the existing
HIDDEN_SUPERCLASS. See their usage in Stubs.java.
HIDDEN_SUPERCLASS: a super class is marked as "@hide". Currently doclava
strips such a class from the doc/api file and gives a warning by default;
PRIVATE_SUPERCLASS: a super class is private but not marked as "@hide".
Previously doclava just outputs the private class to doc/api file. But the
generated api file will fail apicheck. With this change, we fail the doc/api
generation in that case.

Bug:19994527
Change-Id: I7971e40bf7280187253d003cc90ab80d13c986c4
diff --git a/src/com/google/doclava/Errors.java b/src/com/google/doclava/Errors.java
index 84df16b..156de66 100644
--- a/src/com/google/doclava/Errors.java
+++ b/src/com/google/doclava/Errors.java
@@ -172,6 +172,7 @@
   public static final Error INVALID_CONTENT_TYPE = new Error(119, ERROR);
   public static final Error INVALID_SAMPLE_INDEX = new Error(120, ERROR);
   public static final Error HIDDEN_TYPE_PARAMETER = new Error(121, HIDDEN);
+  public static final Error PRIVATE_SUPERCLASS = new Error(122, ERROR);
 
   public static final Error[] ERRORS =
       {UNRESOLVED_LINK, BAD_INCLUDE_TAG, UNKNOWN_TAG, UNKNOWN_PARAM_TAG_NAME,
@@ -183,7 +184,7 @@
           CHANGED_TRANSIENT, CHANGED_VOLATILE, CHANGED_TYPE, CHANGED_VALUE, CHANGED_SUPERCLASS,
           CHANGED_SCOPE, CHANGED_ABSTRACT, CHANGED_THROWS, CHANGED_NATIVE, CHANGED_CLASS,
           CHANGED_DEPRECATED, CHANGED_SYNCHRONIZED, ADDED_FINAL_UNINSTANTIABLE, REMOVED_FINAL,
-          BROKEN_SINCE_FILE, INVALID_CONTENT_TYPE, HIDDEN_TYPE_PARAMETER};
+          BROKEN_SINCE_FILE, INVALID_CONTENT_TYPE, HIDDEN_TYPE_PARAMETER, PRIVATE_SUPERCLASS};
 
   public static boolean setErrorLevel(int code, int level) {
     for (Error e : ERRORS) {
diff --git a/src/com/google/doclava/Stubs.java b/src/com/google/doclava/Stubs.java
index bc5e586..44f1277 100644
--- a/src/com/google/doclava/Stubs.java
+++ b/src/com/google/doclava/Stubs.java
@@ -294,6 +294,10 @@
             + " stripped of unavailable superclass " + supr.qualifiedName());
       } else {
         cantStripThis(supr, notStrippable, "6:" + cl.realSuperclass().name() + cl.qualifiedName());
+        if (supr.isPrivate()) {
+          Errors.error(Errors.PRIVATE_SUPERCLASS, cl.position(), "Public class "
+              + cl.qualifiedName() + " extends private class " + supr.qualifiedName());
+        }
       }
     }
   }