Prepare upstream tools for 9+181 integration.

After this CL, CopyUpstreamFiles creates an additional snapshot "9+181"
with files from OpenJDK 9+181. The behavior of the CompareUpstreams
and upstream-diff tools is unchanged (the default reference upstream
is still OpenJDK 8u121-b13).

Test: Verified that the following command produces the same
   output before/after this CL:
   make libcore-compare-upstreams && java -jar \
   out/host/linux-x86/framework/libcore-compare-upstreams.jar

Test: Verified that the following command produces the same
 output before/after this CL, except that it now also produces
 a subdirectory 9+181 with a snapshot of OpenJDK 9+181 files:

 make libcore-copy-upstream-files && java -jar \
 out/host/linux-x86/framework/libcore-copy-upstream-files.jar \
 ~/ojluni-upstreams

Bug: 63554956
Change-Id: I85bfb7556263232ed4e2f9192ebeb5acca04b184
diff --git a/tools/upstream/src/main/java/libcore/CompareUpstreams.java b/tools/upstream/src/main/java/libcore/CompareUpstreams.java
index 65b0074..e3504ae 100644
--- a/tools/upstream/src/main/java/libcore/CompareUpstreams.java
+++ b/tools/upstream/src/main/java/libcore/CompareUpstreams.java
@@ -152,7 +152,8 @@
         headers.add("diff");
         printTsv(out, headers);
         for (Path relPath : relPaths) {
-            Repository expectedUpstream = standardRepositories.currentUpstream(relPath);
+            Repository expectedUpstream = standardRepositories.referenceUpstreamAsOfAndroidP(
+                relPath);
             out.print(relPath + "\t");
             Path ojluniFile = standardRepositories.ojluni().absolutePath(relPath);
             List<String> linesB = Util.readLines(ojluniFile);
diff --git a/tools/upstream/src/main/java/libcore/CopyUpstreamFiles.java b/tools/upstream/src/main/java/libcore/CopyUpstreamFiles.java
index 6bd758e..7137861 100644
--- a/tools/upstream/src/main/java/libcore/CopyUpstreamFiles.java
+++ b/tools/upstream/src/main/java/libcore/CopyUpstreamFiles.java
@@ -45,7 +45,8 @@
             }
         }
         for (Path relPath : relPaths) {
-            Repository expectedUpstream = standardRepositories.currentUpstream(relPath);
+            Repository expectedUpstream = standardRepositories.referenceUpstreamAsOfAndroidP(
+                relPath);
             for (Repository upstream : standardRepositories.upstreams()) {
                 Path upstreamFile = upstream.absolutePath(relPath);
                 if (upstreamFile != null) {
diff --git a/tools/upstream/src/main/java/libcore/StandardRepositories.java b/tools/upstream/src/main/java/libcore/StandardRepositories.java
index a79e905..3bdbebf 100644
--- a/tools/upstream/src/main/java/libcore/StandardRepositories.java
+++ b/tools/upstream/src/main/java/libcore/StandardRepositories.java
@@ -22,6 +22,7 @@
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
 import libcore.Repository.OjluniRepository;
@@ -31,20 +32,34 @@
 
 public class StandardRepositories {
 
+    private final List<Repository> allUpstreams;
+    // upstreams older than what is currently the default
     private final List<Repository> historicUpstreams;
-    private final Repository defaultUpstream;
-    private final Repository jsr166Upstream;
-    private final Repository javaSqlUpstream;
+    private final Repository openJdk8u121;
+    private final Repository openJdk9b113;
+    private final Repository openJdk7u40;
     private final OjluniRepository ojluni;
 
     private StandardRepositories(Path buildTop, Path upstreamRoot) {
-        this.historicUpstreams = openJdkLegacy(upstreamRoot, Arrays.asList("8u60", "7u40"));
-        this.defaultUpstream = openJdkLegacy(upstreamRoot, "8u121-b13");
-        this.jsr166Upstream = openJdk9(upstreamRoot, "9b113+");
-        this.javaSqlUpstream = openJdkLegacy(upstreamRoot, "7u40");
+        // allUpstreams is ordered from latest to earliest
+        Set<Repository> allUpstreams = new LinkedHashSet<>();
+        allUpstreams.add(openJdk9(upstreamRoot, "9+181"));
+        this.openJdk9b113 = addAndReturn(allUpstreams, openJdk9(upstreamRoot, "9b113+"));
+        this.openJdk8u121 = addAndReturn(allUpstreams, openJdkLegacy(upstreamRoot, "8u121-b13"));
+        Repository openJdk8u60 = addAndReturn(allUpstreams, openJdkLegacy(upstreamRoot, "8u60"));
+        this.openJdk7u40 = addAndReturn(allUpstreams, openJdkLegacy(upstreamRoot, "7u40"));
+        this.allUpstreams = Collections.unmodifiableList(new ArrayList<>(allUpstreams));
+        this.historicUpstreams = Collections.unmodifiableList(new ArrayList<>(
+                Arrays.asList(openJdk8u60, openJdk7u40)
+        ));
         this.ojluni = new OjluniRepository(buildTop);
     }
 
+    private static Repository addAndReturn(Set<Repository> repositories, Repository repository) {
+        repositories.add(repository);
+        return repository;
+    }
+
     public List<Repository> historicUpstreams() {
         return historicUpstreams;
     }
@@ -57,10 +72,7 @@
      * Returns all upstream repository snapshots, in order from latest to earliest.
      */
     public List<Repository> upstreams() {
-        List<Repository> upstreams = new ArrayList<>(Arrays.asList(
-                jsr166Upstream, defaultUpstream));
-        upstreams.addAll(historicUpstreams);
-        return Collections.unmodifiableList(upstreams);
+        return allUpstreams;
     }
 
     public static StandardRepositories fromEnv() {
@@ -105,14 +117,14 @@
         return result;
     }
 
-    public Repository currentUpstream(Path relPath) {
+    public Repository referenceUpstreamAsOfAndroidP(Path relPath) {
         boolean isJsr166 = isJsr166(relPath);
         if (isJsr166) {
-            return jsr166Upstream;
+            return openJdk9b113;
         } else if (relPath.startsWith("java/sql/") || relPath.startsWith("javax/sql/")) {
-            return javaSqlUpstream;
+            return openJdk7u40;
         } else {
-            return defaultUpstream;
+            return openJdk8u121;
         }
     }