--- old/make/jdk/src/classes/build/tools/cldrconverter/CLDRConverter.java 2019-07-05 06:56:29.943459433 +0100 +++ new/make/jdk/src/classes/build/tools/cldrconverter/CLDRConverter.java 2019-07-05 06:56:29.803459433 +0100 @@ -108,7 +108,7 @@ private static final ResourceBundle.Control defCon = ResourceBundle.Control.getControl(ResourceBundle.Control.FORMAT_DEFAULT); - private static final String[] AVAILABLE_TZIDS = TimeZone.getAvailableIDs(); + private static Set AVAILABLE_TZIDS; private static String zoneNameTempFile; private static String tzDataDir; private static final Map canonicalTZMap = new HashMap<>(); @@ -730,7 +730,7 @@ }); } - Arrays.stream(AVAILABLE_TZIDS).forEach(tzid -> { + getAvailableZoneIds().stream().forEach(tzid -> { // If the tzid is deprecated, get the data for the replacement id String tzKey = Optional.ofNullable((String)handlerSupplMeta.get(tzid)) .orElse(tzid); @@ -1074,8 +1074,20 @@ StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING); } + // This method assumes handlerMetaZones is already initialized + private static Set getAvailableZoneIds() { + assert handlerMetaZones != null; + if (AVAILABLE_TZIDS == null) { + AVAILABLE_TZIDS = new HashSet(ZoneId.getAvailableZoneIds()); + AVAILABLE_TZIDS.addAll(handlerMetaZones.keySet()); + AVAILABLE_TZIDS.remove(MetaZonesParseHandler.NO_METAZONE_KEY); + } + + return AVAILABLE_TZIDS; + } + private static Stream zidMapEntry() { - return ZoneId.getAvailableZoneIds().stream() + return getAvailableZoneIds().stream() .map(id -> { String canonId = canonicalTZMap.getOrDefault(id, id); String meta = handlerMetaZones.get(canonId);