Merge "Reduce memory usage by avoiding clones of ZoneInfoData objects"
diff --git a/android_icu4j/api/intra/current.txt b/android_icu4j/api/intra/current.txt
index e3c443a..a1e0810 100644
--- a/android_icu4j/api/intra/current.txt
+++ b/android_icu4j/api/intra/current.txt
@@ -102,7 +102,6 @@
package com.android.i18n.timezone {
public final class ZoneInfoData {
- method public com.android.i18n.timezone.ZoneInfoData createCopy();
method public com.android.i18n.timezone.ZoneInfoData createCopyWithRawOffset(int);
method public static com.android.i18n.timezone.ZoneInfoData createFromSerializationFields(String, java.io.ObjectInputStream.GetField) throws java.io.IOException;
method public static com.android.i18n.timezone.ZoneInfoData createZoneInfo(String, java.nio.ByteBuffer) throws java.io.IOException;
diff --git a/android_icu4j/libcore_bridge/src/java/com/android/i18n/timezone/ZoneInfoData.java b/android_icu4j/libcore_bridge/src/java/com/android/i18n/timezone/ZoneInfoData.java
index efc903d..57f341e 100644
--- a/android_icu4j/libcore_bridge/src/java/com/android/i18n/timezone/ZoneInfoData.java
+++ b/android_icu4j/libcore_bridge/src/java/com/android/i18n/timezone/ZoneInfoData.java
@@ -775,14 +775,6 @@
}
/**
- * Create a deep copy of this object.
- */
- @libcore.api.IntraCoreApi
- public ZoneInfoData createCopy() {
- return new ZoneInfoData(this);
- }
-
- /**
* Create a deep copy of this object with a new raw offset.
*/
@libcore.api.IntraCoreApi
@@ -794,13 +786,11 @@
* Returns the times (in seconds) at which the offsets changes for any reason, whether that is a
* change in the offset from UTC or a change in the DST.
*
- * WARNING: This API is exposed only for app compat usage in {@link libcore.util.ZoneInfo}. The
- * data is read-only. Do not write any data into the returned array, which is an internal
- * data structure.
+ * WARNING: This API is exposed only for app compat usage in @link libcore.util.ZoneInfo}.
*/
@libcore.api.IntraCoreApi
public long[] getTransitions() {
- return mTransitions;
+ return mTransitions == null ? null : mTransitions.clone();
}
/**
diff --git a/android_icu4j/libcore_bridge/src/java/com/android/i18n/timezone/ZoneInfoDb.java b/android_icu4j/libcore_bridge/src/java/com/android/i18n/timezone/ZoneInfoDb.java
index 9fbf0d3..f5fa160 100644
--- a/android_icu4j/libcore_bridge/src/java/com/android/i18n/timezone/ZoneInfoDb.java
+++ b/android_icu4j/libcore_bridge/src/java/com/android/i18n/timezone/ZoneInfoDb.java
@@ -382,8 +382,9 @@
public ZoneInfoData makeZoneInfoData(String id) {
checkNotClosed();
ZoneInfoData zoneInfoData = cache.get(id);
- // The object from the cache is cloned because TimeZone / ZoneInfo are mutable.
- return zoneInfoData == null ? null : zoneInfoData.createCopy();
+ // The object from the cache is not cloned because ZoneInfoData is immutable.
+ // Note that zoneInfoData can be null here.
+ return zoneInfoData;
}
@libcore.api.CorePlatformApi
diff --git a/android_icu4j/testing/src/com/android/i18n/test/timezone/ZoneInfoDataTest.java b/android_icu4j/testing/src/com/android/i18n/test/timezone/ZoneInfoDataTest.java
index 7a7472a..29a5d28 100644
--- a/android_icu4j/testing/src/com/android/i18n/test/timezone/ZoneInfoDataTest.java
+++ b/android_icu4j/testing/src/com/android/i18n/test/timezone/ZoneInfoDataTest.java
@@ -632,24 +632,6 @@
}
}
- public void testCreateCopy() throws Exception {
- long[][] transitions = {
- { 0, 0 },
- { 5, 1 },
- { 2000, 2 },
- };
- int[][] types = {
- { 1800, 0 },
- { 3600, 1 },
- { 5400, 0 }
- };
- ZoneInfoData zoneInfoData = createZoneInfoData(transitions, types);
- ZoneInfoData copy = zoneInfoData.createCopy();
- assertNotSame(zoneInfoData, copy);
- assertTrue("zoneInfoData does not have the same rule as its copy",
- zoneInfoData.hasSameRules(copy));
- }
-
public void testCreateCopyWithRawOffset() throws Exception {
long[][] transitions = {
{ 0, 0 },