Snap for 4496165 from b052455f5696233618986c49859926379b0dd0ec to pi-release

Change-Id: I0e86df66a93af8e44aae0066ab0cb4eddf895334
diff --git a/src/jdiff/HTMLReportGenerator.java b/src/jdiff/HTMLReportGenerator.java
index f45e9ac..c0ca4ff 100755
--- a/src/jdiff/HTMLReportGenerator.java
+++ b/src/jdiff/HTMLReportGenerator.java
@@ -383,6 +383,10 @@
                 writeClassTableEntry(pkgName, className, 1, classAPI.isInterface_, classAPI.doc_, false);
             }
             writeTableEnd();
+            // Now emit a separate file for each added class and interface.
+            for (ClassAPI classApi : pkgDiff.classesAdded) {
+                reportAddedClass(pkgName, classApi);
+            }
         }
 
         // Report classes which were changed in the new API
@@ -428,6 +432,39 @@
         reportFile = oldReportFile;
     }
 
+    /**
+     * Write out a quick redirection file for added classes.
+     */
+    public void reportAddedClass(String pkgName, ClassAPI classApi) {
+        String className = classApi.name_;
+
+        String localReportFileName = reportFileName + JDiff.DIR_SEP + pkgName + "." + className
+                + reportFileExt;
+        if (outputDir != null)
+            localReportFileName = outputDir + JDiff.DIR_SEP + localReportFileName;
+
+        try (PrintWriter pw = new PrintWriter(new FileOutputStream(localReportFileName))) {
+            // Link to HTML file for the class
+            String classRef = pkgName + "." + className;
+            // Deal with inner classes
+            if (className.indexOf('.') != -1) {
+                classRef = pkgName + ".";
+                classRef = classRef.replace('.', '/');
+                classRef = newDocPrefix + classRef + className;
+            } else {
+                classRef = classRef.replace('.', '/');
+                classRef = newDocPrefix + classRef;
+            }
+
+            pw.write("<html><head><meta http-equiv=\"refresh\" content=\"0;URL='" + classRef
+                    + ".html'\" /></head></html>");
+        } catch(IOException e) {
+            System.out.println("IO Error while attempting to create " + localReportFileName);
+            System.out.println("Error: "+ e.getMessage());
+            System.exit(1);
+        }
+    }
+
     /** 
      * Write out the details of a changed class in a separate file. 
      */
diff --git a/src/jdiff/PackageDiff.java b/src/jdiff/PackageDiff.java
index ba94f6e..94606ac 100755
--- a/src/jdiff/PackageDiff.java
+++ b/src/jdiff/PackageDiff.java
@@ -14,11 +14,11 @@
     public String name_;
 
     /** Classes added in the new API. */
-    public List classesAdded = null;
+    public List<ClassAPI> classesAdded = null;
     /** Classes removed in the new API. */
-    public List classesRemoved = null;
+    public List<ClassAPI> classesRemoved = null;
     /** Classes changed in the new API. */
-    public List classesChanged = null;
+    public List<ClassDiff> classesChanged = null;
 
     /** 
      * A string describing the changes in documentation. 
@@ -31,8 +31,8 @@
     /** Default constructor. */
     public PackageDiff(String name) {
         name_ = name;
-        classesAdded = new ArrayList(); // ClassAPI[]
-        classesRemoved = new ArrayList(); // ClassAPI[]
-        classesChanged = new ArrayList(); // ClassDiff[]
+        classesAdded = new ArrayList<>();
+        classesRemoved = new ArrayList<>();
+        classesChanged = new ArrayList<>();
     }   
 }