OpenJDK / lambda / lambda / jdk
changeset 10315:658e121bda42
8025971: Remove ZoneId.OLD_SHORT_IDS
8026197: Slow reading tzdb.dat if the JRE is on a high-latency, remote file system
Summary: removed the compatiblity old short-ids mapping
Reviewed-by: okutsu
author | sherman |
---|---|
date | Thu, 17 Oct 2013 23:43:08 -0700 |
parents | 8a7b1b615100 |
children | 8479a48d9fd4 |
files | src/share/classes/java/time/ZoneId.java src/share/classes/java/time/zone/TzdbZoneRulesProvider.java src/share/classes/java/util/TimeZone.java src/share/classes/sun/util/calendar/ZoneInfoFile.java test/java/time/tck/java/time/TCKZoneId.java test/java/util/Calendar/JavatimeTest.java |
diffstat | 6 files changed, 56 insertions(+), 131 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/java/time/ZoneId.java Thu Oct 17 22:22:14 2013 -0700 +++ b/src/share/classes/java/time/ZoneId.java Thu Oct 17 23:43:08 2013 -0700 @@ -169,60 +169,15 @@ public abstract class ZoneId implements Serializable { /** - * A map of zone overrides to enable the older short time-zone names to be used. - * <p> - * Use of short zone IDs has been deprecated in {@code java.util.TimeZone}. - * This map allows the IDs to continue to be used via the - * {@link #of(String, Map)} factory method. - * <p> - * This map contains an older mapping of the IDs, where 'EST', 'MST' and 'HST' - * map to IDs which include daylight savings. - * This is in line with versions of TZDB before 2005r. - * <p> - * This maps as follows: - * <ul> - * <li>EST - America/New_York</li> - * <li>MST - America/Denver</li> - * <li>HST - Pacific/Honolulu</li> - * <li>ACT - Australia/Darwin</li> - * <li>AET - Australia/Sydney</li> - * <li>AGT - America/Argentina/Buenos_Aires</li> - * <li>ART - Africa/Cairo</li> - * <li>AST - America/Anchorage</li> - * <li>BET - America/Sao_Paulo</li> - * <li>BST - Asia/Dhaka</li> - * <li>CAT - Africa/Harare</li> - * <li>CNT - America/St_Johns</li> - * <li>CST - America/Chicago</li> - * <li>CTT - Asia/Shanghai</li> - * <li>EAT - Africa/Addis_Ababa</li> - * <li>ECT - Europe/Paris</li> - * <li>IET - America/Indiana/Indianapolis</li> - * <li>IST - Asia/Kolkata</li> - * <li>JST - Asia/Tokyo</li> - * <li>MIT - Pacific/Apia</li> - * <li>NET - Asia/Yerevan</li> - * <li>NST - Pacific/Auckland</li> - * <li>PLT - Asia/Karachi</li> - * <li>PNT - America/Phoenix</li> - * <li>PRT - America/Puerto_Rico</li> - * <li>PST - America/Los_Angeles</li> - * <li>SST - Pacific/Guadalcanal</li> - * <li>VST - Asia/Ho_Chi_Minh</li> - * </ul> - * The map is unmodifiable. - */ - public static final Map<String, String> OLD_SHORT_IDS; - /** * A map of zone overrides to enable the short time-zone names to be used. * <p> * Use of short zone IDs has been deprecated in {@code java.util.TimeZone}. * This map allows the IDs to continue to be used via the * {@link #of(String, Map)} factory method. * <p> - * This map contains a newer mapping of the IDs, where 'EST', 'MST' and 'HST' - * map to IDs which do not include daylight savings - * This is in line with TZDB 2005r and later. + * This map contains a mapping of the IDs that is in line with TZDB 2005r and + * later, where 'EST', 'MST' and 'HST' map to IDs which do not include daylight + * savings. * <p> * This maps as follows: * <ul> @@ -259,42 +214,36 @@ */ public static final Map<String, String> SHORT_IDS; static { - Map<String, String> base = new HashMap<>(); - base.put("ACT", "Australia/Darwin"); - base.put("AET", "Australia/Sydney"); - base.put("AGT", "America/Argentina/Buenos_Aires"); - base.put("ART", "Africa/Cairo"); - base.put("AST", "America/Anchorage"); - base.put("BET", "America/Sao_Paulo"); - base.put("BST", "Asia/Dhaka"); - base.put("CAT", "Africa/Harare"); - base.put("CNT", "America/St_Johns"); - base.put("CST", "America/Chicago"); - base.put("CTT", "Asia/Shanghai"); - base.put("EAT", "Africa/Addis_Ababa"); - base.put("ECT", "Europe/Paris"); - base.put("IET", "America/Indiana/Indianapolis"); - base.put("IST", "Asia/Kolkata"); - base.put("JST", "Asia/Tokyo"); - base.put("MIT", "Pacific/Apia"); - base.put("NET", "Asia/Yerevan"); - base.put("NST", "Pacific/Auckland"); - base.put("PLT", "Asia/Karachi"); - base.put("PNT", "America/Phoenix"); - base.put("PRT", "America/Puerto_Rico"); - base.put("PST", "America/Los_Angeles"); - base.put("SST", "Pacific/Guadalcanal"); - base.put("VST", "Asia/Ho_Chi_Minh"); - Map<String, String> pre = new HashMap<>(base); - pre.put("EST", "America/New_York"); - pre.put("MST", "America/Denver"); - pre.put("HST", "Pacific/Honolulu"); - OLD_SHORT_IDS = Collections.unmodifiableMap(pre); - Map<String, String> post = new HashMap<>(base); - post.put("EST", "-05:00"); - post.put("MST", "-07:00"); - post.put("HST", "-10:00"); - SHORT_IDS = Collections.unmodifiableMap(post); + Map<String, String> map = new HashMap<>(64); + map.put("ACT", "Australia/Darwin"); + map.put("AET", "Australia/Sydney"); + map.put("AGT", "America/Argentina/Buenos_Aires"); + map.put("ART", "Africa/Cairo"); + map.put("AST", "America/Anchorage"); + map.put("BET", "America/Sao_Paulo"); + map.put("BST", "Asia/Dhaka"); + map.put("CAT", "Africa/Harare"); + map.put("CNT", "America/St_Johns"); + map.put("CST", "America/Chicago"); + map.put("CTT", "Asia/Shanghai"); + map.put("EAT", "Africa/Addis_Ababa"); + map.put("ECT", "Europe/Paris"); + map.put("IET", "America/Indiana/Indianapolis"); + map.put("IST", "Asia/Kolkata"); + map.put("JST", "Asia/Tokyo"); + map.put("MIT", "Pacific/Apia"); + map.put("NET", "Asia/Yerevan"); + map.put("NST", "Pacific/Auckland"); + map.put("PLT", "Asia/Karachi"); + map.put("PNT", "America/Phoenix"); + map.put("PRT", "America/Puerto_Rico"); + map.put("PST", "America/Los_Angeles"); + map.put("SST", "Pacific/Guadalcanal"); + map.put("VST", "Asia/Ho_Chi_Minh"); + map.put("EST", "-05:00"); + map.put("MST", "-07:00"); + map.put("HST", "-10:00"); + SHORT_IDS = Collections.unmodifiableMap(map); } /** * Serialization version. @@ -314,7 +263,7 @@ * @throws ZoneRulesException if the converted zone region ID cannot be found */ public static ZoneId systemDefault() { - return ZoneId.of(TimeZone.getDefault().getID(), SHORT_IDS); + return TimeZone.getDefault().toZoneId(); } /**
--- a/src/share/classes/java/time/zone/TzdbZoneRulesProvider.java Thu Oct 17 22:22:14 2013 -0700 +++ b/src/share/classes/java/time/zone/TzdbZoneRulesProvider.java Thu Oct 17 23:43:08 2013 -0700 @@ -62,6 +62,7 @@ package java.time.zone; import java.io.ByteArrayInputStream; +import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; @@ -107,7 +108,8 @@ try { String libDir = System.getProperty("java.home") + File.separator + "lib"; try (DataInputStream dis = new DataInputStream( - new FileInputStream(new File(libDir, "tzdb.dat")))) { + new BufferedInputStream(new FileInputStream( + new File(libDir, "tzdb.dat"))))) { load(dis); } } catch (Exception ex) {
--- a/src/share/classes/java/util/TimeZone.java Thu Oct 17 22:22:14 2013 -0700 +++ b/src/share/classes/java/util/TimeZone.java Thu Oct 17 23:43:08 2013 -0700 @@ -544,7 +544,16 @@ * @since 1.8 */ public ZoneId toZoneId() { - return ZoneId.of(getID(), ZoneId.SHORT_IDS); + String id = getID(); + if (ZoneInfoFile.useOldMapping() && id.length() == 3) { + if ("EST".equals(id)) + return ZoneId.of("America/New_York"); + if ("MST".equals(id)) + return ZoneId.of("America/Denver"); + if ("HST".equals(id)) + return ZoneId.of("America/Honolulu"); + } + return ZoneId.of(id, ZoneId.SHORT_IDS); } private static TimeZone getTimeZone(String ID, boolean fallback) {
--- a/src/share/classes/sun/util/calendar/ZoneInfoFile.java Thu Oct 17 22:22:14 2013 -0700 +++ b/src/share/classes/sun/util/calendar/ZoneInfoFile.java Thu Oct 17 23:43:08 2013 -0700 @@ -26,6 +26,7 @@ package sun.util.calendar; import java.io.ByteArrayInputStream; +import java.io.BufferedInputStream; import java.io.DataInput; import java.io.DataInputStream; import java.io.File; @@ -243,7 +244,8 @@ try { String libDir = System.getProperty("java.home") + File.separator + "lib"; try (DataInputStream dis = new DataInputStream( - new FileInputStream(new File(libDir, "tzdb.dat")))) { + new BufferedInputStream(new FileInputStream( + new File(libDir, "tzdb.dat"))))) { load(dis); } } catch (Exception x) { @@ -265,6 +267,10 @@ } } + public static boolean useOldMapping() { + return USE_OLDMAPPING; + } + /** * Loads the rules from a DateInputStream *
--- a/test/java/time/tck/java/time/TCKZoneId.java Thu Oct 17 22:22:14 2013 -0700 +++ b/test/java/time/tck/java/time/TCKZoneId.java Thu Oct 17 23:43:08 2013 -0700 @@ -94,47 +94,6 @@ public class TCKZoneId extends AbstractTCKTest { //----------------------------------------------------------------------- - // OLD_SHORT_IDS - //----------------------------------------------------------------------- - public void test_constant_OLD_IDS_PRE_2005() { - Map<String, String> ids = ZoneId.OLD_SHORT_IDS; - assertEquals(ids.get("EST"), "America/New_York"); - assertEquals(ids.get("MST"), "America/Denver"); - assertEquals(ids.get("HST"), "Pacific/Honolulu"); - assertEquals(ids.get("ACT"), "Australia/Darwin"); - assertEquals(ids.get("AET"), "Australia/Sydney"); - assertEquals(ids.get("AGT"), "America/Argentina/Buenos_Aires"); - assertEquals(ids.get("ART"), "Africa/Cairo"); - assertEquals(ids.get("AST"), "America/Anchorage"); - assertEquals(ids.get("BET"), "America/Sao_Paulo"); - assertEquals(ids.get("BST"), "Asia/Dhaka"); - assertEquals(ids.get("CAT"), "Africa/Harare"); - assertEquals(ids.get("CNT"), "America/St_Johns"); - assertEquals(ids.get("CST"), "America/Chicago"); - assertEquals(ids.get("CTT"), "Asia/Shanghai"); - assertEquals(ids.get("EAT"), "Africa/Addis_Ababa"); - assertEquals(ids.get("ECT"), "Europe/Paris"); - assertEquals(ids.get("IET"), "America/Indiana/Indianapolis"); - assertEquals(ids.get("IST"), "Asia/Kolkata"); - assertEquals(ids.get("JST"), "Asia/Tokyo"); - assertEquals(ids.get("MIT"), "Pacific/Apia"); - assertEquals(ids.get("NET"), "Asia/Yerevan"); - assertEquals(ids.get("NST"), "Pacific/Auckland"); - assertEquals(ids.get("PLT"), "Asia/Karachi"); - assertEquals(ids.get("PNT"), "America/Phoenix"); - assertEquals(ids.get("PRT"), "America/Puerto_Rico"); - assertEquals(ids.get("PST"), "America/Los_Angeles"); - assertEquals(ids.get("SST"), "Pacific/Guadalcanal"); - assertEquals(ids.get("VST"), "Asia/Ho_Chi_Minh"); - } - - @Test(expectedExceptions=UnsupportedOperationException.class) - public void test_constant_OLD_IDS_PRE_2005_immutable() { - Map<String, String> ids = ZoneId.OLD_SHORT_IDS; - ids.clear(); - } - - //----------------------------------------------------------------------- // SHORT_IDS //----------------------------------------------------------------------- public void test_constant_OLD_IDS_POST_2005() {
--- a/test/java/util/Calendar/JavatimeTest.java Thu Oct 17 22:22:14 2013 -0700 +++ b/test/java/util/Calendar/JavatimeTest.java Thu Oct 17 23:43:08 2013 -0700 @@ -114,14 +114,14 @@ zidStr.equals("MST")) { continue; } - ZoneId zid = ZoneId.of(zidStr, ZoneId.OLD_SHORT_IDS); + ZoneId zid = ZoneId.of(zidStr, ZoneId.SHORT_IDS); if (!zid.equals(TimeZone.getTimeZone(zid).toZoneId())) { throw new RuntimeException("FAILED: zid -> tz -> zid :" + zidStr); } TimeZone tz = TimeZone.getTimeZone(zidStr); // no round-trip for alias and "GMT" if (!tz.equals(TimeZone.getTimeZone(tz.toZoneId())) && - !ZoneId.OLD_SHORT_IDS.containsKey(zidStr) && + !ZoneId.SHORT_IDS.containsKey(zidStr) && !zidStr.startsWith("GMT")) { throw new RuntimeException("FAILED: tz -> zid -> tz :" + zidStr); }