Snap for 11904077 from eab9abe11108315a75fcbd52d38bf6231b419a41 to sdk-release

Change-Id: I962042bef14e9de69c142399ac8173958879ef54
diff --git a/android_icu4j/src/main/java/android/icu/impl/ICUBinary.java b/android_icu4j/src/main/java/android/icu/impl/ICUBinary.java
index b1f9a72..5e0c57f 100644
--- a/android_icu4j/src/main/java/android/icu/impl/ICUBinary.java
+++ b/android_icu4j/src/main/java/android/icu/impl/ICUBinary.java
@@ -21,6 +21,7 @@
 import java.nio.channels.FileChannel;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.MissingResourceException;
 import java.util.Set;
@@ -283,7 +284,8 @@
         }
     }
 
-    private static final List<DataFile> icuDataFiles = new ArrayList<>();
+    // Android-changed: make icuDataFiles immutable and assign value exactly once.
+    private static final List<DataFile> icuDataFiles;
 
     static {
         // BEGIN Android-changed: Initialize ICU data file paths.
@@ -297,9 +299,15 @@
             dataPath = AndroidDataFiles.generateIcuDataPath();
         }
         // END Android-changed: Initialize ICU data file paths.
+        // BEGIN Android-changed: make icuDataFiles immutable and assign value exactly once.
         if (dataPath != null) {
-            addDataFilesFromPath(dataPath, icuDataFiles);
+            List<DataFile> resolvedFiles = new ArrayList<>();
+            addDataFilesFromPath(dataPath, resolvedFiles);
+            icuDataFiles = Collections.unmodifiableList(resolvedFiles);
+        } else {
+            icuDataFiles = Collections.emptyList();
         }
+        // END Android-changed: make icuDataFiles immutable and assign value exactly once.
     }
 
     private static void addDataFilesFromPath(String dataPath, List<DataFile> files) {
@@ -322,7 +330,8 @@
                 path = path.substring(0, path.length() - 1);
             }
             if (path.length() != 0) {
-                addDataFilesFromFolder(new File(path), new StringBuilder(), icuDataFiles);
+                // Android-changed: pass `files` argument and not icuDataFiles.
+                addDataFilesFromFolder(new File(path), new StringBuilder(), files);
             }
             if (sepIndex < 0) {
                 break;
diff --git a/icu4j/main/core/src/main/java/com/ibm/icu/impl/ICUBinary.java b/icu4j/main/core/src/main/java/com/ibm/icu/impl/ICUBinary.java
index bd4e8de..7e1d79e 100644
--- a/icu4j/main/core/src/main/java/com/ibm/icu/impl/ICUBinary.java
+++ b/icu4j/main/core/src/main/java/com/ibm/icu/impl/ICUBinary.java
@@ -20,6 +20,7 @@
 import java.nio.channels.FileChannel;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.MissingResourceException;
 import java.util.Set;
@@ -279,7 +280,8 @@
         }
     }
 
-    private static final List<DataFile> icuDataFiles = new ArrayList<>();
+    // Android-changed: make icuDataFiles immutable and assign value exactly once.
+    private static final List<DataFile> icuDataFiles;
 
     static {
         // BEGIN Android-changed: Initialize ICU data file paths.
@@ -293,9 +295,15 @@
             dataPath = AndroidDataFiles.generateIcuDataPath();
         }
         // END Android-changed: Initialize ICU data file paths.
+        // BEGIN Android-changed: make icuDataFiles immutable and assign value exactly once.
         if (dataPath != null) {
-            addDataFilesFromPath(dataPath, icuDataFiles);
+            List<DataFile> resolvedFiles = new ArrayList<>();
+            addDataFilesFromPath(dataPath, resolvedFiles);
+            icuDataFiles = Collections.unmodifiableList(resolvedFiles);
+        } else {
+            icuDataFiles = Collections.emptyList();
         }
+        // END Android-changed: make icuDataFiles immutable and assign value exactly once.
     }
 
     private static void addDataFilesFromPath(String dataPath, List<DataFile> files) {
@@ -318,7 +326,8 @@
                 path = path.substring(0, path.length() - 1);
             }
             if (path.length() != 0) {
-                addDataFilesFromFolder(new File(path), new StringBuilder(), icuDataFiles);
+                // Android-changed: pass `files` argument and not icuDataFiles.
+                addDataFilesFromFolder(new File(path), new StringBuilder(), files);
             }
             if (sepIndex < 0) {
                 break;